{"id":30719639,"url":"https://github.com/phquartin/storesalescleanapi","last_synced_at":"2025-09-03T10:07:13.589Z","repository":{"id":309437824,"uuid":"1036252284","full_name":"phquartin/StoreSalesCleanApi","owner":"phquartin","description":"API para gerenciar vendas de uma loja, desenvolvida com Java 21, Docker, Spring, Flyway e seguindo uma arquitetura limpa para melhor organização e manutenção do código.","archived":false,"fork":false,"pushed_at":"2025-08-11T21:35:44.000Z","size":10,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-08-11T23:30:26.782Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","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/phquartin.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}},"created_at":"2025-08-11T19:41:29.000Z","updated_at":"2025-08-11T21:35:46.000Z","dependencies_parsed_at":"2025-08-11T23:40:41.805Z","dependency_job_id":null,"html_url":"https://github.com/phquartin/StoreSalesCleanApi","commit_stats":null,"previous_names":["phquartin/storesalescleanapi"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/phquartin/StoreSalesCleanApi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phquartin%2FStoreSalesCleanApi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phquartin%2FStoreSalesCleanApi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phquartin%2FStoreSalesCleanApi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phquartin%2FStoreSalesCleanApi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phquartin","download_url":"https://codeload.github.com/phquartin/StoreSalesCleanApi/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phquartin%2FStoreSalesCleanApi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273424011,"owners_count":25103154,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-03T02:00:09.631Z","response_time":76,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2025-09-03T10:07:12.119Z","updated_at":"2025-09-03T10:07:13.581Z","avatar_url":"https://github.com/phquartin.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Store Sales Clean API\n\n## Sobre o Projeto\nStore Sales Clean API é uma aplicação Spring Boot desenvolvida para gerenciar vendas de uma loja. A API permite o gerenciamento de produtos e categorias, seguindo os princípios de Clean Architecture e SOLID.\n\n## Arquitetura Limpa (Clean Architecture)\n\nEste projeto implementa os princípios da Arquitetura Limpa (Clean Architecture) proposta por Robert C. Martin. A estrutura do projeto é organizada em camadas concêntricas:\n\n### 1. Core (Núcleo)\nO centro da aplicação contém:\n- **Domain**: Entidades de negócio (Product, Category) que representam os conceitos fundamentais do domínio.\n- **Use Cases**: Implementação das regras de negócio específicas da aplicação.\n- **Gateways (Ports)**: Interfaces que definem como o núcleo se comunica com sistemas externos.\n\n### 2. Infrastructure (Infraestrutura)\nCamada externa que contém:\n- **Presentation**: Controllers REST que expõem a API.\n- **Persistence**: Implementação do acesso a dados usando Spring Data JPA.\n- **Gateway Implementations (Adapters)**: Implementações concretas das interfaces de gateway.\n- **Configuration**: Configurações do Spring e da aplicação.\n\n### Benefícios da Arquitetura Limpa\n- **Testabilidade**: As regras de negócio podem ser testadas independentemente da infraestrutura.\n- **Independência de Frameworks**: O núcleo da aplicação não depende de frameworks externos.\n- **Independência de UI**: A interface do usuário pode ser alterada sem afetar a lógica de negócio.\n- **Independência de Banco de Dados**: O banco de dados pode ser substituído sem afetar o núcleo da aplicação.\n\n## Princípios SOLID\n\nEste projeto aplica os princípios SOLID:\n\n### 1. Single Responsibility Principle (SRP)\nCada classe tem uma única responsabilidade. Por exemplo:\n- `ProductController`: Responsável apenas por lidar com requisições HTTP.\n- `CreateProductCaseImpl`: Responsável apenas pela lógica de criação de produtos.\n- `ProductRepositoryGateway`: Responsável apenas pelo acesso aos dados de produtos.\n\n### 2. Open/Closed Principle (OCP)\nAs classes são abertas para extensão, mas fechadas para modificação. Por exemplo:\n- Novas funcionalidades podem ser adicionadas criando novas implementações de interfaces existentes.\n\n### 3. Liskov Substitution Principle (LSP)\nAs implementações de interfaces podem ser substituídas sem afetar o comportamento do programa. Por exemplo:\n- Qualquer implementação de `ProductGateway` pode ser usada sem afetar o comportamento dos casos de uso.\n\n### 4. Interface Segregation Principle (ISP)\nInterfaces específicas são melhores que uma interface geral. Por exemplo:\n- `CreateProductCase` e `FindProductsCase` são interfaces separadas em vez de uma única interface `ProductCase`.\n\n### 5. Dependency Inversion Principle (DIP)\nMódulos de alto nível não dependem de módulos de baixo nível. Ambos dependem de abstrações. Por exemplo:\n- Os casos de uso dependem de interfaces `Gateway`, não de implementações concretas.\n- A injeção de dependências é usada para fornecer implementações concretas.\n\n## Estrutura do Projeto\n\n```\nsrc/\n├── main/\n│   ├── java/\n│   │   └── dev/\n│   │       └── phquartin/\n│   │           └── storesalescleanapi/\n│   │               ├── core/\n│   │               │   ├── domain/          # Entidades de domínio\n│   │               │   ├── enums/           # Enumerações\n│   │               │   ├── gateway/         # Interfaces de gateway (ports)\n│   │               │   └── usecases/        # Casos de uso\n│   │               │       ├── category/    # Casos de uso para categorias\n│   │               │       └── product/     # Casos de uso para produtos\n│   │               └── infra/\n│   │                   ├── configuration/   # Configurações\n│   │                   ├── exception/       # Tratamento de exceções\n│   │                   ├── gateway/         # Implementações de gateway\n│   │                   ├── mapper/          # Mapeadores\n│   │                   ├── persistence/     # Entidades e repositórios JPA\n│   │                   └── presentation/    # Controllers, requests e responses\n│   └── resources/\n│       ├── application.properties          # Configurações da aplicação\n│       └── db/\n│           └── migration/                  # Migrações Flyway\n└── test/                                   # Testes\n```\n\n## Como Executar\n\n### Pré-requisitos\n- Java 17+\n- Docker e Docker Compose\n- Maven\n\n### Passos para Execução\n\n1. Clone o repositório:\n   ```\n   git clone https://github.com/phquartin/StoreSalesCleanApi.git\n   cd StoreSalesCleanApi\n   ```\n\n2. Configure a variável de ambiente para a senha do MySQL:\n   ```\n   export MYSQL_ROOT_PASSWORD=sua_senha\n   ```\n\n3. Inicie o banco de dados MySQL:\n   ```\n   docker-compose up -d\n   ```\n\n4. Execute a aplicação:\n   ```\n   ./mvnw spring-boot:run\n   ```\n\n5. A API estará disponível em:\n   ```\n   http://localhost:8080\n   ```\n\n## Endpoints da API\n\n### Produtos\n- `GET /products` - Listar todos os produtos\n- `POST /products` - Criar um novo produto\n\n### Categorias\n- `GET /categories` - Listar todas as categorias\n- `POST /categories` - Criar uma nova categoria\n\n## Tecnologias Utilizadas\n\n- Spring Boot\n- Spring Data JPA\n- MySQL\n- Flyway Migration\n- Docker\n- Maven\n\n## Melhorias em produção\n\n- Entidade de Vendas\n- Outros metodos Http como DELETE\n- DockerFile","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphquartin%2Fstoresalescleanapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphquartin%2Fstoresalescleanapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphquartin%2Fstoresalescleanapi/lists"}