deafmissoula-website/server/dist/routes/gallery.js

37 lines
No EOL
1.6 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const express_1 = require("express");
const zod_1 = require("zod");
const GalleryItem_1 = require("../models/GalleryItem");
const auth_1 = require("../middleware/auth");
const upload_1 = require("../middleware/upload");
const router = (0, express_1.Router)();
router.get('/', async (_req, res) => {
const items = await GalleryItem_1.GalleryItem.find().sort({ order: 1, createdAt: 1 });
res.json(items);
});
router.post('/', auth_1.requireAuth, upload_1.uploadPhoto.single('image'), async (req, res) => {
const schema = zod_1.z.object({ alt: zod_1.z.string().min(1), order: zod_1.z.coerce.number().optional() });
const data = schema.parse(req.body);
const imageUrl = req.file
? `/uploads/photos/${req.file.filename}`
: zod_1.z.string().min(1).parse(req.body.imageUrl);
const item = await GalleryItem_1.GalleryItem.create({ ...data, imageUrl });
res.status(201).json(item);
});
router.put('/:id', auth_1.requireAuth, async (req, res) => {
const schema = zod_1.z.object({ alt: zod_1.z.string().optional(), order: zod_1.z.coerce.number().optional() });
const data = schema.parse(req.body);
const item = await GalleryItem_1.GalleryItem.findByIdAndUpdate(req.params.id, data, { new: true });
if (!item) {
res.status(404).json({ error: 'Not found' });
return;
}
res.json(item);
});
router.delete('/:id', auth_1.requireAuth, async (req, res) => {
await GalleryItem_1.GalleryItem.findByIdAndDelete(req.params.id);
res.status(204).send();
});
exports.default = router;
//# sourceMappingURL=gallery.js.map