chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
import type { ActionFunctionArgs } from "@remix-run/server-runtime";
|
||||
import { json } from "@remix-run/server-runtime";
|
||||
import { z } from "zod";
|
||||
import { requireAdminApiRequest } from "~/services/personalAccessToken.server";
|
||||
import { isValidDuration } from "~/services/realtime/duration.server";
|
||||
import {
|
||||
deprovisionBasinForOrg,
|
||||
ensureBasinForOrg,
|
||||
} from "~/services/realtime/streamBasinProvisioner.server";
|
||||
|
||||
const ParamsSchema = z.object({ organizationId: z.string() });
|
||||
|
||||
const BodySchema = z.discriminatedUnion("action", [
|
||||
z.object({
|
||||
action: z.literal("ensure"),
|
||||
retention: z
|
||||
.string()
|
||||
.refine(isValidDuration, "retention must be a duration like 7d, 30d, 365d, 1h, 1y"),
|
||||
}),
|
||||
z.object({ action: z.literal("deprovision") }),
|
||||
]);
|
||||
|
||||
export async function action({ request, params }: ActionFunctionArgs) {
|
||||
await requireAdminApiRequest(request);
|
||||
|
||||
const { organizationId } = ParamsSchema.parse(params);
|
||||
|
||||
let parsed: z.infer<typeof BodySchema>;
|
||||
try {
|
||||
const text = await request.text();
|
||||
const raw = text.length > 0 ? JSON.parse(text) : {};
|
||||
const result = BodySchema.safeParse(raw);
|
||||
if (!result.success) {
|
||||
return json({ ok: false, error: result.error.flatten() }, { status: 400 });
|
||||
}
|
||||
parsed = result.data;
|
||||
} catch {
|
||||
return json({ ok: false, error: "Invalid JSON body" }, { status: 400 });
|
||||
}
|
||||
|
||||
if (parsed.action === "ensure") {
|
||||
const result = await ensureBasinForOrg(organizationId, parsed.retention);
|
||||
return json({ ok: true, ...result });
|
||||
}
|
||||
|
||||
const result = await deprovisionBasinForOrg(organizationId);
|
||||
return json({ ok: true, ...result });
|
||||
}
|
||||
Reference in New Issue
Block a user