60 lines
1.3 KiB
TypeScript
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
|
|
}
|
|
},
|
|
}) |