import { BenutzerClient, getAusweisartFromId, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js"; import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js"; import { pdfDatenblattVerbrauchsausweisGewerbe } from "#lib/pdf/pdfDatenblattVerbrauchsausweisGewerbe.js"; import { pdfDatenblattVerbrauchsausweisWohnen } from "#lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.js"; import { Aufnahme, Benutzer, Bild, Enums, Objekt, Rechnung, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "#lib/client/prisma.js"; import { APIRoute } from "astro"; import { createCaller } from "src/astro-typesafe-api-caller.js"; import { getS3File } from "#lib/s3.js"; import { getAufnahme, getBilder, getObjekt, getRechnung, getVerbrauchsausweisGewerbe, getVerbrauchsausweisWohnen } from "#lib/server/db.js"; import { getCurrentUser } from "#lib/server/user.js"; export const GET: APIRoute = async (Astro) => { const ausweis_id = Astro.url.searchParams.get("id"); if (!ausweis_id) { return new Response(null, { status: 404 }); } const ausweisart = getAusweisartFromId(ausweis_id) let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | null = null; let aufnahme: Aufnahme = {} as Aufnahme; let objekt: Objekt = {} as Objekt; let bilder: Bild[] = [] let rechnung: Rechnung | null = null; if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { ausweis = await getVerbrauchsausweisWohnen(ausweis_id) } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { ausweis = await getVerbrauchsausweisGewerbe(ausweis_id) } if (!ausweis) { return new Response(null, { status: 404 }); } aufnahme = await getAufnahme(ausweis.aufnahme_id) objekt = await getObjekt(aufnahme.objekt_id) bilder = await getBilder(ausweis.aufnahme_id) if (ausweis.rechnung_id) { rechnung = await getRechnung(ausweis.rechnung_id) } let pdf: Uint8Array | null = null; if (/[A-Z]{2}[0-9]{8}/.test(ausweis.id)) { const id = ausweis.id.match(/[A-Z]{2}([0-9]{8})/) as RegExpMatchArray // Dieser Ausweis wurde mit der alten Version erstellt, das PDF sollte bereits existieren. pdf = await getS3File("ibc-pdfs", `ID_${id[1]}_Datenblatt.pdf`) } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { pdf = await pdfDatenblattVerbrauchsausweisWohnen(ausweis as VerbrauchsausweisWohnenClient, aufnahme, objekt, rechnung, bilder); } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { pdf = await pdfDatenblattVerbrauchsausweisGewerbe(ausweis as VerbrauchsausweisGewerbeClient, aufnahme, objekt, rechnung, bilder); } return new Response(pdf, { headers: { "Content-Type": "application/pdf", }, }); } export const POST: APIRoute = async (Astro) => { const body = await Astro.request.text(); const params = new URLSearchParams(body); const ausweis = JSON.parse(params.get("ausweis") || "{}"); const aufnahme = JSON.parse(params.get("aufnahme") || "{}"); const objekt = JSON.parse(params.get("objekt") || "{}"); const bilder = JSON.parse(params.get("bilder") || "{}"); const ausweisart: Enums.Ausweisart = JSON.parse(params.get("ausweisart") || "") let pdf: Uint8Array | null = null; if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { pdf = await pdfDatenblattVerbrauchsausweisWohnen(ausweis, aufnahme, objekt, null, bilder); } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { pdf = await pdfDatenblattVerbrauchsausweisGewerbe(ausweis, aufnahme, objekt, null, bilder); } return new Response(pdf, { headers: { "Content-Type": "application/pdf", }, }); }