{"id":36954972,"url":"https://github.com/alysonsz/cataloghub","last_synced_at":"2026-01-13T13:01:09.443Z","repository":{"id":328032716,"uuid":"1114016378","full_name":"alysonsz/CatalogHub","owner":"alysonsz","description":"A robust .NET 8 RESTful API for product catalog management implementing Clean Architecture, Docker, PostgreSQL, and AWS S3.","archived":false,"fork":false,"pushed_at":"2025-12-10T20:41:59.000Z","size":29,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-11T06:57:20.886Z","etag":null,"topics":["aws-s3","clean-architecture","csharp","docker","dotnet-8","entity-framework-core","postgreesql","rest-api","swagger","unit-testing"],"latest_commit_sha":null,"homepage":"https://www.linkedin.com/in/alyson-carregosa/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alysonsz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-10T19:26:18.000Z","updated_at":"2025-12-10T20:44:59.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/alysonsz/CatalogHub","commit_stats":null,"previous_names":["alysonsz/cataloghub"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/alysonsz/CatalogHub","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alysonsz%2FCatalogHub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alysonsz%2FCatalogHub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alysonsz%2FCatalogHub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alysonsz%2FCatalogHub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alysonsz","download_url":"https://codeload.github.com/alysonsz/CatalogHub/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alysonsz%2FCatalogHub/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28385800,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T12:01:30.995Z","status":"ssl_error","status_checked_at":"2026-01-13T12:00:09.625Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws-s3","clean-architecture","csharp","docker","dotnet-8","entity-framework-core","postgreesql","rest-api","swagger","unit-testing"],"created_at":"2026-01-13T13:00:52.906Z","updated_at":"2026-01-13T13:01:09.422Z","avatar_url":"https://github.com/alysonsz.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# **Prova Prática \\- CatalogHub API**\n\n### **📌 Descrição do Projeto**\n\nO ***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.  \nA API proporciona funcionalidades completas para o ciclo de vida dos produtos, incluindo operações de CRUD, filtros e upload de imagens.\n\n### **🚀 Objetivos do Projeto**\n\n* Implementar uma **Arquitetura Limpa** desacoplada, com clara separação entre as camadas de Domínio, Aplicação, Infraestrutura e Apresentação.  \n* Aplicar práticas recomendadas para uso de **Entity Framework Core**, incluindo mapeamento com Fluent API.  \n* Garantir a qualidade e a confiabilidade do código através de **testes unitários** (xUnit e Moq).  \n* Integrar com serviços externos de forma desacoplada, como a **AWS S3** para armazenamento de imagens.  \n* Fornecer uma documentação de API clara e interativa com **Swagger/OpenAPI**, seguindo as convenções REST.  \n* Apresentar um código limpo, organizado e facilmente extensível.\n\n### **🛠️ Tecnologias Utilizadas**\n\n**Backend:**\n\n* .NET 8  \n* ASP.NET Core  \n* Entity Framework Core 8\n\n**Banco de Dados:**\n\n* PostgreSQL\n\n**Testes:**\n\n* xUnit  \n* Moq\n\n**Infraestrutura e Cloud:**\n\n* AWS S3 (SDK para .NET)\n* Docker\n\n**Documentação:**\n\n* Swagger (Swashbuckle)\n\n### **✨ Arquitetura do Projeto**\n\nO 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.\n\n  ```mermaid\n\ngraph TD\n    subgraph MainLayers\n        direction TB\n        A1[Cliente HTTP] --\u003e B1[API Layer - Apresentacao]\n        B1 --\u003e C1[Application Layer]\n        C1 --\u003e D1[Domain Layer]\n        E1[Infrastructure Layer] --\u003e D1\n        C1 -- usa --\u003e F1[Interfaces de Repositorio]\n        E1 -- implementa --\u003e F1\n    end\n\n    subgraph Legenda\n        direction LR\n        B1 --- B2[Controllers, DI, Configs]\n        C1 --- C2[Services, Validators]\n        D1 --- D2[Entities, Interfaces de Repositorio]\n        E1 --- E2[DbContext, Repositories, Migrations]\n    end\n\n    subgraph Dependencias Externas\n        direction TB\n        E1 --\u003e G1[PostgreSQL]\n        E1 --\u003e H1[AWS S3]\n    end\n\n```\n\n\n### **📁 Estrutura de Pastas**\n\n/  \n├── 📄 CatalogHub.sln  \n│  \n├── 🚀 CatalogHub.Api/  \n│   ├── Configuration/ \n│   ├── Controllers/  \n│   └── Program.cs  \n│  \n├── ⚙️ CatalogHub.Application/  \n│   ├── DTOs/  \n│   ├── Services/  \n│   ├── Interfaces/  \n│   └── Validators/  \n│  \n├── 💾 CatalogHub.Infrastructure/  \n│   ├── Data/  \n│   ├── Repository/  \n│   └── Migrations/  \n│  \n├── 🧱 CatalogHub.Domain/  \n│   ├── Models/  \n│   └── Interfaces/  \n│  \n└── 🧪 CatalogHub.Tests/  \n    └── Service/\n\n### **📌 Como Rodar o Projeto**\n\nSiga os passos abaixo para configurar e executar a aplicação em seu ambiente local.\n\n#### **✅ Pré-requisitos**\n\n* [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.\n* [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) \u003c- Caso use o Docker, não é necessário instalar o SDK localmente. \n* [Ambiente de Desenvolvimento da sua preferência](https://visualstudio.microsoft.com/pt-br/downloads/) \u003c- Recomendado Visual Studio\n\n#### **🛠️ Configuração**\n\n#### 🐳 Como Rodar o Projeto com Docker (Recomendado)\n\nEsta é a forma mais simples e garantida de executar o projeto, pois o ambiente inteiro (API + Base de Dados) é gerido pelo Docker.\n\n1.  Clone o repositório:\n\n        git clone: https://github.com/alysonsz/CatalogHub.git\n        OBS: abra o projeto através do arquivo CatalogHub.sln\n\n2.  Configure os Segredos:\n\n        Na raiz do projeto, crie um novo arquivo chamado docker-compose.override.yml.\n\n        Copie e cole o conteúdo abaixo neste novo arquivo, substituindo com as suas credenciais reais da AWS:\n\n        version: '3.8'\n\n        services:\n          api:\n            environment:\n              # As suas credenciais reais da AWS ficam aqui\n              - AWS__BucketName=cataloghub-db\n              - AWS__AWSAccessKey=SUA_ACCESS_KEY_AQUI\n              - AWS__AWSSecretKey=SUA_SECRET_KEY_AQUI\n              - AWS__Region=us-east-2\n\n        Este arquivo é ignorado pelo Git e fornece as suas credenciais de forma segura para o contentor da API.\n\n3.  Inicie os Contentores:\n\n        Abra um terminal na raiz do projeto.\n\n        Execute o comando:\n\n        docker-compose up --build\n\n4.  Acesse a API:    \n\n        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.\n        A própria API irá aplicar as migrations automaticamente ao iniciar, criando as tabelas na base de dados.\n\n        Após os logs estabilizarem, a aplicação estará rodando em: http://localhost:8000.\n        A documentação interativa do Swagger estará disponível em:\n        http://localhost:8000/swagger\n\n#### 🔧 Rodando o Projeto Manualmente (Alternativa):\n\n       Base de Dados: Garanta que tem uma instância do PostgreSQL a correr localmente.\n\n       Pré-requisitos: É necessário ter o .NET 8 SDK instalado.\n\n       Configure as variáveis de ambiente: No arquivo appsettings.json, ajuste a DefaultConnection e as credenciais da AWS.\n\n       Aplique as Migrations: dotnet ef database update --project CatalogHub.Infrastructure --startup-project CatalogHub.Api\n\n       Inicie a API: dotnet run --project CatalogHub.Api\n\n       Acesse a Documentação da API: http://localhost:5222/swagger (a porta pode variar).\n\n#### 🧪 Executando os Testes Unitários\n\n       Abra um terminal na raiz da solução e execute o comando:\n\n       dotnet test","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falysonsz%2Fcataloghub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falysonsz%2Fcataloghub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falysonsz%2Fcataloghub/lists"}