This commit is contained in:
2025-09-02 18:47:44 +02:00
parent 97a095b422
commit 7c4272ffe9
8 changed files with 319 additions and 7 deletions

11
src/utils/s3.ts Normal file
View File

@@ -0,0 +1,11 @@
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3"
export const s3 = new S3Client({
endpoint: process.env.S3_ENDPOINT || "https://fedeo.nbg1.your-objectstorage.com", // z. B. http://localhost:9000 für MinIO
region: process.env.S3_REGION || "eu-central",
credentials: {
accessKeyId: process.env.S3_ACCESS_KEY || "RYOMQRW8KSTY3UQX7RPJ",
secretAccessKey: process.env.S3_SECRET_KEY || "aZ33xBv47sPPsHuFKeHSDiLagjqF7nShnuGkj7B1",
},
forcePathStyle: true, // wichtig für MinIO
})

39
src/utils/sort.ts Normal file
View File

@@ -0,0 +1,39 @@
/**
* Sortiert ein Array von Objekten anhand einer Spalte.
*
* @param data Array von Objekten
* @param column Sortierspalte (Property-Name im Objekt)
* @param ascending true = aufsteigend, false = absteigend
*/
export function sortData<T extends Record<string, any>>(
data: T[],
column?: keyof T,
ascending: boolean = true
): T[] {
if (!column) return data
return [...data].sort((a, b) => {
const valA = a[column]
const valB = b[column]
// null/undefined nach hinten
if (valA == null && valB != null) return 1
if (valB == null && valA != null) return -1
if (valA == null && valB == null) return 0
// Zahlenvergleich
if (typeof valA === "number" && typeof valB === "number") {
return ascending ? valA - valB : valB - valA
}
// Datumsvergleich
if (valA instanceof Date && valB instanceof Date) {
return ascending ? valA.getTime() - valB.getTime() : valB.getTime() - valA.getTime()
}
// Fallback: Stringvergleich
return ascending
? String(valA).localeCompare(String(valB))
: String(valB).localeCompare(String(valA))
})
}