Projektkonto: Admin-Routen für Konten je Kunde und Detail je Projekt

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-07 14:12:40 +00:00
1 parent 32726fa1c2
commit 846059b455
2 files changed
+162 -2

No files matched your search

+29 -2
View File
@@ -1,11 +1,38 @@
/**
* Gerüst von Strang L0: Projektkonten (Admin). Mount: /api/admin/finanzen/projektkonten (vor dem Finanzen-Router).
* L1 ergänzt GET / (?kunde=<id>) und GET /:projektId.
* Projektkonten (Admin). Mount: /api/admin/finanzen/projektkonten (vor dem Finanzen-Router).
* GET /?kunde=<id> Projektkonten eines Kunden samt Zeile "Ohne Projekt"
* GET /:projektId Konto, ABs, Rechnungen und offene Arbeitsblaetter eines Projekts
* Nur lesen (Strang L1).
*/
import { Router } from 'express'
import { requireAppwriteStaff } from '../../middleware/appwriteStaff.js'
import { sendeFehler } from '../../services/auftraege/fehler.js'
import { projektkontenFuerKunde, projektkontoDetail } from '../../services/auftraege/projektkonto.js'
const router = Router()
router.use(requireAppwriteStaff)
// Appwrite-UID: erst pruefen, dann an Appwrite geben
const KENNUNG = /^[A-Za-z0-9][A-Za-z0-9._-]{0,35}$/
router.get('/', async (req, res) => {
const kunde = req.query.kunde
if (typeof kunde !== 'string' || !KENNUNG.test(kunde)) return res.status(400).json({ error: 'Kunde fehlt oder ist ungültig.' })
try {
res.json(await projektkontenFuerKunde(kunde))
} catch (err) {
sendeFehler(res, 'Projektkonten laden', err)
}
})
router.get('/:projektId', async (req, res) => {
const { projektId } = req.params
if (!KENNUNG.test(projektId)) return res.status(404).json({ error: 'Projekt nicht gefunden.' })
try {
res.json(await projektkontoDetail(projektId))
} catch (err) {
sendeFehler(res, 'Projektkonto laden', err)
}
})
export default router