fix: Implementa reordenação atômica de tasks ao deletar
Descrição
Este MR refatora o método delete_task no task_service.py para garantir que a exclusão de uma tarefa seja acompanhada da reordenação das sequences das tarefas seguintes através de uma operação atômica.
Para garantir a integridade dos dados, essa lógica foi implementada de forma atômica usando um WriteBatch do Firestore.
Implementação
-
- Um novo
batch = self.db.batch()é criado.
- Um novo
-
- O documento a ser deletado é lido para obter sua
sequence.
- O documento a ser deletado é lido para obter sua
-
- A operação de
deleteé adicionada ao lote (batch.delete(...)).
- A operação de
-
- Uma query busca todas as tarefas com
sequencemaior que a da tarefa deletada.
- Uma query busca todas as tarefas com
-
- Um loop
foradiciona todas as operações deupdate(sequence - 1) ao mesmo lote (batch.update(...)).
- Um loop
-
-
batch.commit()é chamado, executando todas as operações (odeletee todos osupdates) de uma só vez.
-
-
- Se qualquer passo falhar, o
commité revertido e o banco de dados permanece no estado original, garantindo 100% de consistência.
- Se qualquer passo falhar, o
Como testar
-
- Crie um evento com múltiplas tarefas (ex: 5 tarefas, com
sequencede 1 a 5).
- Crie um evento com múltiplas tarefas (ex: 5 tarefas, com
-
- Pelo frontend (ou API), delete uma tarefa do meio (ex: a tarefa de
sequence: 3).
- Pelo frontend (ou API), delete uma tarefa do meio (ex: a tarefa de
-
- Verifique se:
- A tarefa foi corretamente removida.
- As
sequencesdas tarefas seguintes foram atualizadas (ex: a antiga tarefa 4 agora é 3, e a antiga 5 agora é 4). - A sequência está correta e sem números faltando.