sendou.ink/app/features/admin/actions/admin.streams.server.ts
2026-06-16 15:46:04 +03:00

47 lines
1.2 KiB
TypeScript

import type { ActionFunctionArgs } from "react-router";
import { clearCombinedStreamsCache } from "~/features/core/streams/streams.server";
import { parseFormDataWithImages } from "~/form/parse.server";
import { requireRole } from "~/modules/permissions/guards.server";
import { dateToDatabaseTimestamp } from "~/utils/dates";
import { assertUnreachable } from "~/utils/types";
import { externalStreamActionSchema } from "../admin-schemas";
import * as ExternalStreamRepository from "../ExternalStreamRepository.server";
export const action = async ({ request }: ActionFunctionArgs) => {
requireRole("ADMIN");
const result = await parseFormDataWithImages({
request,
schema: externalStreamActionSchema,
});
if (!result.success) {
return { fieldErrors: result.fieldErrors };
}
const data = result.data;
switch (data._action) {
case "CREATE": {
await ExternalStreamRepository.insert({
name: data.name,
url: data.url,
avatarImgId: data.avatar,
startTime: dateToDatabaseTimestamp(data.startTime),
});
break;
}
case "DELETE": {
await ExternalStreamRepository.deleteById(data.id);
break;
}
default: {
assertUnreachable(data);
}
}
clearCombinedStreamsCache();
return null;
};