Skip to content

noelfelipe/Skopia.TaskManager.API

Repository files navigation

Skopia Task Manager API

Visão Geral

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.

Tecnologias Utilizadas

  • .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

Arquitetura

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

Princípios Aplicados

  • SOLID
  • Clean Code
  • Repository Pattern
  • Unit of Work Pattern
  • Dependency Injection

Funcionalidades

Projetos

  • 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)

Tarefas

  • 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

Comentários

  • Adição de comentários às tarefas
  • Registro no histórico de alterações

Relatórios

  • Relatório de desempenho (média de tarefas concluídas nos últimos 30 dias)
  • Acesso restrito a usuários com perfil "Gerente"

Regras de Negócio Implementadas

  1. Prioridades de Tarefas: Cada tarefa tem uma prioridade que não pode ser alterada após criação
  2. Restrições de Remoção: Projetos com tarefas pendentes não podem ser removidos
  3. Histórico de Atualizações: Todas as alterações em tarefas são registradas automaticamente
  4. Limite de Tarefas: Máximo de 20 tarefas por projeto
  5. Relatórios de Desempenho: Apenas gerentes podem acessar relatórios
  6. Comentários: Registrados automaticamente no histórico

Executando o Projeto

Pré-requisitos

  • Docker
  • Docker Compose

Forma Rápida (Recomendado)

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.sh

Windows:

start.bat

Ou 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

Executar Manualmente com Docker

  1. Clone o repositório:
git clone <repository-url>
cd Skopia.TaskManager.API
  1. Execute o docker-compose:
docker-compose up --build
  1. A API estará disponível em:

  2. O SQL Server estará disponível em:

    • Host: localhost
    • Port: 1433
    • Username: sa
    • Password: YourStrong@Passw0rd

Parar os containers:

docker-compose down

Parar e remover volumes:

docker-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.

Endpoints da API

Projetos

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

Tarefas

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

Relatórios

Método Endpoint Descrição
GET /api/reports/performance/{userId}?requestingUserRole=Manager Obtém relatório de desempenho (apenas gerentes)

Exemplos de Uso

Criar um Projeto

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"
  }'

Criar uma Tarefa

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"
  }'

Testes

O projeto possui cobertura de testes unitários superior a 80% das regras de negócio.

Executar testes:

dotnet test

Executar testes com cobertura:

dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=opencover

Estrutura do Banco de Dados

O 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.


Fase 2: Refinamento - Conversa com o PO

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?

Fase 3: Melhorias e Visão de Arquitetura

Melhorias Técnicas Prioritárias

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

Visão de Arquitetura e Cloud

1. Arquitetura de Microserviços

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)

2. Cloud Native (Azure)

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

3. Estratégia de Dados

  • CQRS: Separar comandos (write) de consultas (read)

4. Resiliência

  • Retry policies
  • Health checkss

5. DevOps e GitOps

  • Blue-Green deployments
  • Automated rollback

Padrões Adicionais Recomendados

  1. CQRS - Command Query Responsibility Segregation

Licença

Este projeto é privado e proprietário da Skopia.

Contato

Para dúvidas ou suporte, entre em contato com a equipe de desenvolvimento.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors