LuisLopez-developer / Todo-App

1 stars 2 forks source link

Implementar la eliminación lógica de tareas y categorías mediante la administración de estados #40

Open LuisLopez-developer opened 1 month ago

LuisLopez-developer commented 1 month ago

Objetivo

Implementar un sistema de eliminación lógica de tareas y categorías mediante un cambio de estado en lugar de eliminarlas directamente de la base de datos. Este enfoque garantizará la integridad de los datos y mantendrá las relaciones entre las tareas y las categorías. Cuando una categoría se marca como eliminada, todas las tareas asociadas con ella también deben marcarse como eliminadas. El sistema también debe tener en cuenta el filtrado de las tareas y categorías no activas al mostrarlas al usuario.

Requisitos

  1. Modificar el proceso de eliminación de tareas y categorías:

    • Reemplazar la eliminación directa de TaskEntity y CategoryEntity con un cambio de estado que marque el elemento como "Eliminado" estableciendo stateId en DefaultStateId.DELETED_ID.
    • Asegurarse de que todas las tareas asociadas con una categoría también se marquen como "Eliminadas" cuando una categoría se marque como tal.
  2. Actualizar la interfaz de usuario para filtrar elementos no activos:

    • Actualizar todas las consultas que obtienen tareas y categorías para que solo muestren aquellas que están en el estado "Activo" (stateId = DefaultStateId.ACTIVE_ID).
    • Implementar mecanismos de filtrado adicionales que permitan a los usuarios ver opcionalmente las tareas/categorías eliminadas o no activas.
  3. Gestionar el cambio de estado en cascada para las tareas cuando se elimina la categoría:

    • Cuando el estado de una categoría se establezca en "Eliminado", actualizar automáticamente todas las tareas asociadas con esa categoría para que también cambien su estado a "Eliminado".
    • Esto debe hacerse en una operación por lotes para mantener el rendimiento de la base de datos.
  4. Ajustes de la base de datos y del modelo:

    • Asegurarse de que las relaciones de clave externa entre las tareas, las categorías y sus estados permanezcan intactas, pero permitir cambios de estado sin aplicar eliminaciones duras (ForeignKey.CASCADE ya no activará la eliminación física).
    • Actualizar las clases TaskEntity y CategoryEntity para utilizar el stateId a fin de determinar si un elemento está eliminado o activo.
  5. Agregar métodos de servicio para la eliminación y recuperación lógicas:

    • Marcar tareas y categorías como "Eliminadas" actualizando el stateId.
    • Recuperar tareas y categorías configurando su stateId nuevamente en DefaultStateId.ACTIVE_ID.
  6. Pruebas:

    • Escribir pruebas unitarias para verificar:
      • Que las tareas y categorías cambien de estado correctamente cuando se "eliminan".
      • Que los cambios de estado en cascada funcionen correctamente para las tareas cuando se elimina la categoría asociada.
      • Que el filtrado de la interfaz de usuario garantice que solo se muestren los elementos "Activos" de forma predeterminada.
LuisLopez-developer commented 1 month ago

Criterios de Aceptación

@AmbrosioFabian @Jhan-Pierre