API desenvolvida em .NET 10 para gerenciamento de um e-commerce de produtos para pets e adoção de animais. O projeto segue boas práticas de desenvolvimento, princípios SOLID e arquitetura em camadas.
- .NET 10 (Web API)
- Entity Framework Core (ORM)
- SQL Server (Banco de dados)
- JWT (JSON Web Token) (Autenticação)
- BCrypt (Hashing de senhas)
- Swagger/OpenAPI (Documentação da API)
O projeto foi estruturado visando desacoplamento e testabilidade, utilizando Injeção de Dependência e separação de responsabilidades:
- Controllers: Responsáveis apenas por receber requisições e retornar respostas HTTP.
- Services: Contêm as regras de negócio (ex:
AuthService,ProductService,CartService). - Repositories: Abstraem o acesso a dados (
UserRepository,TagRepository). - DTOs (Data Transfer Objects): Objetos para transferência de dados entre camadas, garantindo que entidades de domínio não sejam expostas diretamente (ex:
ProdutoCreateRequest,UsuarioResponse).
- SOLID: Separação clara de responsabilidades com interfaces para autenticação, geração de tokens, carrinho de compras e acesso a dados, facilitando manutenção e testabilidade.
- Segurança: Senhas salvas com hash (BCrypt), uso de JWT para rotas protegidas e sanitização de retornos (não retorna senhas).
- .NET SDK 10.0
- SQL Server (LocalDB ou Container)
-
Clone o repositório:
git clone https://github.com/seu-usuario/PetsTudo.git cd PetsTudo -
Configure a String de Conexão: Edite o arquivo
appsettings.jsone ajuste/crie aConnectionStrings:DefaultConnectionpara o seu ambiente. -
Configure o JWT: No
appsettings.json, defina suas chaves emJwt(Key, Issuer, Audience). -
Execute as Migrations: Crie o banco de dados e as tabelas:
dotnet ef database update
-
Execute a aplicação:
dotnet run
Acesse em:
https://localhost:7151ouhttp://localhost:5011(ou a porta configurada).Swagger UI: Acesse
https://localhost:7151/swaggerpara explorar e testar os endpoints interativamente.
POST /login: Autentica um usuário e retorna o Token JWT.POST /register: Cadastra um novo usuário (retorna dados seguros, sem senha).
GET /: Lista todos os produtos disponíveis.GET /{id}: Obtém detalhes de um produto específico.GET /tag/{tagName}: Filtra produtos por tag (ex:/tag/gatos).POST /carrinho: Adiciona um produto ao carrinho do usuário.- Body:
{ "ProdutoId": 1, "Quantidade": 2 }
- Body:
POST /comprar: Compra todos os itens do carrinho do usuário (decrementa estoque).
POST /: Cria um novo produto com tags (ex:["Ração", "Cães"]).PUT /{id}: Atualiza um produto. Suporta atualização parcial e reconciliação de tags.DELETE /{id}: Remove um produto.
GET /: Lista todos os pets disponíveis para adoção.GET /{id}: Obtém detalhes de um pet específico.
POST /: Cria um novo pet para adoção.PUT /{id}: Atualiza informações de um pet.DELETE /{id}: Remove um pet.
PetsTudo/
├── Controllers/ # Endpoints da API (Auth, Produto, Pets, etc.)
├── Models/ # Entidades do Domínio (Usuario, Produto, Tag, Pets)
├── DTOs/ # Objetos de requisição e resposta
├── Data/ # Contexto do EF Core (AppDbContext)
├── Services/ # Regras de Negócio (Auth, Product, Cart, Pets)
├── Repositories/ # Acesso ao Banco de Dados
├── Migrations/ # Histórico de alterações do banco
└── Properties/ # Configurações do projeto
O carrinho é gerenciado em memória por usuário:
- Adicionar ao Carrinho: Produtos são validados antes de adicionar.
- Compra: Processa todos os itens do carrinho, verificando estoque. Se algum item falhar, a compra é cancelada.
- Persistência: Dados do carrinho são mantidos apenas em RAM (reinicia com a aplicação).
- JWT Tokens: Usados para proteger rotas. Tokens expiram conforme configuração.
- Roles: Usuários comuns acessam produtos e pets; Admins gerenciam CRUD completo.
- Blacklist: Tokens podem ser invalidados (logout).