const express = require("express"); const path = require("path"); const fs = require("fs"); const multer = require("multer"); const FamilyMember = require("../models/FamilyMember"); const router = express.Router(); const uploadsDir = path.join(__dirname, "..", "uploads", "family"); fs.mkdirSync(uploadsDir, { recursive: true }); const storage = multer.diskStorage({ destination: (req, file, cb) => { cb(null, uploadsDir); }, filename: (req, file, cb) => { const timestamp = Date.now(); const safeName = file.originalname.replace(/\s+/g, "-"); cb(null, `${timestamp}-${safeName}`); }, }); const upload = multer({ storage }); router.get("/", async (req, res) => { try { const members = await FamilyMember.find().sort({ order: 1, createdAt: 1 }); res.json(members); } catch (error) { res.status(500).json({ message: "Failed to fetch family members" }); } }); router.post("/", async (req, res) => { try { const member = await FamilyMember.create(req.body); res.status(201).json(member); } catch (error) { res.status(400).json({ message: "Failed to create family member" }); } }); router.post("/upload-icon", upload.single("file"), async (req, res) => { try { if (!req.file) { return res.status(400).json({ message: "File is required" }); } const baseUrl = `${req.protocol}://${req.get("host")}`; const url = `${baseUrl}/uploads/family/${req.file.filename}`; res.status(201).json({ url }); } catch (error) { res.status(400).json({ message: "Failed to upload icon" }); } }); router.get("/:id", async (req, res) => { try { const member = await FamilyMember.findById(req.params.id); if (!member) { return res.status(404).json({ message: "Family member not found" }); } res.json(member); } catch (error) { res.status(400).json({ message: "Failed to fetch family member" }); } }); router.put("/:id", async (req, res) => { try { const member = await FamilyMember.findByIdAndUpdate(req.params.id, req.body, { new: true, }); if (!member) { return res.status(404).json({ message: "Family member not found" }); } res.json(member); } catch (error) { res.status(400).json({ message: "Failed to update family member" }); } }); router.delete("/:id", async (req, res) => { try { const member = await FamilyMember.findByIdAndDelete(req.params.id); if (!member) { return res.status(404).json({ message: "Family member not found" }); } res.json({ ok: true }); } catch (error) { res.status(400).json({ message: "Failed to delete family member" }); } }); module.exports = router;