97 lines
3.8 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.representativesRouter = void 0;
const express_1 = require("express");
const representatives_service_1 = require("./representatives.service");
const representatives_schemas_1 = require("./representatives.schemas");
const postal_codes_schemas_1 = require("../postal-codes/postal-codes.schemas");
const validate_1 = require("../../../middleware/validate");
const auth_middleware_1 = require("../../../middleware/auth.middleware");
const rbac_middleware_1 = require("../../../middleware/rbac.middleware");
const roles_1 = require("../../../utils/roles");
const router = (0, express_1.Router)();
exports.representativesRouter = router;
// =============================================
// PUBLIC ROUTES (no auth required)
// =============================================
// GET /api/representatives/by-postal/:postalCode — cache-first lookup
router.get('/by-postal/:postalCode', (0, validate_1.validate)(postal_codes_schemas_1.postalCodeParamSchema, 'params'), (0, validate_1.validate)(postal_codes_schemas_1.postalCodeQuerySchema, 'query'), async (req, res, next) => {
try {
const code = req.params.postalCode;
const refresh = req.query.refresh === 'true';
const result = await representatives_service_1.representativesService.lookupByPostalCode(code, refresh);
res.json(result);
}
catch (err) {
next(err);
}
});
// GET /api/representatives/test-connection — Represent API health check
router.get('/test-connection', async (_req, res, next) => {
try {
const result = await representatives_service_1.representativesService.testApiConnection();
res.json(result);
}
catch (err) {
next(err);
}
});
// =============================================
// ADMIN ROUTES (auth + role required)
// =============================================
router.use(auth_middleware_1.authenticate);
router.use((0, rbac_middleware_1.requireRole)(...roles_1.INFLUENCE_ROLES));
// GET /api/representatives/cache-stats — cache statistics
router.get('/cache-stats', async (_req, res, next) => {
try {
const stats = await representatives_service_1.representativesService.getCacheStats();
res.json(stats);
}
catch (err) {
next(err);
}
});
// GET /api/representatives — list all cached reps (paginated)
router.get('/', (0, validate_1.validate)(representatives_schemas_1.listRepresentativesSchema, 'query'), async (req, res, next) => {
try {
const result = await representatives_service_1.representativesService.findAll(req.query);
res.json(result);
}
catch (err) {
next(err);
}
});
// GET /api/representatives/:id — single cached rep
router.get('/:id', async (req, res, next) => {
try {
const id = req.params.id;
const rep = await representatives_service_1.representativesService.findById(id);
res.json(rep);
}
catch (err) {
next(err);
}
});
// DELETE /api/representatives/by-postal/:postalCode — clear cache for postal code
router.delete('/by-postal/:postalCode', (0, validate_1.validate)(postal_codes_schemas_1.postalCodeParamSchema, 'params'), async (req, res, next) => {
try {
const code = req.params.postalCode;
const result = await representatives_service_1.representativesService.clearByPostalCode(code);
res.json(result);
}
catch (err) {
next(err);
}
});
// DELETE /api/representatives/:id — delete single cached rep
router.delete('/:id', async (req, res, next) => {
try {
const id = req.params.id;
await representatives_service_1.representativesService.deleteById(id);
res.status(204).send();
}
catch (err) {
next(err);
}
});
//# sourceMappingURL=representatives.routes.js.map