e2e Tests für Verbrauchsausweis Wohnen und Gewerbe vollständig

This commit is contained in:
Moritz Utcke
2025-02-07 14:58:51 +07:00
parent 64fa120ccd
commit 829c176b50
66 changed files with 219 additions and 168 deletions

View File

@@ -1,9 +1,8 @@
import { z } from "zod";
import { Enums, RechnungSchema, prisma } from "@ibcornelsen/database/server";
import { TRPCError } from "@trpc/server";
import { BedarfsausweisWohnen, Enums, RechnungSchema, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen, prisma } from "@ibcornelsen/database/server";
import { mollieClient } from "#lib/mollie.js";
import { PaymentMethod } from "@mollie/api-client";
import { defineApiRoute } from "astro-typesafe-api/server";
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
import {
authorizationHeaders,
authorizationMiddleware,
@@ -51,94 +50,96 @@ export const PUT = defineApiRoute({
// TODO: Services Implementieren
let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
if (ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) {
throw new TRPCError({
code: "BAD_REQUEST",
message: "Bedarfsausweis Wohnen wird noch nicht unterstützt.",
});
ausweis = await prisma.bedarfsausweisWohnen.findUnique({
where: {
uid: ausweis_uid
}
})
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
throw new TRPCError({
code: "BAD_REQUEST",
message:
"Verbrauchsausweis Gewerbe wird noch nicht unterstützt.",
});
ausweis = await prisma.verbrauchsausweisGewerbe.findUnique({
where: {
uid: ausweis_uid
}
})
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
// Wir müssen überprüfen, ob dem Nutzer der Ausweis tatsächlich gehört.
const ausweis = await prisma.verbrauchsausweisWohnen.findUnique({
ausweis = await prisma.verbrauchsausweisWohnen.findUnique({
where: {
uid: ausweis_uid,
},
});
if (!ausweis) {
throw new TRPCError({
code: "NOT_FOUND",
message: "Ausweis nicht gefunden.",
});
}
if (ausweis.benutzer_id !== user.id) {
throw new TRPCError({
code: "UNAUTHORIZED",
message: "Ausweis gehört nicht dem Nutzer.",
});
}
// Wir erstellen eine neue Rechnung in unserer Datenbank.
const rechnung = await prisma.rechnung.create({
data: {
benutzer_id: user.id,
betrag: 0,
bezahlmethode: bezahlmethode,
status: Enums.Rechnungsstatus.open,
aufnahme_id: ausweis.aufnahme_id,
},
select: {
uid: true,
betrag: true,
},
});
if (!rechnung) {
throw new TRPCError({
code: "INTERNAL_SERVER_ERROR",
message: "Rechnung konnte nicht erstellt werden.",
});
}
// Wir erstellen eine Mollie Payment Referenz.
const payment = await mollieClient.payments.create({
amount: {
value: "45.00",
currency: "EUR",
},
metadata: {
rechnung_uid: rechnung.uid,
},
method: input.bezahlmethode as PaymentMethod,
description: "Verbrauchsausweis Wohnen 2016",
redirectUrl: "https://ibcornelsen.de/payment/success",
webhookUrl: `http://ibcornelsen.de/api/webhooks/mollie?uid=${rechnung.uid}`,
});
const checkoutUrl = payment.getCheckoutUrl();
if (!checkoutUrl) {
throw new TRPCError({
code: "INTERNAL_SERVER_ERROR",
message: "Checkout URL konnte nicht erstellt werden.",
});
}
return {
uid: rechnung.uid,
checkout_url: checkoutUrl,
};
} else {
throw new TRPCError({
throw new APIError({
code: "BAD_REQUEST",
message: "Ausweisart nicht unterstützt.",
});
}
if (!ausweis) {
throw new APIError({
code: "NOT_FOUND",
message: "Ausweis nicht gefunden.",
});
}
if (ausweis.benutzer_id !== user.id) {
throw new APIError({
code: "UNAUTHORIZED",
message: "Ausweis gehört nicht dem Nutzer.",
});
}
// Wir erstellen eine neue Rechnung in unserer Datenbank.
const rechnung = await prisma.rechnung.create({
data: {
benutzer_id: user.id,
betrag: 0,
bezahlmethode: bezahlmethode,
status: Enums.Rechnungsstatus.open,
aufnahme_id: ausweis.aufnahme_id,
},
select: {
uid: true,
betrag: true,
},
});
if (!rechnung) {
throw new APIError({
code: "INTERNAL_SERVER_ERROR",
message: "Rechnung konnte nicht erstellt werden.",
});
}
// Wir erstellen eine Mollie Payment Referenz.
const payment = await mollieClient.payments.create({
amount: {
value: "45.00",
currency: "EUR",
},
metadata: {
rechnung_uid: rechnung.uid,
},
method: input.bezahlmethode as PaymentMethod,
description: "Verbrauchsausweis Wohnen 2016",
redirectUrl: "https://ibcornelsen.de/payment/success",
webhookUrl: `http://ibcornelsen.de/api/webhooks/mollie?uid=${rechnung.uid}`,
});
const checkoutUrl = payment.getCheckoutUrl();
if (!checkoutUrl) {
throw new APIError({
code: "INTERNAL_SERVER_ERROR",
message: "Checkout URL konnte nicht erstellt werden.",
});
}
return {
uid: rechnung.uid,
checkout_url: checkoutUrl,
};
},
});