Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 19 additions & 2 deletions src/app/api/eventos/[id]/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -150,10 +150,19 @@ export async function PUT(
valores.push(id);

const result = await db.query(sql, valores);
const eventoActualizado = result.rows[0];

// Auditoría
try {
const { AuditoriaDAO } = require("@/dao/auditoria.dao");
const desc = data.activo === false ? `Evento desactivado: ${eventoActualizado.nombre}` : `Evento actualizado: ${eventoActualizado.nombre}`;
await AuditoriaDAO.registrar('eventos', id, data.activo === false ? 'eliminacion' : 'edicion', desc);
} catch (e) { console.error("Error auditando evento", e); }

return NextResponse.json({
success: true,
message: "Evento actualizado exitosamente",
data: result.rows[0],
data: eventoActualizado,
});
} catch (error: any) {
const msg = error?.message || "";
Expand Down Expand Up @@ -210,10 +219,18 @@ export async function DELETE(
[id]
);

const eventoEliminado = result.rows[0];

// Auditoría
try {
const { AuditoriaDAO } = require("@/dao/auditoria.dao");
await AuditoriaDAO.registrar('eventos', id, 'eliminacion', `Evento eliminado (Inactivo): ${eventoEliminado.nombre}`);
} catch (e) { console.error("Error auditando evento", e); }

return NextResponse.json({
success: true,
message: "Evento eliminado exitosamente",
data: result.rows[0],
data: eventoEliminado,
});
} catch (error) {
console.error("Error al eliminar evento:", error);
Expand Down
6 changes: 6 additions & 0 deletions src/app/api/eventos/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,12 @@ export async function POST(request: NextRequest) {
const result = await db.query(insertSQL, values);
const evento: EventoResponse = result.rows[0];

// Auditoría
try {
const { AuditoriaDAO } = require("@/dao/auditoria.dao");
await AuditoriaDAO.registrar('eventos', evento.id, 'creacion', `Evento creado: ${evento.nombre}`);
} catch (e) { console.error("Error auditando evento", e); }

return NextResponse.json(
{ success: true, message: "Evento creado exitosamente", data: evento },
{ status: 201 }
Expand Down
57 changes: 57 additions & 0 deletions src/app/api/historial/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import { NextRequest, NextResponse } from 'next/server';
import { HistorialService } from '@/services/historial.service';
import { ConsultaHistorialRequest, TipoRegistroHistorial } from '@/dto/historial.dto';
import { validateConsultaHistorialInput } from '@/validators/historial.validator';

const historialService = new HistorialService();

export async function GET(req: NextRequest) {
try {
const { searchParams } = new URL(req.url);
const personaIdParam = searchParams.get('personaId');
const tipoPersonaParam = searchParams.get('tipoPersona');
const fechaDesde = searchParams.get('fechaDesde');
const fechaHasta = searchParams.get('fechaHasta');
const tipoRegistro = searchParams.get('tipoRegistro') as TipoRegistroHistorial | 'todos' | null;

const validation = validateConsultaHistorialInput({
personaId: personaIdParam,
tipoPersona: tipoPersonaParam,
fechaDesde,
fechaHasta,
tipoRegistro
});

if (!validation.ok) {
return NextResponse.json(
{ error: 'Errores de validación', issues: validation.issues },
{ status: 400 }
);
}

const personaId = parseInt(personaIdParam as string, 10);

const request: ConsultaHistorialRequest = {
personaId,
tipoPersona: tipoPersonaParam as 'usuario' | 'asociado' | 'congregado',
filtros: {
...(fechaDesde && { fechaDesde }),
...(fechaHasta && { fechaHasta }),
...(tipoRegistro && { tipoRegistro }),
}
};

const response = await historialService.obtenerHistorial(request);

return NextResponse.json(response, { status: 200 });
} catch (error: any) {
console.error('Error GET /api/historial:', error);
if (error.message.includes('Persona no encontrada')) {
return NextResponse.json({ error: error.message }, { status: 404 });
}
return NextResponse.json(
{ error: 'Error interno del servidor al obtener historial' },
{ status: 500 }
);
}
}
14 changes: 14 additions & 0 deletions src/app/api/historial/sistema/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { NextResponse } from 'next/server';
import { HistorialDAO } from '@/dao/historial.dao';

const historialDAO = new HistorialDAO();

export async function GET() {
try {
const hits = await historialDAO.obtenerHitosGlobales();
return NextResponse.json({ historial: hits }, { status: 200 });
} catch (error: any) {
console.error('Error GET /api/historial/sistema:', error);
return NextResponse.json({ error: 'Error al obtener hitos del sistema' }, { status: 500 });
}
}
Loading