/** * Der Webhook wird von Mollie ausgelöst, wenn sich der Status einer Transaktion ändert. * https://docs.mollie.com/overview/webhooks * @param _props { id: string } */ import { z } from "zod"; import { Enums, prisma } from "#lib/server/prisma.js"; import { mollieClient } from "#lib/mollie.js"; import { APIError, defineApiRoute } from "astro-typesafe-api/server"; export const POST = defineApiRoute({ input: z.object({ id: z.string(), }), output: z.void(), async fetch(input, ctx) { const { id } = input; // Wir holen uns die Transaktion von Mollie. const payment = await mollieClient.payments.get(id); const metadata = payment.metadata as { rechnung_id: string } if (!payment) { throw new APIError({ code: "NOT_FOUND", message: "Transaktion nicht gefunden.", }); } if (!metadata.rechnung_id) { throw new APIError({ code: "BAD_REQUEST", message: "Rechnung UID nicht gefunden.", }); } // Wir holen uns die Rechnung aus unserer Datenbank. const rechnung = await prisma.rechnung.findUnique({ where: { id: metadata.rechnung_id, }, }); if (!rechnung) { throw new APIError({ code: "NOT_FOUND", message: "Rechnung nicht gefunden.", }); } // Wir aktualisieren den Status der Rechnung. await prisma.rechnung.update({ where: { id: rechnung.id, }, data: { status: payment.status as Enums.Rechnungsstatus, transaktions_referenz: payment.id, bezahlt_am: new Date() }, }); }, });