- previewDeploy.syncPreviewTls(): schreibt Traefik-Router (Host-Regeln) fuer alle Preview-Subdomains nach preview-hosts.yml, damit Let's Encrypt Zertifikate ausstellt. Laeuft nach jedem Deploy und beim Serverstart (ersetzt das nie aufgerufene bash-Script sync-preview-tls.sh). - createProjectFromTemplate: Subdomain optional. Ohne Subdomain wird nur das Gitea-Repo angelegt (projectType 'repo', Status 'created'), kein Deploy. - customerAdmin: Portal-Passwort liegt jetzt im Feld customers.portalPassword statt als __portalPassword__-Prefix in den Notizen; Legacy-Notizen werden beim naechsten Update bereinigt. CRM-Stufe (lead/customer) wird beim Setzen des Portal-Passworts nicht mehr auf 'active' ueberschrieben. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
33 lines
939 B
JavaScript
33 lines
939 B
JavaScript
import { Router } from 'express'
|
|
import { createProjectFromTemplate } from '../../services/giteaAdmin.js'
|
|
import { requireAppwriteStaff } from '../../middleware/appwriteStaff.js'
|
|
|
|
const router = Router()
|
|
|
|
router.use(requireAppwriteStaff)
|
|
|
|
router.post('/create-from-template', async (req, res) => {
|
|
const { repoName, displayName, subdomain, customerId = '', ticketId = '', owner } = req.body || {}
|
|
|
|
if (!repoName && !displayName) {
|
|
return res.status(400).json({ error: 'repoName oder displayName ist erforderlich' })
|
|
}
|
|
|
|
try {
|
|
const result = await createProjectFromTemplate({
|
|
repoName,
|
|
displayName,
|
|
subdomain,
|
|
customerId,
|
|
ticketId,
|
|
owner,
|
|
})
|
|
return res.status(201).json({ ok: true, ...result })
|
|
} catch (err) {
|
|
const status = err.status || 500
|
|
return res.status(status).json({ error: err.message || 'Projekt konnte nicht angelegt werden' })
|
|
}
|
|
})
|
|
|
|
export default router
|