97 lines
3.8 KiB
JavaScript
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
|