import { Router } from 'express' import { config } from '../../config.js' import { listDocuments, Query } from '../../services/appwriteAdmin.js' import { syncReposToAppwrite, fetchRepoReadme, importNewRepos } from '../../services/giteaAdmin.js' import { requireAppwriteTeam } from '../../middleware/appwriteStaff.js' const router = Router() // Projekt-Aktionen: jeder Mitarbeiter (nicht nur Admins) router.use(requireAppwriteTeam) router.post('/sync-repos', async (_req, res) => { try { const result = await syncReposToAppwrite() return res.json({ ok: true, ...result }) } catch (err) { const status = err.status || 500 return res.status(status).json({ error: err.message || 'Gitea-Sync fehlgeschlagen' }) } }) // Neue Repos aus Gitea als minimale Projektdokumente anlegen (vom Projekt-Dialog im // Ticketsystem bei jedem Oeffnen aufgerufen). router.post('/import-repos', async (_req, res) => { try { const result = await importNewRepos() return res.json({ ok: true, ...result }) } catch (err) { const status = err.status || 500 return res.status(status).json({ error: err.message || 'Import fehlgeschlagen' }) } }) router.get('/repo-readme', async (req, res) => { const repoFullName = String(req.query.repoFullName || '').trim() if (!repoFullName) { return res.status(400).json({ error: 'repoFullName ist erforderlich' }) } try { // Nur Repos, die ein Projekt sind - der System-Schluessel sieht sonst jedes (auch private) Repo const known = await listDocuments(config.collections.websiteProjects, [ Query.equal('repoFullName', repoFullName), Query.limit(1), ]) if (!known[0]) return res.status(404).json({ error: 'Projekt nicht gefunden' }) const readme = await fetchRepoReadme(repoFullName) if (!readme) { return res.json({ ok: true, found: false, repoFullName }) } return res.json({ ok: true, found: true, repoFullName, ...readme }) } catch (err) { const status = err.status || 500 return res.status(status).json({ error: err.message || 'README konnte nicht geladen werden' }) } }) export default router