Sistema de gerenciamento de tarefas desenvolvido em .NET 8 com arquitetura DDD (Domain-Driven Design), permitindo aos usuários organizar e monitorar suas tarefas diárias e colaborar com colegas de equipe.
- .NET 8.0 - Framework principal
- Entity Framework Core 8.0 - ORM para acesso ao banco de dados (Code First)
- SQL Server - Banco de dados relacional
- FluentValidation - Validação de domínio
- Docker & Docker Compose - Containerização
- Swagger/OpenAPI - Documentação da API
- xUnit, Moq, FluentAssertions - Testes unitários
O projeto segue os princípios do DDD (Domain-Driven Design) com separação em camadas:
Skopia.TaskManager.API/ # Camada de apresentação (Controllers, Swagger)
Skopia.TaskManager.Application/ # Camada de aplicação (Services, DTOs)
Skopia.TaskManager.Domain/ # Camada de domínio (Entities, Validators, Interfaces)
Skopia.TaskManager.Infrastructure/ # Camada de infraestrutura (DbContext, Repositories)
Skopia.TaskManager.Tests/ # Testes unitários
- SOLID
- Clean Code
- Repository Pattern
- Unit of Work Pattern
- Dependency Injection
- Listagem de projetos por usuário
- Visualização de detalhes do projeto
- Criação de novos projetos
- Atualização de projetos
- Remoção de projetos (apenas sem tarefas pendentes)
- Listagem de tarefas por projeto
- Visualização de detalhes da tarefa
- Criação de novas tarefas
- Atualização de tarefas (título, descrição, data de vencimento)
- Atualização de status (Pendente, Em Andamento, Concluída)
- Remoção de tarefas
- Prioridades (Baixa, Média, Alta) - imutável após criação
- Histórico de alterações automático
- Limite de 20 tarefas por projeto
- Adição de comentários às tarefas
- Registro no histórico de alterações
- Relatório de desempenho (média de tarefas concluídas nos últimos 30 dias)
- Acesso restrito a usuários com perfil "Gerente"
- Prioridades de Tarefas: Cada tarefa tem uma prioridade que não pode ser alterada após criação
- Restrições de Remoção: Projetos com tarefas pendentes não podem ser removidos
- Histórico de Atualizações: Todas as alterações em tarefas são registradas automaticamente
- Limite de Tarefas: Máximo de 20 tarefas por projeto
- Relatórios de Desempenho: Apenas gerentes podem acessar relatórios
- Comentários: Registrados automaticamente no histórico
- Docker
- Docker Compose
Use os scripts facilitadores localizados na pasta raiz do projeto que automatizam todo o processo de build e execução:
Linux/Mac:
chmod +x start.sh
./start.shWindows:
start.batOu execute o arquivo start.bat diretamente pela pasta.
Estes scripts irão:
- Parar containers anteriores e limpar volumes
- Construir e iniciar os containers automaticamente
- Aguardar 15 segundos para garantir que tudo esteja pronto
- Exibir o status dos containers
- Clone o repositório:
git clone <repository-url>
cd Skopia.TaskManager.API- Execute o docker-compose:
docker-compose up --build-
A API estará disponível em:
- API: http://localhost:5000
- Swagger: http://localhost:5000/swagger
-
O SQL Server estará disponível em:
- Host: localhost
- Port: 1433
- Username: sa
- Password: YourStrong@Passw0rd
docker-compose downdocker-compose down -v
⚠️ Observação: O Swagger está habilitado em ambiente de Development para facilitar testes e desenvolvimento. As migrations do banco de dados são aplicadas automaticamente na inicialização.
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /api/projects/user/{userId} |
Lista todos os projetos de um usuário |
| GET | /api/projects/{id} |
Obtém detalhes de um projeto |
| POST | /api/projects |
Cria um novo projeto |
| PUT | /api/projects/{id} |
Atualiza um projeto |
| DELETE | /api/projects/{id} |
Remove um projeto |
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /api/tasks/project/{projectId} |
Lista todas as tarefas de um projeto |
| GET | /api/tasks/{id} |
Obtém detalhes de uma tarefa |
| POST | /api/tasks |
Cria uma nova tarefa |
| PUT | /api/tasks/{id} |
Atualiza detalhes de uma tarefa |
| PATCH | /api/tasks/{id}/status |
Atualiza o status de uma tarefa |
| DELETE | /api/tasks/{id} |
Remove uma tarefa |
| POST | /api/tasks/{taskId}/comments |
Adiciona um comentário à tarefa |
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /api/reports/performance/{userId}?requestingUserRole=Manager |
Obtém relatório de desempenho (apenas gerentes) |
curl -X POST http://localhost:5000/api/projects \
-H "Content-Type: application/json" \
-d '{
"name": "Projeto Exemplo",
"description": "Descrição do projeto",
"userId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}'curl -X POST http://localhost:5000/api/tasks \
-H "Content-Type: application/json" \
-d '{
"title": "Tarefa Exemplo",
"description": "Descrição da tarefa",
"dueDate": "2025-12-31T23:59:59Z",
"priority": 2,
"projectId": "project-guid-here",
"userId": "user-guid-here"
}'O projeto possui cobertura de testes unitários superior a 80% das regras de negócio.
dotnet testdotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=opencoverO banco de dados é criado automaticamente usando Entity Framework Core Code First. As migrations são aplicadas automaticamente na inicialização da aplicação.
Tabelas:
- Projects - Armazena projetos
- Tasks - Armazena tarefas
- TaskComments - Armazena comentários das tarefas
- TaskHistory - Armazena histórico de alterações
Nota: O projeto utiliza a abordagem Code First, onde as entidades do domínio definem a estrutura do banco de dados. As migrations do EF Core garantem que o schema seja criado e atualizado automaticamente.
Algumas coisas que precisamos alinhar para as próximas entregas:
Sobre autenticação:
- Além de User e Manager, vão precisar de outros perfis? Tipo Admin, ou algo mais específico?
- Projetos podem ser privados ou tudo é compartilhado com o time?
Colaboração:
- Várias pessoas podem trabalhar no mesmo projeto ao mesmo tempo?
- Precisa notificar o pessoal quando alguém muda uma tarefa? Email, push, ou só dentro do sistema mesmo?
- Seria útil ter @menções nos comentários?
Tarefas:
- Esse limite de 20 tarefas por projeto é fixo ou vocês querem que seja configurável?
- Precisa de sub-tarefas? Tipo dividir uma tarefa grande em checkpoints menores?
- Tags/labels ajudariam? Para organizar melhor as coisas?
- E anexos? Vai ter gente querendo colocar imagens ou arquivos nas tarefas?
Relatórios:
- Além da média de conclusão, que outros números são importantes? Velocidade do time, gráfico de burndown, tarefas atrasadas?
- Precisa exportar relatórios em PDF ou Excel?
Busca e filtros:
- Quais filtros são mais importantes? Por status, prazo, prioridade?
Segurança:
- Autenticação JWT/OAuth2
Performance:
- Caching (Redis) para consultas frequentes
- Paginação nas listagens
- Índices otimizados no banco
Observabilidade:
- Logging estruturado (Serilog)
- Health checks
- Application Insights
Qualidade:
- Testes de integração
- CI/CD (GitHub Actions ou Azure DevOps)
- SonarQube para análise
Evoluir para uma arquitetura de microserviços:
- Service de Projetos: Gerenciamento de projetos
- Service de Tarefas: Gerenciamento de tarefas e comentários
- Service de Usuários: Autenticação e perfis
- Service de Notificações: Email, push, webhooks
- Service de Relatórios: Analytics e exportação
Comunicação:
- Message Broker (RabbitMQ, Azure Service Bus)
- Event-Driven Architecture (CQRS + Event Sourcing)
Compute:
- Azure Kubernetes Service (AKS) para orquestração
Storage:
- Azure SQL Database ou Cosmos DB
- Azure Blob Storage para anexos
- Azure Redis Cache para caching
Messaging & Events:
- Azure Service Bus para mensageria
Monitoring:
- Application Insights
- Azure Monitor
- Log Analytics
Security:
- Azure Key Vault para secrets
- Azure AD B2C para autenticação
- Azure API Management para gateway
CI/CD:
- Azure DevOps Pipelines
- GitHub Actions
- Azure Container Registry
- CQRS: Separar comandos (write) de consultas (read)
- Retry policies
- Health checkss
- Blue-Green deployments
- Automated rollback
- CQRS - Command Query Responsibility Segregation
Este projeto é privado e proprietário da Skopia.
Para dúvidas ou suporte, entre em contato com a equipe de desenvolvimento.