import { Router } from 'express'; import { z } from 'zod'; import { GalleryItem } from '../models/GalleryItem'; import { requireAuth } from '../middleware/auth'; import { uploadPhoto } from '../middleware/upload'; const router = Router(); router.get('/', async (_req, res) => { const items = await GalleryItem.find().sort({ order: 1, createdAt: 1 }); res.json(items); }); router.post('/', requireAuth, uploadPhoto.single('image'), async (req, res) => { const schema = z.object({ alt: z.string().min(1), order: z.coerce.number().optional() }); const data = schema.parse(req.body); const imageUrl = req.file ? `/uploads/photos/${req.file.filename}` : z.string().min(1).parse(req.body.imageUrl); const item = await GalleryItem.create({ ...data, imageUrl }); res.status(201).json(item); }); router.put('/:id', requireAuth, async (req, res) => { const schema = z.object({ alt: z.string().optional(), order: z.coerce.number().optional() }); const data = schema.parse(req.body); const item = await GalleryItem.findByIdAndUpdate(req.params.id, data, { new: true }); if (!item) { res.status(404).json({ error: 'Not found' }); return; } res.json(item); }); router.delete('/:id', requireAuth, async (req, res) => { await GalleryItem.findByIdAndDelete(req.params.id); res.status(204).send(); }); export default router;