Implementado actualización de nombres y endpoints
This commit is contained in:
@@ -99,4 +99,19 @@ export class MonitorController {
|
||||
next(err);
|
||||
}
|
||||
}
|
||||
|
||||
updateProject = async (req: Request, res: Response, next: NextFunction) => {
|
||||
try {
|
||||
const projectId = Number(req.params['id']);
|
||||
if (!Number.isInteger(projectId) || projectId <= 0) {
|
||||
throw new AppError('Id de proyecto invalido', 400);
|
||||
}
|
||||
|
||||
const { nombre, url_health } = req.body;
|
||||
await this.usecases.updateProject(projectId, nombre, url_health);
|
||||
res.redirect('/');
|
||||
} catch (err) {
|
||||
next(err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,8 +39,7 @@ export class MonitorUsecases {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async createNewProject(nombre: string, urlHealth: string): Promise<void> {
|
||||
private validateProjectInput(nombre: string, urlHealth: string): { nombre: string; urlHealth: string } {
|
||||
const trimmedNombre = typeof nombre === 'string' ? nombre.trim() : '';
|
||||
const trimmedUrl = typeof urlHealth === 'string' ? urlHealth.trim() : '';
|
||||
|
||||
@@ -62,7 +61,23 @@ export class MonitorUsecases {
|
||||
throw new AppError('La URL de health check no es valida', 400);
|
||||
}
|
||||
|
||||
await this.repository.addProject(trimmedNombre, trimmedUrl);
|
||||
return { nombre: trimmedNombre, urlHealth: trimmedUrl };
|
||||
}
|
||||
|
||||
async createNewProject(nombre: string, urlHealth: string): Promise<void> {
|
||||
const validated = this.validateProjectInput(nombre, urlHealth);
|
||||
await this.repository.addProject(validated.nombre, validated.urlHealth);
|
||||
}
|
||||
|
||||
async updateProject(projectId: number, nombre: string, urlHealth: string): Promise<void> {
|
||||
const project = await this.repository.getProjectById(projectId);
|
||||
|
||||
if (!project || project.estado_monitoreo === 'ELIMINADO') {
|
||||
throw new AppError('Proyecto no encontrado', 404);
|
||||
}
|
||||
|
||||
const validated = this.validateProjectInput(nombre, urlHealth);
|
||||
await this.repository.updateProject(projectId, validated.nombre, validated.urlHealth);
|
||||
}
|
||||
|
||||
async checkProjectHealth(projectId: number): Promise<void> {
|
||||
|
||||
@@ -4,9 +4,9 @@ import dotenv from 'dotenv';
|
||||
dotenv.config();
|
||||
|
||||
export const pool = new pg.Pool({
|
||||
host: process.env.POSTGRES_HOST,
|
||||
port: Number(process.env.POSTGRES_PORT),
|
||||
user: process.env.POSTGRES_USER,
|
||||
password: process.env.POSTGRES_PASSWORD,
|
||||
database: process.env.POSTGRES_DB
|
||||
host: process.env.POSTGRES_HOST ?? process.env.DB_HOST,
|
||||
port: Number(process.env.POSTGRES_PORT ?? process.env.DB_PORT),
|
||||
user: process.env.POSTGRES_USER ?? process.env.DB_USER,
|
||||
password: process.env.POSTGRES_PASSWORD ?? process.env.DB_PASSWORD,
|
||||
database: process.env.POSTGRES_DB ?? process.env.DB_NAME
|
||||
});
|
||||
|
||||
@@ -15,6 +15,7 @@ export function createRouter(usecases: MonitorUsecases, scheduler: MonitorSchedu
|
||||
router.post('/monitor-interval', controller.updateMonitorInterval);
|
||||
router.post('/proyectos/:id/toggle-status', controller.toggleProjectStatus);
|
||||
router.post('/proyectos/:id/eliminar', controller.deleteProject);
|
||||
router.post('/proyectos/:id/editar', controller.updateProject);
|
||||
|
||||
|
||||
return router;
|
||||
|
||||
@@ -96,4 +96,17 @@ export class MonitorRepository {
|
||||
})
|
||||
}
|
||||
}
|
||||
async updateProject(id: number, nombre: string, urlHealth: string): Promise<void> {
|
||||
try {
|
||||
await this.db.query(
|
||||
'UPDATE proyectos SET nombre = $1, url_health = $2 WHERE id = $3;',
|
||||
[nombre.trim(), urlHealth.trim(), id]
|
||||
);
|
||||
} catch (err) {
|
||||
throw new RepositoryError('Error al actualizar el proyecto', {
|
||||
id,
|
||||
cause: err instanceof Error ? err.message : String(err)
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,11 +115,13 @@
|
||||
<tbody>
|
||||
<% proyectos.forEach(function(p) { %>
|
||||
<tr class="status-<%= p.estado_monitoreo %>">
|
||||
<td><%= p.nombre %></td>
|
||||
<td>
|
||||
<a href="<%= p.url_health %>" target="_blank">
|
||||
<%= p.url_health %>
|
||||
</a>
|
||||
<form id="edit-<%= p.id %>" action="/proyectos/<%= p.id %>/editar" method="POST">
|
||||
<input type="text" name="nombre" value="<%= p.nombre %>" required maxlength="100">
|
||||
</form>
|
||||
</td>
|
||||
<td>
|
||||
<input form="edit-<%= p.id %>" type="url" name="url_health" value="<%= p.url_health %>" required>
|
||||
</td>
|
||||
<td class="<%= p.estado_monitoreo === 'PAUSADO' ? 'PAUSADO' : (p.estado_codigo || 'PENDIENTE') %>">
|
||||
<%= p.estado_monitoreo === 'PAUSADO' ? 'PAUSADO' : (p.estado_codigo || 'PENDIENTE') %>
|
||||
@@ -130,6 +132,7 @@
|
||||
<td class="actions">
|
||||
<!-- Botón refrescar -->
|
||||
<button class="btn btn-refresh btn-mini" onclick="runCheck('/check/<%= p.id %>', this)" title="Refrescar">↻</button>
|
||||
<button form="edit-<%= p.id %>" class="btn btn-mini" type="submit" title="Guardar">Guardar</button>
|
||||
|
||||
<!-- Botón pausar -->
|
||||
<button class="btn btn-pause btn-mini" onclick="runAction('/proyectos/<%= p.id%>/toggle-status', this)">
|
||||
|
||||
Reference in New Issue
Block a user