39 lines
1.4 KiB
JavaScript
39 lines
1.4 KiB
JavaScript
/**
|
|
* 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
|