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