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
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.
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.
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.
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.
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.
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.
[x] Las tareas y categorías deben ser eliminadas lógicamente actualizando el campo \stateId\ a \DefaultStateId.DELETED_ID\ en lugar de ser eliminadas físicamente de la base de datos.
[x] Los cambios de estado en cascada deben ocurrir para las tareas cuando una categoría es eliminada.
[x] Solo las tareas y categorías activas deben mostrarse por defecto.
[x] Las tareas y categorías deben poder restaurarse cambiando el \stateId\ de nuevo a \DefaultStateId.ACTIVE_ID.
[ ] Se deben proporcionar pruebas unitarias para asegurar el comportamiento correcto de los cambios de estado y el filtrado en la interfaz de usuario.
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
Modificar el proceso de eliminación de tareas y categorías:
TaskEntity
yCategoryEntity
con un cambio de estado que marque el elemento como "Eliminado" estableciendostateId
enDefaultStateId.DELETED_ID
.Actualizar la interfaz de usuario para filtrar elementos no activos:
stateId = DefaultStateId.ACTIVE_ID
).Gestionar el cambio de estado en cascada para las tareas cuando se elimina la categoría:
Ajustes de la base de datos y del modelo:
ForeignKey.CASCADE
ya no activará la eliminación física).TaskEntity
yCategoryEntity
para utilizar elstateId
a fin de determinar si un elemento está eliminado o activo.Agregar métodos de servicio para la eliminación y recuperación lógicas:
stateId
.stateId
nuevamente enDefaultStateId.ACTIVE_ID
.Pruebas: