"use strict"; /** * Fraccionamiento Controller * API endpoints para gestión de fraccionamientos/obras * * @module Construction * @prefix /api/v1/fraccionamientos */ Object.defineProperty(exports, "__esModule", { value: true }); const express_1 = require("express"); const fraccionamiento_service_1 = require("../services/fraccionamiento.service"); const router = (0, express_1.Router)(); const fraccionamientoService = new fraccionamiento_service_1.FraccionamientoService(); /** * GET /api/v1/fraccionamientos * Lista todos los fraccionamientos del tenant */ router.get('/', async (req, res, next) => { try { const tenantId = req.headers['x-tenant-id']; if (!tenantId) { return res.status(400).json({ error: 'X-Tenant-Id header required' }); } const { proyectoId, estado } = req.query; const fraccionamientos = await fraccionamientoService.findAll({ tenantId, proyectoId: proyectoId, estado: estado, }); return res.json({ success: true, data: fraccionamientos, count: fraccionamientos.length, }); } catch (error) { return next(error); } }); /** * GET /api/v1/fraccionamientos/:id * Obtiene un fraccionamiento por ID */ router.get('/:id', async (req, res, next) => { try { const tenantId = req.headers['x-tenant-id']; if (!tenantId) { return res.status(400).json({ error: 'X-Tenant-Id header required' }); } const fraccionamiento = await fraccionamientoService.findById(req.params.id, tenantId); if (!fraccionamiento) { return res.status(404).json({ error: 'Fraccionamiento no encontrado' }); } return res.json({ success: true, data: fraccionamiento }); } catch (error) { return next(error); } }); /** * POST /api/v1/fraccionamientos * Crea un nuevo fraccionamiento */ router.post('/', async (req, res, next) => { try { const tenantId = req.headers['x-tenant-id']; if (!tenantId) { return res.status(400).json({ error: 'X-Tenant-Id header required' }); } const data = { ...req.body, tenantId, createdById: req.user?.id, }; // Validate required fields if (!data.codigo || !data.nombre || !data.proyectoId) { return res.status(400).json({ error: 'codigo, nombre y proyectoId son requeridos' }); } // Check if codigo already exists const existing = await fraccionamientoService.findByCodigo(data.codigo, tenantId); if (existing) { return res.status(409).json({ error: 'Ya existe un fraccionamiento con ese código' }); } const fraccionamiento = await fraccionamientoService.create(data); return res.status(201).json({ success: true, data: fraccionamiento }); } catch (error) { return next(error); } }); /** * PATCH /api/v1/fraccionamientos/:id * Actualiza un fraccionamiento */ router.patch('/:id', async (req, res, next) => { try { const tenantId = req.headers['x-tenant-id']; if (!tenantId) { return res.status(400).json({ error: 'X-Tenant-Id header required' }); } const data = req.body; const fraccionamiento = await fraccionamientoService.update(req.params.id, tenantId, data); if (!fraccionamiento) { return res.status(404).json({ error: 'Fraccionamiento no encontrado' }); } return res.json({ success: true, data: fraccionamiento }); } catch (error) { return next(error); } }); /** * DELETE /api/v1/fraccionamientos/:id * Elimina un fraccionamiento */ router.delete('/:id', async (req, res, next) => { try { const tenantId = req.headers['x-tenant-id']; if (!tenantId) { return res.status(400).json({ error: 'X-Tenant-Id header required' }); } const deleted = await fraccionamientoService.delete(req.params.id, tenantId); if (!deleted) { return res.status(404).json({ error: 'Fraccionamiento no encontrado' }); } return res.json({ success: true, message: 'Fraccionamiento eliminado' }); } catch (error) { return next(error); } }); exports.default = router; //# sourceMappingURL=fraccionamiento.controller.js.map