Skip to content

Entrega Desafio Back-end DoroTech - Lucas Martins#23

Open
LucasMartinsIT wants to merge 1 commit into
dorotech:mainfrom
LucasMartinsIT:main
Open

Entrega Desafio Back-end DoroTech - Lucas Martins#23
LucasMartinsIT wants to merge 1 commit into
dorotech:mainfrom
LucasMartinsIT:main

Conversation

@LucasMartinsIT

Copy link
Copy Markdown

Olá, equipe DoroTech! Tudo bem?

Segue a minha solução para o desafio de Back-end Developer. O projeto foi construído visando escalabilidade, fácil manutenção e aplicação rigorosa de boas práticas de engenharia de software.

🚀 Tecnologias e Arquitetura

Conforme solicitado nas observações, informo que a aplicação foi desenvolvida utilizando o .NET 8.

  • Arquitetura: Clean Architecture com separação clara de responsabilidades (Domain, Application, Infrastructure e API).
  • Design Patterns & Princípios: Domain-Driven Design (DDD), SOLID e Clean Code.
  • Banco de Dados: PostgreSQL utilizando Entity Framework Core (com Fluent API, sem poluir as entidades de domínio).

✅ Requisitos Atendidos

  • CRUD completo de livros isolado na Camada de Aplicação.
  • Regra de ordenação ascendente direto na consulta ao banco (AsQueryable).
  • Validação de duplicidade (ISBN único e bloqueio de Título/Autor repetidos).
  • Log de ações e erros estruturado utilizando Serilog.
  • .gitignore configurado.
  • Currículo anexado na raiz do repositório.

🌟 Diferenciais Implementados

  • Autenticação JWT: Implementada com controle de acesso via Roles.
    • Consultas (GET) configuradas como [AllowAnonymous].
    • Modificações (POST, PUT, DELETE) restritas para [Authorize(Roles = "Admin")].
    • Hash de senhas utilizando BCrypt.
  • Middlewares de Resiliência: Criação de um GlobalExceptionMiddleware que intercepta erros de negócio e devolve os Status Codes adequados (400, 401, 404, 500) em formato JSON, protegendo a stack trace.
  • Data Seeding: Massa de dados inicial configurada. Ao rodar as migrations, o banco é populado com um usuário admin (senha: admin123) e alguns livros para teste.
  • Paginação e Filtros: Método GET aceitando paginação, título e autor, retornando o número total de registros no Header X-Total-Count.
  • Testes Unitários (TDD): Cobertura da regra de negócios de duplicidade de livros utilizando xUnit e Moq.
  • Documentação: Swagger configurado com suporte à injeção do Bearer Token e leitura de comentários XML (<summary>).

⚙️ Como executar o projeto

  1. Clone o repositório.
  2. Certifique-se de ter o PostgreSQL rodando localmente (Porta 5432).
  3. Ajuste a senha no Program.cs se necessário.
  4. Na raiz da solução, execute o comando de migration para criar o banco e injetar a massa de dados:
    dotnet ef database update --project Bookstore.Infrastructure --startup-project Bookstore.API
  5. Execute o projeto com dotnet run --project Bookstore.API e acesse o /swagger.

Agradeço a oportunidade e o excelente desafio! Fico à disposição para dúvidas ou feedbacks sobre as decisões técnicas adotadas.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant