import { api } from "astro-typesafe-api/client" import { exclude } from "#lib/exclude.js"; import Cookies from "js-cookie"; import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js"; import { AufnahmeClient, BedarfsausweisWohnenClient, BildClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient, } from "#components/Ausweis/types.js"; import { Enums } from "#lib/client/prisma.js"; export async function ausweisSpeichern( ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient, objekt: ObjektClient, aufnahme: AufnahmeClient, bilder: BildClient[], ausweisart: Enums.Ausweisart ) { if (objekt.id) { await api.objekt._id.PATCH.fetch({ adresse: objekt.adresse, latitude: 0, longitude: 0, ort: objekt.ort, plz: objekt.plz }, { params: { id: objekt.id }, headers: { "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` } }) } else { const { id } = await api.objekt.PUT.fetch({ adresse: objekt.adresse, latitude: 0, longitude: 0, ort: objekt.ort, plz: objekt.plz }, { headers: { "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` } }) objekt.id = id; } if (aufnahme.id) { await api.aufnahme._id.PATCH.fetch({ baujahr_gebaeude: aufnahme.baujahr_gebaeude, baujahr_heizung: aufnahme.baujahr_heizung, baujahr_klima: aufnahme.baujahr_klima || [], alternative_heizung: aufnahme.alternative_heizung, alternative_kuehlung: aufnahme.alternative_kuehlung, alternative_lueftung: aufnahme.alternative_lueftung, alternative_warmwasser: aufnahme.alternative_warmwasser, aussenwand_gedaemmt: aufnahme.aussenwand_gedaemmt, aussenwand_min_12cm_gedaemmt: aufnahme.aussenwand_min_12cm_gedaemmt, ausweisart: aufnahme.ausweisart, brennstoff_1: aufnahme.brennstoff_1, brennstoff_2: aufnahme.brennstoff_2, brennwert_kessel: aufnahme.brennwert_kessel, dachgeschoss: aufnahme.dachgeschoss, dachgeschoss_gedaemmt: aufnahme.dachgeschoss_gedaemmt, dachgeschoss_min_12cm_gedaemmt: aufnahme.dachgeschoss_min_12cm_gedaemmt, doppel_verglasung: aufnahme.doppel_verglasung, dreifach_verglasung: aufnahme.dreifach_verglasung, durchlauf_erhitzer: aufnahme.durchlauf_erhitzer, einfach_verglasung: aufnahme.einfach_verglasung, einheiten: aufnahme.einheiten, einzelofen: aufnahme.einzelofen, energieeffizienzklasse: aufnahme.energieeffizienzklasse, fenster_dicht: aufnahme.fenster_dicht, fenster_teilweise_undicht: aufnahme.fenster_teilweise_undicht, flaeche: aufnahme.flaeche, gebaeudeteil: aufnahme.gebaeudeteil, gebaeudetyp: aufnahme.gebaeudetyp, heizungsrohre_gedaemmt: aufnahme.heizungsrohre_gedaemmt, isolier_verglasung: aufnahme.isolier_verglasung, keller: aufnahme.keller, keller_decke_gedaemmt: aufnahme.keller_decke_gedaemmt, keller_wand_gedaemmt: aufnahme.keller_wand_gedaemmt, kuehlung: aufnahme.kuehlung, leerstand: aufnahme.leerstand, lueftung: aufnahme.lueftung, niedertemperatur_kessel: aufnahme.niedertemperatur_kessel, nutzflaeche: aufnahme.nutzflaeche, oberste_geschossdecke_gedaemmt: aufnahme.oberste_geschossdecke_gedaemmt, oberste_geschossdecke_min_12cm_gedaemmt: aufnahme.oberste_geschossdecke_min_12cm_gedaemmt, photovoltaik: aufnahme.photovoltaik, raum_temperatur_regler: aufnahme.raum_temperatur_regler, rolllaeden_kaesten_gedaemmt: aufnahme.rolllaeden_kaesten_gedaemmt, saniert: aufnahme.saniert, solarsystem_warmwasser: aufnahme.solarsystem_warmwasser, standard_kessel: aufnahme.standard_kessel, tueren_dicht: aufnahme.tueren_dicht, tueren_undicht: aufnahme.tueren_undicht, waermepumpe: aufnahme.waermepumpe, warmwasser_rohre_gedaemmt: aufnahme.warmwasser_rohre_gedaemmt, zentralheizung: aufnahme.zentralheizung, zirkulation: aufnahme.zirkulation }, { params: { id: aufnahme.id }, headers: { "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` } }) } else { const { id } = await api.aufnahme.PUT.fetch({ aufnahme: { baujahr_gebaeude: aufnahme.baujahr_gebaeude, baujahr_heizung: aufnahme.baujahr_heizung, alternative_heizung: aufnahme.alternative_heizung, alternative_kuehlung: aufnahme.alternative_kuehlung, alternative_lueftung: aufnahme.alternative_lueftung, alternative_warmwasser: aufnahme.alternative_warmwasser, aussenwand_gedaemmt: aufnahme.aussenwand_gedaemmt, aussenwand_min_12cm_gedaemmt: aufnahme.aussenwand_min_12cm_gedaemmt, ausweisart: aufnahme.ausweisart, baujahr_klima: aufnahme.baujahr_klima, brennstoff_1: aufnahme.brennstoff_1, brennstoff_2: aufnahme.brennstoff_2, brennwert_kessel: aufnahme.brennwert_kessel, dachgeschoss: aufnahme.dachgeschoss, dachgeschoss_gedaemmt: aufnahme.dachgeschoss_gedaemmt, dachgeschoss_min_12cm_gedaemmt: aufnahme.dachgeschoss_min_12cm_gedaemmt, doppel_verglasung: aufnahme.doppel_verglasung, dreifach_verglasung: aufnahme.dreifach_verglasung, durchlauf_erhitzer: aufnahme.durchlauf_erhitzer, einfach_verglasung: aufnahme.einfach_verglasung, einheiten: aufnahme.einheiten, einzelofen: aufnahme.einzelofen, energieeffizienzklasse: aufnahme.energieeffizienzklasse, erstellungsdatum: aufnahme.erstellungsdatum, fenster_dicht: aufnahme.fenster_dicht, fenster_teilweise_undicht: aufnahme.fenster_teilweise_undicht, flaeche: aufnahme.flaeche, gebaeudeteil: aufnahme.gebaeudeteil, gebaeudetyp: aufnahme.gebaeudetyp, heizungsrohre_gedaemmt: aufnahme.heizungsrohre_gedaemmt, isolier_verglasung: aufnahme.isolier_verglasung, keller: aufnahme.keller, keller_decke_gedaemmt: aufnahme.keller_decke_gedaemmt, keller_wand_gedaemmt: aufnahme.keller_wand_gedaemmt, kuehlung: aufnahme.kuehlung, leerstand: aufnahme.leerstand, lueftung: aufnahme.lueftung, niedertemperatur_kessel: aufnahme.niedertemperatur_kessel, nutzflaeche: aufnahme.nutzflaeche, oberste_geschossdecke_gedaemmt: aufnahme.oberste_geschossdecke_gedaemmt, oberste_geschossdecke_min_12cm_gedaemmt: aufnahme.oberste_geschossdecke_min_12cm_gedaemmt, photovoltaik: aufnahme.photovoltaik, raum_temperatur_regler: aufnahme.raum_temperatur_regler, rolllaeden_kaesten_gedaemmt: aufnahme.rolllaeden_kaesten_gedaemmt, saniert: aufnahme.saniert, solarsystem_warmwasser: aufnahme.solarsystem_warmwasser, standard_kessel: aufnahme.standard_kessel, tueren_dicht: aufnahme.tueren_dicht, tueren_undicht: aufnahme.tueren_undicht, waermepumpe: aufnahme.waermepumpe, warmwasser_rohre_gedaemmt: aufnahme.warmwasser_rohre_gedaemmt, zentralheizung: aufnahme.zentralheizung, zirkulation: aufnahme.zirkulation }, objekt_id: objekt.id }, { headers: { "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` } }) aufnahme.id = id } let patchRoute: any; let putRoute: any; if (ausweisart == Enums.Ausweisart.VerbrauchsausweisWohnen) { patchRoute = api["verbrauchsausweis-wohnen"]._id.PATCH putRoute = api["verbrauchsausweis-wohnen"].PUT } else if (ausweisart == Enums.Ausweisart.VerbrauchsausweisGewerbe) { patchRoute = api["verbrauchsausweis-gewerbe"]._id.PATCH putRoute = api["verbrauchsausweis-gewerbe"].PUT } else if (ausweisart == Enums.Ausweisart.BedarfsausweisWohnen) { patchRoute = api["bedarfsausweis-wohnen"]._id.PATCH putRoute = api["bedarfsausweis-wohnen"].PUT } if (ausweis.id) { await patchRoute.fetch({ ...exclude(ausweis, ["id"]) }, { params: { id: ausweis.id }, headers: { "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` } }) } else { const { id } = await putRoute.fetch({ ausweis, aufnahme_id: aufnahme.id }, { headers: { "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` } }) ausweis.id = id; } await api.aufnahme._id.bilder.PUT.fetch(bilder.map(bild => bild.id), { params: { id: aufnahme.id }, headers: { "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` } }) return { ausweis_id: ausweis.id, aufnahme_id: aufnahme.id, objekt_id: objekt.id } }