fix: Actualizar app sin crear duplicados usando update_app

Reemplaza el flujo soft_delete + add_app_full por un nuevo método
update_app() que modifica in-place la app existente, preservando
su id original y fecha de registro.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-21 09:05:17 -05:00
parent aa41c7dd75
commit 400f677666

View File

@@ -5,6 +5,7 @@ use axum::{
};
use std::sync::Arc;
use sysinfo::System;
use uuid::Uuid;
use crate::orchestrator::{AppManager, LifecycleManager};
use crate::models::{ServiceConfig, RestartPolicy, AppType};
use super::dto::*;
@@ -158,11 +159,9 @@ pub async fn update_app_handler(
.cloned()
.unwrap_or_else(|| "production".to_string());
// Primero intentar hacer soft delete de la app anterior
let _ = config_manager.soft_delete_app(&app_name, Some("Actualizada - versión anterior".to_string()));
// Luego agregar la nueva configuración
let monitored_app = crate::config::MonitoredApp {
// Actualizar la app existente (sin crear duplicados)
let updated_app = crate::config::MonitoredApp {
id: String::new(), // Se preservará el ID original
name: config.app_name.clone(),
service_name: service_name.clone(),
path: config.working_directory.clone(),
@@ -172,7 +171,7 @@ pub async fn update_app_handler(
mode,
user: config.user.clone(),
service_file_path,
registered_at: chrono::Local::now().to_rfc3339(),
registered_at: String::new(), // Se preservará la fecha original
deleted: false,
deleted_at: None,
deleted_reason: None,
@@ -181,7 +180,7 @@ pub async fn update_app_handler(
created_at: None,
};
match config_manager.add_app_full(monitored_app) {
match config_manager.update_app(&app_name, updated_app) {
Ok(_) => {
logger.info("API", "✅ JSON actualizado");
}