Files
online-energieausweis/src/pages/api/aufnahme/index.ts
2025-04-29 10:39:11 -03:00

65 lines
1.4 KiB
TypeScript

import { IDWithPrefix } from "#components/Ausweis/types.js"
import { VALID_UUID_PREFIXES } from "#lib/constants.js"
import { generateIDWithPrefix } from "#lib/db.js"
import { authorizationMiddleware } from "#lib/middleware/authorization.js"
import { prisma } from "#lib/server/prisma.js"
import { APIError, defineApiRoute } from "astro-typesafe-api/server"
import { AufnahmeSchema } from "src/generated/zod/aufnahme.js"
import { z } from "zod"
export const PUT = defineApiRoute({
input: z.object({
aufnahme: AufnahmeSchema.omit({
id: true,
benutzer_id: true,
objekt_id: true,
}).merge(z.object({
baujahr_klima: z.array(z.number().int().positive()).optional()
})),
objekt_id: IDWithPrefix
}),
output: z.object({
id: IDWithPrefix
}),
middleware: authorizationMiddleware,
async fetch(input, context, user) {
const objekt = await prisma.objekt.findUnique({
where: {
id: input.objekt_id,
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 id = generateIDWithPrefix(9, VALID_UUID_PREFIXES.Aufnahme)
const aufnahme = await prisma.aufnahme.create({
data: {
id,
...input.aufnahme,
benutzer: {
connect: {
id: user.id
}
},
objekt: {
connect: {
id: input.objekt_id
}
}
},
})
return {
id: aufnahme.id
}
},
})