105 lines
3.1 KiB
JavaScript
105 lines
3.1 KiB
JavaScript
const express = require("express")
|
|
const router = express.Router()
|
|
|
|
const requireAuth = require("../middleware/requireAuth")
|
|
const requireRole = require("../middleware/requireRole")
|
|
const { validate } = require("../middleware/validate.middleware")
|
|
const { endpoints } = require("@shared/contracts")
|
|
const { getPendingDeals, approveDeal, rejectDeal, expireDeal, unexpireDeal } = require("../services/mod.service")
|
|
const { mapPaginatedDealsToDealCardResponse } = require("../adapters/responses/dealCard.adapter")
|
|
|
|
const { deals } = endpoints
|
|
|
|
const listQueryValidator = validate(deals.dealsListRequestSchema, "query", "validatedDealListQuery")
|
|
|
|
const buildViewer = (req) =>
|
|
req.auth ? { userId: req.auth.userId, role: req.auth.role } : null
|
|
|
|
router.get("/deals/pending", requireAuth, requireRole("MOD"), listQueryValidator, async (req, res) => {
|
|
try {
|
|
const { q, page, limit } = req.validatedDealListQuery
|
|
const payload = await getPendingDeals({
|
|
page,
|
|
limit,
|
|
filters: { ...req.query, q },
|
|
viewer: buildViewer(req),
|
|
})
|
|
|
|
const response = mapPaginatedDealsToDealCardResponse(payload)
|
|
res.json(response.results)
|
|
} catch (err) {
|
|
const status = err.statusCode || 500
|
|
res.status(status).json({ error: err.message || "Sunucu hatasi" })
|
|
}
|
|
})
|
|
|
|
router.post(
|
|
"/deals/:id/approve",
|
|
requireAuth,
|
|
requireRole("MOD"),
|
|
validate(deals.dealDetailRequestSchema, "params", "validatedDealId"),
|
|
async (req, res) => {
|
|
try {
|
|
const { id } = req.validatedDealId
|
|
const updated = await approveDeal(id)
|
|
res.json({ id: updated.id, status: updated.status })
|
|
} catch (err) {
|
|
const status = err.statusCode || 500
|
|
res.status(status).json({ error: err.message || "Sunucu hatasi" })
|
|
}
|
|
}
|
|
)
|
|
|
|
router.post(
|
|
"/deals/:id/reject",
|
|
requireAuth,
|
|
requireRole("MOD"),
|
|
validate(deals.dealDetailRequestSchema, "params", "validatedDealId"),
|
|
async (req, res) => {
|
|
try {
|
|
const { id } = req.validatedDealId
|
|
const updated = await rejectDeal(id)
|
|
res.json({ id: updated.id, status: updated.status })
|
|
} catch (err) {
|
|
const status = err.statusCode || 500
|
|
res.status(status).json({ error: err.message || "Sunucu hatasi" })
|
|
}
|
|
}
|
|
)
|
|
|
|
router.post(
|
|
"/deals/:id/expire",
|
|
requireAuth,
|
|
requireRole("MOD"),
|
|
validate(deals.dealDetailRequestSchema, "params", "validatedDealId"),
|
|
async (req, res) => {
|
|
try {
|
|
const { id } = req.validatedDealId
|
|
const updated = await expireDeal(id)
|
|
res.json({ id: updated.id, status: updated.status })
|
|
} catch (err) {
|
|
const status = err.statusCode || 500
|
|
res.status(status).json({ error: err.message || "Sunucu hatasi" })
|
|
}
|
|
}
|
|
)
|
|
|
|
router.post(
|
|
"/deals/:id/unexpire",
|
|
requireAuth,
|
|
requireRole("MOD"),
|
|
validate(deals.dealDetailRequestSchema, "params", "validatedDealId"),
|
|
async (req, res) => {
|
|
try {
|
|
const { id } = req.validatedDealId
|
|
const updated = await unexpireDeal(id)
|
|
res.json({ id: updated.id, status: updated.status })
|
|
} catch (err) {
|
|
const status = err.statusCode || 500
|
|
res.status(status).json({ error: err.message || "Sunucu hatasi" })
|
|
}
|
|
}
|
|
)
|
|
|
|
module.exports = router
|