const express = require("express") const router = express.Router() const db = require("../db") const clean = (value) => value === "" ? null : value const mapSubdomainError = (err, fallbackMessage) => { let message = fallbackMessage let status = 500 if(err.code === "ER_DUP_ENTRY"){ status = 400 message = "Subdomain existiert bereits" } return {status, message} } /* alle Subdomains laden */ router.get("/", async (req,res)=>{ try{ const [rows] = await db.query(` SELECT s.id, s.subdomain, s.ip_address, d.domain_name, s.domain_id FROM subdomains s JOIN domains d ON s.domain_id=d.id `) res.json(rows) }catch(e){ console.error("SUBDOMAIN LIST error:",e) res.status(500).json({error:"Subdomains konnten nicht geladen werden"}) } }) /* Subdomains einer Domain */ router.get("/domain/:id", async (req,res)=>{ try{ const [rows] = await db.query( "SELECT * FROM subdomains WHERE domain_id=?", [req.params.id] ) res.json(rows) }catch(e){ console.error("SUBDOMAIN DOMAIN error:",e) res.status(500).json({error:"Subdomains der Domain konnten nicht geladen werden"}) } }) router.delete("/:id", async (req,res)=>{ try{ await db.query("DELETE FROM subdomains WHERE id=?",[req.params.id]) res.json({success:true}) }catch(e){ console.error("DELETE subdomain error:",e) res.status(500).json({error:"Subdomain konnte nicht geloescht werden"}) } }) router.post("/", async (req,res)=>{ try{ const domainId = clean(req.body.domain_id) const subdomain = req.body.subdomain ? String(req.body.subdomain).trim() : "" const ipAddress = clean(req.body.ip_address) if(!domainId){ return res.status(400).json({error:"Domain fehlt"}) } if(!subdomain){ return res.status(400).json({error:"Subdomain darf nicht leer sein"}) } await db.query(` INSERT INTO subdomains (domain_id, subdomain, ip_address) VALUES (?,?,?) `,[domainId, subdomain, ipAddress]) res.json({success:true}) }catch(e){ console.error("CREATE subdomain error:",e) const {status, message} = mapSubdomainError(e, "Subdomain konnte nicht gespeichert werden") res.status(status).json({error:message}) } }) router.put("/:id", async (req,res)=>{ try{ const subdomain = req.body.subdomain ? String(req.body.subdomain).trim() : "" const ipAddress = clean(req.body.ip_address) if(!subdomain){ return res.status(400).json({error:"Subdomain darf nicht leer sein"}) } await db.query(` UPDATE subdomains SET subdomain=?, ip_address=? WHERE id=? `,[subdomain, ipAddress, req.params.id]) res.json({success:true}) }catch(e){ console.error("UPDATE subdomain error:",e) const {status, message} = mapSubdomainError(e, "Subdomain konnte nicht gespeichert werden") res.status(status).json({error:message}) } }) module.exports = router