Task Control é uma aplicação de console para gerenciamento de tarefas utilizando um sistema de cards e colunas, permitindo a criação de diferentes boards para organização eficiente do trabalho.
- Criar, selecionar e excluir boards.
- Criar cards com título e descrição.
- Mover cards entre colunas conforme a ordem definida no board.
- Bloquear e desbloquear cards com justificativa.
- Cancelar um card a partir de qualquer coluna (exceto a final).
- Gerar relatórios de tempo gasto por card em cada coluna.
- Gerar relatórios de bloqueios de cards (motivo e tempo bloqueado).
O diagrama abaixo representa a estrutura do banco de dados do Task Control:
erDiagram
CARDS ||--o{ CARD_MOVEMENTS : "movimenta"
CARDS ||--o{ BLOCKS : "bloqueia"
CARDS }|--|| BOARDS_COLUMNS : "pertence a"
BOARDS_COLUMNS }|--|| BOARDS : "pertence a"
CARDS {
int id PK
string title
string description
int board_column_id FK
}
CARD_MOVEMENTS {
int id PK
int card_id FK
int from_column_id FK
int to_column_id FK
timestamp moved_at
}
BOARDS_COLUMNS {
int id PK
string name
int column_order
string type
int board_id FK
}
BOARDS {
int id PK
string name
}
BLOCKS {
int id PK
timestamp blocked_at
string block_reason
timestamp unblocked_at
string unblock_reason
int card_id FK
}
- O sistema inicia com um menu principal com as opções:
- Criar novo board
- Selecionar board
- Excluir board
- Sair
- Os boards e suas informações são armazenados no banco de dados MySQL.
- Cada board deve ter um nome e pelo menos 3 colunas:
- Inicial (para novos cards)
- Final (para tarefas concluídas)
- Cancelamento (para cards cancelados)
- As colunas têm um nome, uma ordem no board e um tipo:
- Inicial (somente 1 por board)
- Final (somente 1 por board, penúltima coluna)
- Cancelamento (somente 1 por board, última coluna)
- Pendente (quantas forem necessárias, para organização intermediária)
- Os cards devem seguir a ordem das colunas do board, sem pular etapas.
- A coluna de cancelamento pode receber cards de qualquer coluna, exceto a final.
- Cards bloqueados não podem ser movidos até serem desbloqueados.
- Para bloquear um card, é necessário informar um motivo.
- Para desbloquear um card, também é necessário informar um motivo.
No board selecionado, o menu deve permitir:
- Mover um card para a próxima coluna.
- Cancelar um card.
- Criar um novo card.
- Bloquear e desbloquear um card.
- Fechar board.
Gera um relatório com:
- Tempo total para concluir a tarefa.
- Tempo que cada card ficou em cada coluna.
Mostra:
- Tempo total de bloqueio por card.
- Motivos dos bloqueios e desbloqueios.
- Java
- MySQL para persistência dos dados
- Liquibase para conexão com o banco de dados
- Lombok para redução de boilerplate
- Mermaid para diagrama entidade-relacionamento