Merge pull request #490 from IBCornelsen/main

get main
This commit is contained in:
Jens Cornelsen
2025-04-06 00:42:28 +02:00
committed by GitHub
34 changed files with 204 additions and 218 deletions

View File

@@ -17,6 +17,9 @@ export const PUT = defineApiRoute({
}).merge(z.object({
nachweis_id: UUidWithPrefix
})),
output: z.object({
id: UUidWithPrefix
}),
headers: authorizationHeaders,
middleware: authorizationMiddleware,
async fetch(input, context, user) {

View File

@@ -2,13 +2,13 @@ import { authorizationMiddleware } from "#lib/middleware/authorization.js";
import { prisma } from "#lib/server/prisma.js";
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
import { z } from "zod";
import { fileURLToPath } from "url";
import { writeFileSync } from "fs";
import { PERSISTENT_DIR } from "#lib/server/constants.js";
import { UnterlageSchema } from "src/generated/zod/unterlage.js";
import { generatePrefixedId } from "#lib/db.js";
import { VALID_UUID_PREFIXES } from "#lib/constants.js";
import { UUidWithPrefix } from "#components/Ausweis/types.js";
import { PutObjectCommand } from "@aws-sdk/client-s3";
import { s3Client } from "#lib/s3.js";
import mime from "mime"
export const PUT = defineApiRoute({
input: UnterlageSchema.omit({
@@ -20,31 +20,37 @@ export const PUT = defineApiRoute({
output: z.object({
id: UUidWithPrefix
}),
async fetch({ data, name, kategorie, mime }, ctx, user) {
if (mime !== "application/pdf" && mime !== "image/png" && mime !== "image/jpeg") {
async fetch({ data, name, kategorie, mime: mimeType }, ctx, user) {
const extension = mime.getExtension(mimeType);
if (!extension) {
throw new APIError({
code: "BAD_REQUEST",
message: "Nicht unterstützter mimetype, unterstützt werden 'image/jpeg', 'image/png', 'application/pdf'."
message: "Mime Type wird nicht unterstützt."
})
}
const buffer = Buffer.from(data, "base64");
const id = generatePrefixedId(6, VALID_UUID_PREFIXES.Unterlage)
await prisma.unterlage.create({
data: {
id,
kategorie: kategorie,
mime,
mime: mimeType,
name
}
});
const filePath = fileURLToPath(new URL(`${PERSISTENT_DIR}/unterlagen/${id}`, import.meta.url));
const buffer = Buffer.from(data, "base64");
try {
writeFileSync(filePath, buffer)
const command = new PutObjectCommand({
Bucket: "ibc-unterlagen",
Key: `${id}.${extension}`,
Body: buffer,
ACL: "private"
})
const response = await s3Client.send(command)
} catch(e) {
// Unterlage wurde nicht gespeichert, wir löschen den Eintrag wieder
await prisma.unterlage.delete({

View File

@@ -33,7 +33,7 @@ const objekte = await prisma.objekt.findFirst({
every: {
verbrauchsausweise_gewerbe: {
some: {
alte_ausweis_id: parseInt(id)
id
}
},
}
@@ -44,7 +44,7 @@ const objekte = await prisma.objekt.findFirst({
every: {
verbrauchsausweise_wohnen: {
some: {
alte_ausweis_id: parseInt(id)
id
}
},
}
@@ -55,40 +55,7 @@ const objekte = await prisma.objekt.findFirst({
every: {
bedarfsausweise_wohnen: {
some: {
alte_ausweis_id: parseInt(id)
}
},
}
}
},
{
aufnahmen: {
every: {
verbrauchsausweise_gewerbe: {
some: {
id: `VG${id}`
}
},
}
}
},
{
aufnahmen: {
every: {
verbrauchsausweise_wohnen: {
some: {
id: `VW${id}`
}
},
}
}
},
{
aufnahmen: {
every: {
bedarfsausweise_wohnen: {
some: {
id: `BW${id}`
id
}
},
}

View File

@@ -43,7 +43,7 @@ const objekte = await prisma.objekt.findMany({
every: {
verbrauchsausweise_gewerbe: {
some: {
alte_ausweis_id: parseInt(id)
id
}
},
}
@@ -54,7 +54,7 @@ const objekte = await prisma.objekt.findMany({
every: {
verbrauchsausweise_wohnen: {
some: {
alte_ausweis_id: parseInt(id)
id
}
},
}
@@ -65,46 +65,7 @@ const objekte = await prisma.objekt.findMany({
every: {
bedarfsausweise_wohnen: {
some: {
alte_ausweis_id: parseInt(id)
}
},
}
}
},
{
aufnahmen: {
every: {
verbrauchsausweise_gewerbe: {
some: {
uid: {
startsWith: `vag-${id}`
}
}
},
}
}
},
{
aufnahmen: {
every: {
verbrauchsausweise_wohnen: {
some: {
uid: {
startsWith: `vaw-${id}`
}
}
},
}
}
},
{
aufnahmen: {
every: {
bedarfsausweise_wohnen: {
some: {
uid: {
startsWith: `baw-${id}`
}
id
}
},
}

View File

@@ -16,14 +16,15 @@ if (!params.has("ausweis") || !params.has("aufnahme") || !params.has("objekt") |
return Astro.redirect("/404")
}
let ausweis, aufnahme, objekt, ausweisart, bilder;
let ausweis, aufnahme, objekt, ausweisart, bilder, unterlagen;
try {
ausweis = JSON.parse(params.get("ausweis") || "")
aufnahme = JSON.parse(params.get("aufnahme") || "")
objekt = JSON.parse(params.get("objekt") || "")
ausweisart = JSON.parse(params.get("ausweisart") || "") as Enums.Ausweisart;
bilder = JSON.parse(params.get("bilder") || "");
unterlagen = JSON.parse(params.get("unterlagen") || "[]")
if (!ausweisart || !Object.keys(Enums.Ausweisart).includes(ausweisart)) {
throw new Error()
}
@@ -34,6 +35,6 @@ try {
---
<AusweisLayout title="Kundendaten Aufnehmen - IBCornelsen">
<KundendatenModule {user} {ausweis} {objekt} {aufnahme} {bilder} {ausweisart} unterlagen={[]} aktiveBezahlmethode={Enums.Bezahlmethoden.paypal} client:only="svelte" ></KundendatenModule>
<KundendatenModule {user} {ausweis} {objekt} {aufnahme} {bilder} {ausweisart} {unterlagen} aktiveBezahlmethode={Enums.Bezahlmethoden.paypal} client:only ></KundendatenModule>
</AusweisLayout>

View File

@@ -8,24 +8,24 @@ import { getPrismaAusweisAdapter } from "#lib/server/ausweis";
import { sendInvoiceMail } from "#lib/server/mail/invoice";
import { getCurrentUser } from "#lib/server/user";
const uidRechnung = Astro.url.searchParams.get("r");
const uidAusweis = Astro.url.searchParams.get("a");
const idRechnung = Astro.url.searchParams.get("r");
const idAusweis = Astro.url.searchParams.get("a");
const user = await getCurrentUser(Astro)
if (!uidRechnung || !uidAusweis || !user) {
if (!idRechnung || !idAusweis || !user) {
return Astro.redirect("/")
}
const rechnung = await prisma.rechnung.findUnique({
where: {
uid: uidRechnung,
id: idRechnung,
benutzer: {
uid: user.uid
id: user.id
}
}
})
const adapter = getPrismaAusweisAdapter(uidAusweis);
const adapter = getPrismaAusweisAdapter(idAusweis);
if (!adapter) {
return Astro.redirect("/")
@@ -33,7 +33,7 @@ if (!adapter) {
const ausweis = await adapter.findUnique({
where: {
uid: uidAusweis
id: idAusweis
}
})

View File

@@ -0,0 +1,31 @@
import { prisma } from "#lib/server/prisma.js";
import { APIRoute } from "astro";
import { getS3File } from "#lib/s3.js";
import mime from "mime"
export const GET: APIRoute = async (Astro) => {
const { id } = Astro.params;
const unterlage = await prisma.unterlage.findUnique({
where: {
id,
},
});
if (!unterlage) {
return new Response(null, {
status: 404,
});
}
const extension = mime.getExtension(unterlage.mime)
const file = await getS3File("ibc-unterlagen", `${unterlage.id}.${extension}`);
if (!file) {
return new Response(null, { status: 404 })
}
return new Response(file, { status: 200 })
};