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

45 lines
No EOL
1.9 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const express_1 = require("express");
const zod_1 = require("zod");
const Sponsor_1 = require("../models/Sponsor");
const auth_1 = require("../middleware/auth");
const upload_1 = require("../middleware/upload");
const router = (0, express_1.Router)();
const sponsorSchema = zod_1.z.object({
name: zod_1.z.string().min(1),
description: zod_1.z.string().min(1),
websiteUrl: zod_1.z.string().url().optional().or(zod_1.z.literal('')),
facebookUrl: zod_1.z.string().url().optional().or(zod_1.z.literal('')),
instagramUrl: zod_1.z.string().url().optional().or(zod_1.z.literal('')),
order: zod_1.z.coerce.number().optional(),
logoPath: zod_1.z.string().optional(),
});
router.get('/', async (_req, res) => {
const sponsors = await Sponsor_1.Sponsor.find().sort({ order: 1, createdAt: 1 });
res.json(sponsors);
});
router.post('/', auth_1.requireAuth, upload_1.uploadLogo.single('logo'), async (req, res) => {
const data = sponsorSchema.parse(req.body);
const logoPath = req.file ? `/uploads/sponsors/${req.file.filename}` : (data.logoPath ?? '');
const sponsor = await Sponsor_1.Sponsor.create({ ...data, logoPath });
res.status(201).json(sponsor);
});
router.put('/:id', auth_1.requireAuth, upload_1.uploadLogo.single('logo'), async (req, res) => {
const data = sponsorSchema.partial().parse(req.body);
const update = { ...data };
if (req.file)
update.logoPath = `/uploads/sponsors/${req.file.filename}`;
const sponsor = await Sponsor_1.Sponsor.findByIdAndUpdate(req.params.id, update, { new: true });
if (!sponsor) {
res.status(404).json({ error: 'Not found' });
return;
}
res.json(sponsor);
});
router.delete('/:id', auth_1.requireAuth, async (req, res) => {
await Sponsor_1.Sponsor.findByIdAndDelete(req.params.id);
res.status(204).send();
});
exports.default = router;
//# sourceMappingURL=sponsors.js.map