Files
online-energieausweis/src/pages/api/aufnahme/index.ts
Moritz Utcke d0e0f4aa27 Speichern
2025-03-07 14:47:09 -03:00

60 lines
1.3 KiB
TypeScript

import { UUidWithPrefix } from "#components/Ausweis/types.js"
import { authorizationMiddleware } from "#lib/middleware/authorization.js"
import { AufnahmeSchema, ObjektSchema, prisma } from "#lib/server/prisma.js"
import { APIError, defineApiRoute } from "astro-typesafe-api/server"
import { z } from "zod"
export const PUT = defineApiRoute({
input: z.object({
aufnahme: AufnahmeSchema.omit({
id: true,
uid: true,
benutzer_id: true,
objekt_id: true,
}).merge(z.object({
baujahr_klima: z.array(z.number().int().positive()).optional()
})),
uid_objekt: UUidWithPrefix
}),
output: z.object({
uid: UUidWithPrefix
}),
middleware: authorizationMiddleware,
async fetch(input, context, user) {
const objekt = await prisma.objekt.findUnique({
where: {
uid: input.uid_objekt,
benutzer: {
id: user.id
}
}
})
if (!objekt) {
throw new APIError({
code: "NOT_FOUND",
message: "Objekt konnte nicht gefunden werden oder gehört nicht diesem Benutzer."
})
}
const aufnahme = await prisma.aufnahme.create({
data: {
...input.aufnahme,
benutzer: {
connect: {
id: user.id
}
},
objekt: {
connect: {
uid: input.uid_objekt
}
}
},
})
return {
uid: aufnahme.uid
}
},
})