https://github.com/alysonsz/cataloghub
A robust .NET 8 RESTful API for product catalog management implementing Clean Architecture, Docker, PostgreSQL, and AWS S3.
https://github.com/alysonsz/cataloghub
aws-s3 clean-architecture csharp docker dotnet-8 entity-framework-core postgreesql rest-api swagger unit-testing
Last synced: 5 months ago
JSON representation
A robust .NET 8 RESTful API for product catalog management implementing Clean Architecture, Docker, PostgreSQL, and AWS S3.
- Host: GitHub
- URL: https://github.com/alysonsz/cataloghub
- Owner: alysonsz
- Created: 2025-12-10T19:26:18.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2025-12-10T20:41:59.000Z (6 months ago)
- Last Synced: 2025-12-11T06:57:20.886Z (6 months ago)
- Topics: aws-s3, clean-architecture, csharp, docker, dotnet-8, entity-framework-core, postgreesql, rest-api, swagger, unit-testing
- Language: C#
- Homepage: https://www.linkedin.com/in/alyson-carregosa/
- Size: 28.3 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# **Prova Prática \- CatalogHub API**
### **📌 Descrição do Projeto**
O ***CatalogHub API*** é uma API RESTful desenvolvida em .NET 8, projetada como uma solução robusta e escalável para o gerenciamento de um catálogo de produtos e categorias. O projeto demonstra as melhores práticas de desenvolvimento de software, incluindo a implementação de uma Arquitetura Limpa (Clean Architecture), persistência de dados com Entity Framework Core, integração com a AWS para armazenamento de arquivos e uma suíte de testes unitários para garantir a qualidade do código.
A API proporciona funcionalidades completas para o ciclo de vida dos produtos, incluindo operações de CRUD, filtros e upload de imagens.
### **🚀 Objetivos do Projeto**
* Implementar uma **Arquitetura Limpa** desacoplada, com clara separação entre as camadas de Domínio, Aplicação, Infraestrutura e Apresentação.
* Aplicar práticas recomendadas para uso de **Entity Framework Core**, incluindo mapeamento com Fluent API.
* Garantir a qualidade e a confiabilidade do código através de **testes unitários** (xUnit e Moq).
* Integrar com serviços externos de forma desacoplada, como a **AWS S3** para armazenamento de imagens.
* Fornecer uma documentação de API clara e interativa com **Swagger/OpenAPI**, seguindo as convenções REST.
* Apresentar um código limpo, organizado e facilmente extensível.
### **🛠️ Tecnologias Utilizadas**
**Backend:**
* .NET 8
* ASP.NET Core
* Entity Framework Core 8
**Banco de Dados:**
* PostgreSQL
**Testes:**
* xUnit
* Moq
**Infraestrutura e Cloud:**
* AWS S3 (SDK para .NET)
* Docker
**Documentação:**
* Swagger (Swashbuckle)
### **✨ Arquitetura do Projeto**
O projeto segue a abordagem de **Clean Architecture**, que promove a separação de responsabilidades e garante que a lógica de negócio seja independente de detalhes de implementação.
```mermaid
graph TD
subgraph MainLayers
direction TB
A1[Cliente HTTP] --> B1[API Layer - Apresentacao]
B1 --> C1[Application Layer]
C1 --> D1[Domain Layer]
E1[Infrastructure Layer] --> D1
C1 -- usa --> F1[Interfaces de Repositorio]
E1 -- implementa --> F1
end
subgraph Legenda
direction LR
B1 --- B2[Controllers, DI, Configs]
C1 --- C2[Services, Validators]
D1 --- D2[Entities, Interfaces de Repositorio]
E1 --- E2[DbContext, Repositories, Migrations]
end
subgraph Dependencias Externas
direction TB
E1 --> G1[PostgreSQL]
E1 --> H1[AWS S3]
end
```
### **📁 Estrutura de Pastas**
/
├── 📄 CatalogHub.sln
│
├── 🚀 CatalogHub.Api/
│ ├── Configuration/
│ ├── Controllers/
│ └── Program.cs
│
├── ⚙️ CatalogHub.Application/
│ ├── DTOs/
│ ├── Services/
│ ├── Interfaces/
│ └── Validators/
│
├── 💾 CatalogHub.Infrastructure/
│ ├── Data/
│ ├── Repository/
│ └── Migrations/
│
├── 🧱 CatalogHub.Domain/
│ ├── Models/
│ └── Interfaces/
│
└── 🧪 CatalogHub.Tests/
└── Service/
### **📌 Como Rodar o Projeto**
Siga os passos abaixo para configurar e executar a aplicação em seu ambiente local.
#### **✅ Pré-requisitos**
* [Docker Desktop](https://www.docker.com/products/docker-desktop): Essencial para executar a aplicação de forma simples. É crucial que esteja rodando antes de executar os comandos.
* [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) <- Caso use o Docker, não é necessário instalar o SDK localmente.
* [Ambiente de Desenvolvimento da sua preferência](https://visualstudio.microsoft.com/pt-br/downloads/) <- Recomendado Visual Studio
#### **🛠️ Configuração**
#### 🐳 Como Rodar o Projeto com Docker (Recomendado)
Esta é a forma mais simples e garantida de executar o projeto, pois o ambiente inteiro (API + Base de Dados) é gerido pelo Docker.
1. Clone o repositório:
git clone: https://github.com/alysonsz/CatalogHub.git
OBS: abra o projeto através do arquivo CatalogHub.sln
2. Configure os Segredos:
Na raiz do projeto, crie um novo arquivo chamado docker-compose.override.yml.
Copie e cole o conteúdo abaixo neste novo arquivo, substituindo com as suas credenciais reais da AWS:
version: '3.8'
services:
api:
environment:
# As suas credenciais reais da AWS ficam aqui
- AWS__BucketName=cataloghub-db
- AWS__AWSAccessKey=SUA_ACCESS_KEY_AQUI
- AWS__AWSSecretKey=SUA_SECRET_KEY_AQUI
- AWS__Region=us-east-2
Este arquivo é ignorado pelo Git e fornece as suas credenciais de forma segura para o contentor da API.
3. Inicie os Contentores:
Abra um terminal na raiz do projeto.
Execute o comando:
docker-compose up --build
4. Acesse a API:
Na primeira vez que executar, o Docker irá construir a imagem da API, o que pode demorar alguns minutos. Nas próximas vezes, será muito mais rápido.
A própria API irá aplicar as migrations automaticamente ao iniciar, criando as tabelas na base de dados.
Após os logs estabilizarem, a aplicação estará rodando em: http://localhost:8000.
A documentação interativa do Swagger estará disponível em:
http://localhost:8000/swagger
#### 🔧 Rodando o Projeto Manualmente (Alternativa):
Base de Dados: Garanta que tem uma instância do PostgreSQL a correr localmente.
Pré-requisitos: É necessário ter o .NET 8 SDK instalado.
Configure as variáveis de ambiente: No arquivo appsettings.json, ajuste a DefaultConnection e as credenciais da AWS.
Aplique as Migrations: dotnet ef database update --project CatalogHub.Infrastructure --startup-project CatalogHub.Api
Inicie a API: dotnet run --project CatalogHub.Api
Acesse a Documentação da API: http://localhost:5222/swagger (a porta pode variar).
#### 🧪 Executando os Testes Unitários
Abra um terminal na raiz da solução e execute o comando:
dotnet test