2025-02-22 19:30:19 +01:00

79 lines
2.0 KiB
TypeScript

import Elysia from "elysia";
import { KError } from "~/models/error";
import { SeedMovie } from "~/models/movie";
import { SeedSerie } from "~/models/serie";
import { Resource } from "~/models/utils";
import { comment } from "~/utils";
import { SeedMovieResponse, seedMovie } from "./movies";
import { SeedSerieResponse, seedSerie } from "./series";
export const seed = new Elysia()
.model({
"seed-movie": SeedMovie,
"seed-movie-response": SeedMovieResponse,
"seed-serie": SeedSerie,
"seed-serie-response": SeedSerieResponse,
})
.post(
"/movies",
async ({ body, error }) => {
const ret = await seedMovie(body);
if ("status" in ret) return error(ret.status, ret as any);
return error(ret.updated ? 200 : 201, ret);
},
{
detail: {
tags: ["movies"],
description:
"Create a movie & all related metadata. Can also link videos.",
},
body: SeedMovie,
response: {
200: {
...SeedMovieResponse,
description: "Existing movie edited/updated.",
},
201: { ...SeedMovieResponse, description: "Created a new movie." },
409: {
...Resource(),
description: comment`
A movie with the same slug but a different air date already exists.
Change the slug and re-run the request.
`,
},
422: KError,
},
},
)
.post(
"/series",
async ({ body, error }) => {
const ret = await seedSerie(body);
if ("status" in ret) return error(ret.status, ret as any);
return error(ret.updated ? 200 : 201, ret);
},
{
detail: {
tags: ["series"],
description:
"Create a series & all related metadata. Can also link videos.",
},
body: SeedSerie,
response: {
200: {
...SeedSerieResponse,
description: "Existing serie edited/updated.",
},
201: { ...SeedSerieResponse, description: "Created a new serie." },
409: {
...Resource(),
description: comment`
A serie with the same slug but a different air date already exists.
Change the slug and re-run the request.
`,
},
422: KError,
},
},
);