Files
buzz/app/api/card/[sub]/route.ts
T

52 lines
1.3 KiB
TypeScript
Executable File

import { eq } from "drizzle-orm";
import { after, type NextRequest } from "next/server";
import { db } from "@/lib/db";
import { cards, characters, submissions } from "@/lib/db/schema";
import { createCardHandler } from "./handler";
const handler = createCardHandler({
findSubmission: async (id) =>
db
.select({ uid: submissions.uid, char: submissions.char })
.from(submissions)
.where(eq(submissions.id, id))
.then(([value]) => value),
findImage: async (id) =>
db
.select({ image: cards.image })
.from(cards)
.where(eq(cards.submission, id))
.then(([value]) =>
value?.image ? new Uint8Array(value.image) : undefined,
),
findCharacter: async (name) =>
db
.select({ amber: characters.amber })
.from(characters)
.where(eq(characters.name, name))
.then(([value]) => value),
fetch,
after,
persistImage: async (subId, fresh) => {
await db
.insert(cards)
.values({
image: Buffer.from(fresh),
submission: subId,
})
.onConflictDoUpdate({
target: cards.submission,
set: {
image: Buffer.from(fresh),
},
});
},
});
export function GET(
req: NextRequest,
context: RouteContext<"/api/card/[sub]">,
) {
return handler(req, context);
}