{"id":21685724,"url":"https://github.com/aron-alvarenga/ponto-de-vendas-pdv-api-java-spring-boot","last_synced_at":"2026-04-10T13:32:23.155Z","repository":{"id":168020280,"uuid":"549828864","full_name":"aron-alvarenga/Ponto-De-Vendas-PDV-API-Java-Spring-Boot","owner":"aron-alvarenga","description":"API de ponto de vendas desenvolvida em Java utilizando Spring Boot Framework e MySQL.","archived":false,"fork":false,"pushed_at":"2026-01-17T15:12:32.000Z","size":139,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-18T00:36:19.400Z","etag":null,"topics":["api","crud-api","java","many-to-one","maven","mysql","mysql-database","one-to-many","portfolio","portfolio-project","spring","spring-boot"],"latest_commit_sha":null,"homepage":"","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/aron-alvarenga.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}},"created_at":"2022-10-11T19:59:43.000Z","updated_at":"2026-01-17T15:12:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"299a56d1-f4d2-4203-855f-3f25e463a283","html_url":"https://github.com/aron-alvarenga/Ponto-De-Vendas-PDV-API-Java-Spring-Boot","commit_stats":null,"previous_names":["aron-alvarenga/ponto-de-vendas-pdv-api-java-spring-boot"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aron-alvarenga/Ponto-De-Vendas-PDV-API-Java-Spring-Boot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aron-alvarenga%2FPonto-De-Vendas-PDV-API-Java-Spring-Boot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aron-alvarenga%2FPonto-De-Vendas-PDV-API-Java-Spring-Boot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aron-alvarenga%2FPonto-De-Vendas-PDV-API-Java-Spring-Boot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aron-alvarenga%2FPonto-De-Vendas-PDV-API-Java-Spring-Boot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aron-alvarenga","download_url":"https://codeload.github.com/aron-alvarenga/Ponto-De-Vendas-PDV-API-Java-Spring-Boot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aron-alvarenga%2FPonto-De-Vendas-PDV-API-Java-Spring-Boot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31645284,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T07:40:12.752Z","status":"ssl_error","status_checked_at":"2026-04-10T07:40:11.664Z","response_time":98,"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":["api","crud-api","java","many-to-one","maven","mysql","mysql-database","one-to-many","portfolio","portfolio-project","spring","spring-boot"],"created_at":"2024-11-25T16:22:42.910Z","updated_at":"2026-04-10T13:32:23.148Z","avatar_url":"https://github.com/aron-alvarenga.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ponto de Vendas (PDV) API em Spring Boot\r\n\r\n[![Java](https://img.shields.io/badge/Java-21-orange.svg)](https://www.oracle.com/java/)\r\n[![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.2.0-brightgreen.svg)](https://spring.io/projects/spring-boot)\r\n[![Maven](https://img.shields.io/badge/Apache%20Maven-C71A36.svg)](https://maven.apache.org/)\r\n\r\nAPI de ponto de vendas desenvolvida em Java utilizando Spring Boot Framework. Utiliza H2 (banco em memória) para desenvolvimento e MySQL para produção.\r\n\r\n## Sobre o Projeto\r\n\r\nO **PDV (Ponto de Vendas)** é uma API REST desenvolvida em Spring Boot para gerenciamento de vendas, produtos e usuários. O sistema permite realizar vendas, controlar estoque de produtos e gerenciar usuários do sistema.\r\n\r\n### Funcionalidades\r\n\r\n- **Gestão de Produtos**: Cadastro, consulta, atualização e controle de estoque\r\n- **Gestão de Vendas**: Criação de vendas com múltiplos itens\r\n- **Gestão de Usuários**: Cadastro e controle de usuários do sistema\r\n- **Controle de Estoque**: Atualização automática do estoque ao realizar vendas\r\n\r\n## Stack Tecnológica\r\n\r\n### Core\r\n- **Java 21** - Linguagem de programação\r\n- **Spring Boot 3.2.0** - Framework principal\r\n- **Spring Data JPA** - Persistência de dados\r\n- **Spring Web** - Criação de aplicações web RESTful\r\n- **Bean Validation** - Validação de dados\r\n- **Lombok** - Redução de código boilerplate\r\n\r\n### Banco de Dados\r\n- **H2 Database** - Banco em memória para desenvolvimento\r\n- **MySQL** - SGBD para produção\r\n\r\n### Ferramentas\r\n- **Apache Maven** - Gerenciamento de dependências e build\r\n- **Apache Tomcat** - Container Web (embarcado no Spring Boot)\r\n- **Postman** - Plataforma para teste de endpoints da API\r\n- **IntelliJ IDEA** - IDE recomendada\r\n\r\n## Estrutura do Projeto\r\n\r\n```\r\npdv/\r\n├── src/\r\n│   ├── main/\r\n│   │   ├── java/com/aronalvarenga/pdv/\r\n│   │   │   ├── controller/      # Controladores REST\r\n│   │   │   ├── dto/             # Data Transfer Objects\r\n│   │   │   ├── entity/          # Entidades JPA\r\n│   │   │   ├── repository/      # Repositórios Spring Data JPA\r\n│   │   │   ├── service/         # Lógica de negócio\r\n│   │   │   ├── exceptions/      # Exceções customizadas\r\n│   │   │   └── PdvApplication.java\r\n│   │   └── resources/\r\n│   │       └── application.properties\r\n│   └── test/\r\n└── pom.xml\r\n```\r\n\r\n## Diagrama de Banco de Dados\r\n\r\n```mermaid\r\nerDiagram\r\n    USER ||--o{ SALE : \"realiza\"\r\n    SALE ||--|{ ITEM_SALE : \"contém\"\r\n    PRODUCT ||--o{ ITEM_SALE : \"vendido em\"\r\n    \r\n    USER {\r\n        bigint id PK\r\n        varchar name\r\n        boolean isEnable\r\n    }\r\n    \r\n    SALE {\r\n        bigint id PK\r\n        date sale_date\r\n        bigint user_id FK\r\n    }\r\n    \r\n    PRODUCT {\r\n        bigint id PK\r\n        varchar description\r\n        decimal price\r\n        int quantity\r\n    }\r\n    \r\n    ITEM_SALE {\r\n        bigint id PK\r\n        bigint sale_id FK\r\n        bigint product_id FK\r\n        int quantity\r\n    }\r\n```\r\n\r\n### Relacionamentos\r\n\r\n- **User → Sale**: Um usuário pode realizar múltiplas vendas (1:N)\r\n- **Sale → ItemSale**: Uma venda pode conter múltiplos itens (1:N)\r\n- **Product → ItemSale**: Um produto pode aparecer em múltiplos itens de venda (1:N)\r\n\r\n## Como Executar\r\n\r\n### Pré-requisitos\r\n\r\n- **Java 21** instalado\r\n- **Maven** instalado (ou use o wrapper do projeto)\r\n\r\n### Executando Localmente\r\n\r\n1. **Clone o repositório**\r\n   ```bash\r\n   git clone https://github.com/seu-usuario/Ponto-De-Vendas-PDV-API-Java-Spring-Boot.git\r\n   cd Ponto-De-Vendas-PDV-API-Java-Spring-Boot\r\n   ```\r\n\r\n2. **Execute a aplicação**\r\n   ```bash\r\n   mvn spring-boot:run\r\n   ```\r\n\r\n3. **Acesse a aplicação**\r\n   - API: `http://localhost:8080`\r\n   - Console H2: `http://localhost:8080/h2-console`\r\n\r\n### Acessar o Console H2\r\n\r\nApós iniciar a aplicação, o console H2 estará disponível em:\r\n\r\n1. Acesse: `http://localhost:8080/h2-console`\r\n2. Preencha os campos com:\r\n   - **JDBC URL**: `jdbc:h2:mem:pdv_db` (⚠️ use exatamente esta URL, sem espaços)\r\n   - **User Name**: `sa`\r\n   - **Password**: (deixe em branco)\r\n3. Clique em \"Connect\"\r\n\r\n**Importante**: Certifique-se de usar exatamente `jdbc:h2:mem:pdv_db` na URL. Se você usar um caminho de arquivo (como `C:/Users/...`), o H2 tentará criar um banco em arquivo e não encontrará o banco em memória.\r\n\r\n### Configuração para Produção (MySQL)\r\n\r\nPara usar MySQL em produção, configure o `application.properties`:\r\n\r\n```properties\r\nspring.datasource.url=jdbc:mysql://localhost:3306/pdv_db\r\nspring.datasource.username=seu_usuario\r\nspring.datasource.password=sua_senha\r\nspring.jpa.hibernate.ddl-auto=update\r\nspring.jpa.show-sql=false\r\n```\r\n\r\n## Endpoints da API\r\n\r\n### Produtos\r\n- `GET /product` - Lista todos os produtos\r\n- `GET /product/{id}` - Busca produto por ID\r\n- `POST /product` - Cria um novo produto\r\n- `PUT /product/{id}` - Atualiza um produto\r\n- `DELETE /product/{id}` - Remove um produto\r\n\r\n### Vendas\r\n- `GET /sale` - Lista todas as vendas\r\n- `GET /sale/{id}` - Busca venda por ID\r\n- `POST /sale` - Cria uma nova venda\r\n\r\n### Usuários\r\n- `GET /user` - Lista todos os usuários\r\n- `GET /user/{id}` - Busca usuário por ID\r\n- `POST /user` - Cria um novo usuário\r\n- `PUT /user/{id}` - Atualiza um usuário\r\n- `DELETE /user/{id}` - Remove um usuário\r\n\r\n## Testes\r\n\r\n### Executando Testes\r\n\r\n```bash\r\nmvn test\r\n```\r\n\r\n## Novo Direcionamento\r\n\r\n* **Domínio mais forte**: venda com status (DRAFT/CONFIRMED/CANCELED), regras (estoque não pode ficar negativo), consistência transacional e idempotência.\r\n* **API profissional**: DTOs, validação, paginação, filtros, erros padronizados (Problem Details), logs estruturados.\r\n* **Segurança + auditoria**: autenticação (JWT), RBAC (ADMIN/CAIXA/GERENTE), trilha de auditoria (createdAt/createdBy).\r\n* **Qualidade**: testes (unit + integração), migrations (Flyway), Swagger/OpenAPI, Docker Compose (MySQL).\r\n\r\n## Contribuindo\r\n\r\nContribuições são bem-vindas! Sinta-se à vontade para abrir issues e pull requests.\r\n\r\n## Licença\r\n\r\nEste projeto está sob a licença MIT.\r\n\r\n## Autor\r\n\r\n**Aron Alvarenga**\r\n\r\n- GitHub: [@aron-alvarenga](https://github.com/aron-alvarenga)\r\n- LinkedIn: [Aron Alvarenga](https://www.linkedin.com/in/aron-alvarenga)\r\n\r\n---\r\n\r\n**Nota**: Este projeto utiliza H2 em memória por padrão para facilitar o desenvolvimento. Para produção, configure o MySQL conforme as instruções acima.\r\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faron-alvarenga%2Fponto-de-vendas-pdv-api-java-spring-boot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faron-alvarenga%2Fponto-de-vendas-pdv-api-java-spring-boot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faron-alvarenga%2Fponto-de-vendas-pdv-api-java-spring-boot/lists"}