52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
import { Router } from "express";
|
|
import { GiftService } from "../../modules/gifts/service";
|
|
import { validateBody } from "../../core/middleware/validate";
|
|
import { createGiftSchema, createContributionSchema } from "../../modules/gifts/types";
|
|
import { requireAuth } from "../../core/middleware/auth";
|
|
|
|
const service = new GiftService();
|
|
|
|
export function registerGiftRoutes(router: Router) {
|
|
const r = Router();
|
|
|
|
// Protected routes
|
|
r.use(requireAuth);
|
|
|
|
r.post("/gift", validateBody(createGiftSchema), async (req, res) => {
|
|
const ownerId = (req as any).user?.id;
|
|
const gift = await service.createGift({ ...req.body, ownerId });
|
|
res.json(gift);
|
|
});
|
|
|
|
r.get("/gift", async (_req, res) => {
|
|
const gifts = await service.listGifts();
|
|
res.json(gifts);
|
|
});
|
|
|
|
r.get("/gift/:id", async (req, res) => {
|
|
const requesterId = (req as any).user?.id;
|
|
const gift = await service.getGiftById(req.params.id, requesterId);
|
|
if (!gift) {
|
|
return res.status(404).json({ error: "Gift not found" });
|
|
}
|
|
res.json(gift);
|
|
});
|
|
|
|
r.post(
|
|
"/gift/contribution",
|
|
validateBody(createContributionSchema),
|
|
async (req, res) => {
|
|
const contribution = await service.createContribution(req.body);
|
|
res.json(contribution);
|
|
},
|
|
);
|
|
|
|
r.get("/gift/:id/contributions", async (req, res) => {
|
|
const requesterId = (req as any).user?.id;
|
|
const contributions = await service.listContributions(req.params.id, requesterId);
|
|
res.json(contributions);
|
|
});
|
|
|
|
router.use(r);
|
|
}
|