Skip to content
 
 

Repository files navigation

📚 DoroTech – API de Gerenciamento de Livros

API REST desenvolvida em C# com ASP.NET Core (.NET 8) como solução para o Desafio Back-end Developer da DoroTech.

O projeto tem como objetivo auxiliar uma livraria no gerenciamento de seus livros em estoque, permitindo consulta, cadastro, edição e exclusão, com persistência em banco de dados, autenticação JWT e documentação via Swagger.


🛠️ Tecnologias Utilizadas

  • C#
  • ASP.NET Core Web API (.NET 8)
  • Entity Framework Core
  • MySQL
  • JWT (JSON Web Token)
  • Swagger / OpenAPI
  • Serilog (logs de registro e erro)
  • Injeção de Dependência
  • Padrões Repository e Service
  • Princípios SOLID e Clean Code

🎯 Enunciado do Desafio

Uma livraria da cidade teve um aumento no número de seus exemplares e está com dificuldades para identificar todos os livros em estoque.
Foi solicitado o desenvolvimento de uma aplicação web para gerenciar esses livros.

Requisitos Funcionais

  • Listar todos os livros cadastrados ordenados de forma ascendente pelo nome
  • Validar se o livro já está cadastrado ao persistir
  • Permitir consultar, criar, editar e excluir livros
  • Persistir os dados em banco de dados
  • Criar mecanismo de log de registros e erros

✅ Atendimento aos Requisitos

Requisitos Gerais

Requisito Implementação
Listagem ordenada por nome ✅ Implementado
Validação de duplicidade ✅ Implementado
CRUD completo ✅ Implementado
Persistência em banco de dados ✅ Implementado
Logs de registro e erro ✅ Serilog

Requisitos Técnicos

Requisito Implementação
Swagger configurado ✅ Swagger + XML Comments
Autenticação JWT (Bearer) ✅ Implementado
Entity Framework Core ✅ Utilizado
Banco de dados ✅ MySQL
Migrations / Scripts ✅ EF Core
.gitignore ✅ Incluído

🔐 Autenticação e Autorização

A API utiliza JWT (Bearer Token) para autenticação.

Níveis de acesso

  • Administrador (Admin)
    • Criar livros
    • Atualizar livros
    • Excluir livros
  • Usuário Público
    • Listar livros
    • Buscar livro por ID
    • Não requer autenticação

No Swagger UI, utilize o botão Authorize e informe: Bearer {seu_token_jwt}


🏗️ Arquitetura da Aplicação

A aplicação foi desenvolvida seguindo princípios de SOLID, Clean Code e separação de responsabilidades.

ontroller ↓ Service (Regras de Negócio) ↓ Repository (Acesso a Dados) ↓ Entity Framework Core (DbContext) ↓ Banco de Dados MySQL

Estrutura em Camadas

  • Controller: recebe requisições HTTP e retorna respostas apropriadas
  • Service: contém regras de negócio e validações
  • Repository: responsável pelo acesso ao banco de dados
  • DTOs: controlam entrada e saída de dados
  • Seed: criação de massa inicial de dados

📦 Entidade Principal

Livro

Campo Tipo
Id Guid
Nome string
Descricao string
Preco decimal
Estoque int
DataCadastro DateTime

🚀 Endpoints da API

➕ Criar Livro

POST /api/livro
🔒 Admin

  • Valida se já existe livro com o mesmo nome
  • Retorna 409 Conflict em caso de duplicidade

📄 Listar Livros

GET /api/livro

  • Ordenação ascendente por nome
  • Paginação (page, pageSize)
  • Filtro opcional por nome

🔍 Buscar Livro por ID

GET /api/livro/{id}

  • Retorna 400 para ID inválido
  • Retorna 404 caso não encontrado

✏️ Atualizar Livro

PUT /api/livro/{id}
🔒 Admin

  • Atualiza apenas se o livro existir
  • Retorna 204 No Content

🗑️ Remover Livro

DELETE /api/livro/{id}
🔒 Admin

  • Remove o livro do banco de dados
  • Retorna 404 caso não encontrado

🧪 Massa de Dados (Seed)

Ao iniciar a aplicação, o banco de dados é populado automaticamente com dados iniciais para facilitar testes e validação da API.

SeedData.Initialize(context);


⚙️ Configuração do Banco de Dados
No arquivo appsettings.json:

{
  "ConnectionStrings": {
    "DefaultConnection": "server=localhost;database=dorotech_db;user=root;password=senha"
  }
}
Banco utilizado: MySQL 8


▶️ Como Executar o Projeto
dotnet restore
dotnet run

Acesse o Swagger em: 
http://localhost:5166

🧠 Boas Práticas Aplicadas

Separação clara de responsabilidades

Uso de interfaces para desacoplamento

Regras de negócio centralizadas na camada de serviço

Tratamento adequado de erros HTTP

Logs estruturados de informação e erro

Código preparado para manutenção e evolução


👨‍💻 Autor

Gabriel Carvalho
Back-end Developer
C# | .NET | APIs REST | SQL

About

Desafio para Back-end Developer na DoroTech - C# .NET

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages