91 lines
1.9 KiB
TypeScript
91 lines
1.9 KiB
TypeScript
import { authorizationMiddleware } from "#lib/middleware/authorization.js";
|
|
import { Enums, prisma } from "#lib/server/prisma.js";
|
|
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
|
import { z } from "zod";
|
|
import { UUidWithPrefix } from "#components/Ausweis/types.js";
|
|
import { BildSchema } from "src/generated/zod/bild.js";
|
|
|
|
export const PUT = defineApiRoute({
|
|
input: z.array(UUidWithPrefix),
|
|
output: z.void(),
|
|
middleware: authorizationMiddleware,
|
|
async fetch(input, ctx, user) {
|
|
const aufnahme = await prisma.aufnahme.findUnique({
|
|
where: {
|
|
uid: ctx.params.uid
|
|
}
|
|
})
|
|
|
|
if (!aufnahme) {
|
|
throw new APIError({
|
|
code: "NOT_FOUND",
|
|
message: "Aufnahme existiert nicht oder gehört einem anderen Benutzer."
|
|
})
|
|
}
|
|
|
|
prisma.$transaction(async tx => {
|
|
for (const uid of input) {
|
|
const img = await tx.bild.findUnique({
|
|
where: {
|
|
uid
|
|
}
|
|
})
|
|
|
|
|
|
// Wenn das Bild bereits eine Aufnahme zugewiesen hat gehen wir einfach weiter.
|
|
if (img && img.aufnahme_id !== null) {
|
|
continue;
|
|
}
|
|
|
|
await tx.bild.update({
|
|
where: {
|
|
uid,
|
|
aufnahme_id: null
|
|
},
|
|
data: {
|
|
aufnahme_id: aufnahme.id
|
|
},
|
|
select: {
|
|
uid: true
|
|
}
|
|
})
|
|
}
|
|
})
|
|
},
|
|
})
|
|
|
|
export const GET = defineApiRoute({
|
|
middleware: authorizationMiddleware,
|
|
output: z.array(BildSchema.pick({
|
|
kategorie: true,
|
|
uid: true
|
|
})),
|
|
async fetch(input, ctx, user) {
|
|
const { uid } = ctx.params;
|
|
|
|
const aufnahme = await prisma.aufnahme.findUnique({
|
|
where: user.rolle === Enums.BenutzerRolle.USER ? {
|
|
uid,
|
|
benutzer_id: user.id
|
|
} : { uid },
|
|
select: {
|
|
benutzer_id: true,
|
|
bilder: {
|
|
select: {
|
|
kategorie: true,
|
|
uid: true
|
|
}
|
|
}
|
|
}
|
|
})
|
|
|
|
if (!aufnahme) {
|
|
throw new APIError({
|
|
code: "NOT_FOUND",
|
|
message: "Aufnahme existiert nicht oder gehört einem anderen Benutzer."
|
|
})
|
|
}
|
|
|
|
return aufnahme.bilder
|
|
},
|
|
}) |