Files
Fidelis HuberandClaude Sonnet 5 97c4aa1c68
Build and Deploy / version (push) Successful in 1s
Build and Deploy / build (push) Successful in 21s
Build and Deploy / deploy (push) Successful in 1s
Add local username/password login as fallback when Microsoft login isn't available
Neues "users"-Table (bcrypt-Hash, nie Klartext), POST /api/auth/login gibt ein
selbst-signiertes JWT (HS256) aus. requireAuth unterscheidet MSAL- (RS256) und
lokale Tokens (HS256) anhand des alg-Headers. Server legt beim Start optional
ein erstes lokales Konto an, wenn SEED_ADMIN_USERNAME/SEED_ADMIN_PASSWORD als
Stack-Env gesetzt sind (idempotent, Klartext-Passwort landet nie im Repo).

Frontend: Login-Screen hat jetzt einen Alternativ-Link zu Benutzername/Passwort,
App.tsx kombiniert MSAL- und lokalen Auth-Status.

Temporärer test-build-only.yml Workflow zur Docker-Build-Verifikation ohne
Registry-Push (wird nach dem Test wieder entfernt).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 17:56:40 +02:00

58 lines
1.3 KiB
Plaintext

generator client {
provider = "prisma-client-js"
binaryTargets = ["native", "linux-musl-openssl-3.0.x"]
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
enum ProjektStatus {
Aktiv
Abgeschlossen
}
model Projekt {
id String @id @default(cuid())
titel String
auftraggeber String?
datum DateTime? @db.Date
monteur String?
notiz String?
status ProjektStatus @default(Aktiv)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
material Material[]
@@map("projekte")
}
model Material {
id String @id @default(cuid())
projektId String
projekt Projekt @relation(fields: [projektId], references: [id], onDelete: Cascade)
bezeichnung String
artNr String?
menge Decimal @db.Decimal(10, 2)
einheit String
notiz String?
erstelltVon String?
createdAt DateTime @default(now())
@@index([projektId])
@@map("material")
}
// Lokales Konto als Fallback, falls Microsoft-Login nicht verfügbar ist.
// passwordHash ist ein bcrypt-Hash, das Klartext-Passwort wird nie gespeichert.
model User {
id String @id @default(cuid())
username String @unique
passwordHash String
name String?
createdAt DateTime @default(now())
@@map("users")
}