Skip to content

Este projeto se trata de uma API para loja de e-commerce do ramo de pets. O projeto conta com carrinho de compras, criação, alteração, remoção de produtos e pets. A API suporta filtragem de produtos por tags

Notifications You must be signed in to change notification settings

Xcode-sketcher/PetsTudo

Repository files navigation

PetsTudo API 🐾

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.

🚀 Tecnologias Utilizadas

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

🏛️ Arquitetura e Padrões

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

Princípios Aplicados

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

⚙️ Configuração e Execução

Pré-requisitos

  • .NET SDK 10.0
  • SQL Server (LocalDB ou Container)

Passos

  1. Clone o repositório:

    git clone https://github.com/seu-usuario/PetsTudo.git
    cd PetsTudo
  2. Configure a String de Conexão: Edite o arquivo appsettings.json e ajuste/crie a ConnectionStrings:DefaultConnection para o seu ambiente.

  3. Configure o JWT: No appsettings.json, defina suas chaves em Jwt (Key, Issuer, Audience).

  4. Execute as Migrations: Crie o banco de dados e as tabelas:

    dotnet ef database update
  5. Execute a aplicação:

    dotnet run

    Acesse em: https://localhost:7151 ou http://localhost:5011 (ou a porta configurada).

    Swagger UI: Acesse https://localhost:7151/swagger para explorar e testar os endpoints interativamente.

🔌 Endpoints Principais

Autenticação (/api/auth)

  • POST /login: Autentica um usuário e retorna o Token JWT.
  • POST /register: Cadastra um novo usuário (retorna dados seguros, sem senha).

Produtos (/api/produto) - Requer Autenticação

  • 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 }
  • POST /comprar: Compra todos os itens do carrinho do usuário (decrementa estoque).

Produtos (Admin) (/api/produtoadmin) - Requer Autenticação (Role: Admin)

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

Pets (/api/pets) - Requer Autenticação

  • GET /: Lista todos os pets disponíveis para adoção.
  • GET /{id}: Obtém detalhes de um pet específico.

Pets (Admin) (/api/petsadmin) - Requer Autenticação (Role: Admin)

  • POST /: Cria um novo pet para adoção.
  • PUT /{id}: Atualiza informações de um pet.
  • DELETE /{id}: Remove um pet.

📂 Estrutura de Pastas

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

🛒 Funcionalidades do Carrinho

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

🔒 Autenticação e Autorizaçã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).

About

Este projeto se trata de uma API para loja de e-commerce do ramo de pets. O projeto conta com carrinho de compras, criação, alteração, remoção de produtos e pets. A API suporta filtragem de produtos por tags

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages