0.1.3Updated 6 months ago
import { REST_Wrapper } from "@infinity-beyond/classes/rest_wrapper.ts";
import { FeatureFlag, type I_FeatureFlag } from "@infinity-beyond/modules/features/feature_flag.ts";
import { HandleBody } from "@infinity-beyond/infinity.ts";

export class FeatureFlagRest extends REST_Wrapper {
  constructor() {
    super();

    this.get('/', async (_req, _ctx) => {
      return Response.json({
        flags: FeatureFlag.entries()
      })
    })

    this.get('/:key', async (_req, ctx) => {
      const flag = FeatureFlag.has(ctx.params.key) ? FeatureFlag.get(ctx.params.key) : ({
        key: ctx.params.key,
        value: null,
        description: null
      }) satisfies Omit<I_FeatureFlag, 'value'> & { value: boolean | null };

      return Response.json({
        flag
      });
    });

    this.post('/', async (req, ctx) => {
      const { body } = await HandleBody(req);

      for(const [key, value] of Object.entries(body ?? {})) {
        if(FeatureFlag.has(key)) (FeatureFlag as any).set(key, value, ctx);
      }

      return Response.json({ success: true });
    })
  }
}