{"id":29081974,"url":"https://github.com/acrisiopb/api_park_2025","last_synced_at":"2026-05-07T02:34:14.097Z","repository":{"id":300017245,"uuid":"992251869","full_name":"acrisiopb/API_PARK_2025","owner":"acrisiopb","description":"Projeto -  API |  Estacionamento - Controle de Entrada e Saída de veículos + Cobrança + Taxa","archived":false,"fork":false,"pushed_at":"2025-06-26T17:58:55.000Z","size":791,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-26T18:26:37.801Z","etag":null,"topics":["java","mysql","postman","spring-boot","sql"],"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/acrisiopb.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-05-28T21:24:29.000Z","updated_at":"2025-06-26T17:58:59.000Z","dependencies_parsed_at":"2025-06-19T13:24:59.921Z","dependency_job_id":"58765dba-0215-4484-b9ae-baac63462fea","html_url":"https://github.com/acrisiopb/API_PARK_2025","commit_stats":null,"previous_names":["acrisiopb/api_park_2025"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/acrisiopb/API_PARK_2025","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acrisiopb%2FAPI_PARK_2025","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acrisiopb%2FAPI_PARK_2025/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acrisiopb%2FAPI_PARK_2025/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acrisiopb%2FAPI_PARK_2025/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/acrisiopb","download_url":"https://codeload.github.com/acrisiopb/API_PARK_2025/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acrisiopb%2FAPI_PARK_2025/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262324906,"owners_count":23293749,"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","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":["java","mysql","postman","spring-boot","sql"],"created_at":"2025-06-27T20:01:36.383Z","updated_at":"2026-05-07T02:34:14.092Z","avatar_url":"https://github.com/acrisiopb.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"## API PARK 2025 — Estacionamento\n\n- Controle de entrada e saída de veículos com cálculo de cobranças e taxas.\n- Autenticação via JWT, perfis `ADMIN` e `CLIENTE`, documentação OpenAPI.\n\n### Tecnologias\n- Java 17, Spring Boot 3.5\n- Spring Security, JPA/Hibernate\n- PostgreSQL/MySQL (produção), H2 (testes)\n- Maven (com `mvnw`), Docker\n- Springdoc OpenAPI/Swagger\n\n### Pré‑requisitos\n- `Java 17` instalado\n- Banco de dados disponível (PostgreSQL recomendado)\n- Variáveis de ambiente para o banco configuradas:\n  - `DB_URL`, `DB_USERNAME`, `DB_PASSWORD` conforme `src/main/resources/application.properties:13`\n  - Exemplo (PowerShell):\n    - `$env:DB_URL=\"jdbc:postgresql://localhost:5432/demo_park\"`\n    - `$env:DB_USERNAME=\"postgres\"`\n    - `$env:DB_PASSWORD=\"postgres\"`\n\n### Configuração\n- Por padrão usa PostgreSQL via `application.properties` (`spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect`).\n- Para MySQL, ajuste propriedades de datasource e dialeto e forneça credenciais válidas.\n- Endpoints públicos e protegidos são definidos em `src/main/java/com/apirest/demo_park_api/config/SpringSecurityConfig.java:22`.\n\n### Execução local\n- Windows: `.\\mvnw.cmd spring-boot:run`\n- Linux/macOS: `./mvnw spring-boot:run`\n- Maven global: `mvn spring-boot:run`\n- Aplicação sobe em `http://localhost:8080`.\n\n### Testes\n- `.\\mvnw.cmd test`\n- Testes de integração utilizam H2 e `WebTestClient` sob `src/test/java`.\n\n### Documentação\n- Swagger UI local: `http://localhost:8080/docs-demo-park-api.html` (configurado em `src/main/resources/application.properties:29`)\n- OpenAPI JSON: `http://localhost:8080/docs-demo-park-api`\n- Deploy (Render): `https://deploy-api-park.onrender.com/swagger-ui/index.html#/`\n\n### Fluxo de autenticação\n- Criar usuário: `POST /api/v1/usuarios` (`src/main/java/.../UsuarioController.java:51`)\n- Autenticar: `POST /api/v1/auth` com body `{\"username\":\"email\",\"password\":\"senha\"}` (`src/main/java/.../AutenticacaoController.java:50`)\n- Header para chamadas autenticadas: `Authorization: Bearer \u003ctoken\u003e`\n- Healthcheck público: `GET /api/v1/ping` (`src/main/java/.../AutenticacaoController.java:74`)\n\n### Endpoints principais\n- Usuários\n  - `POST /api/v1/usuarios` (criar)\n  - `GET /api/v1/usuarios/{id}` (ADMIN ou dono) (`src/main/java/.../UsuarioController.java:65`)\n  - `PATCH /api/v1/usuarios/{id}` (alterar senha, dono) (`src/main/java/.../UsuarioController.java:95`)\n  - `GET /api/v1/usuarios` (listar, ADMIN) (`src/main/java/.../UsuarioController.java:114`)\n- Clientes\n  - `POST /api/v1/clientes` (CLIENTE) (`src/main/java/.../ClienteController.java:61`)\n  - `GET /api/v1/clientes/{id}` (ADMIN) (`src/main/java/.../ClienteController.java:82`)\n  - `GET /api/v1/clientes/detalhes` (CLIENTE) (`src/main/java/.../ClienteController.java:112`)\n- Vagas\n  - `POST /api/v1/vagas` (ADMIN) (`src/main/java/.../VagaController.java:41`)\n- Estacionamentos\n  - `POST /api/v1/estacionamentos/check-in` (ADMIN) (`src/main/java/.../EstacionamentoController.java:71`)\n  - `GET /api/v1/estacionamentos/check-in/{recibo}` (ADMIN/CLIENTE) (`src/main/java/.../EstacionamentoController.java:91`)\n  - `PUT /api/v1/estacionamentos/check-out/{recibo}` (ADMIN) (`src/main/java/.../EstacionamentoController.java:110`)\n  - `GET /api/v1/estacionamentos/cpf/{cpf}` (ADMIN, paginação) (`src/main/java/.../EstacionamentoController.java:132`)\n  - `GET /api/v1/estacionamentos` (CLIENTE, paginação) (`src/main/java/.../EstacionamentoController.java:141`)\n  - `GET /api/v1/estacionamentos/relatorio` (CLIENTE, PDF) (`src/main/java/.../EstacionamentoController.java:151`)\n\n### Docker\n- Build: `docker build -t demo-park-api .`\n- Run: `docker run -p 8080:8080 -e DB_URL=\"jdbc:postgresql://host:5432/demo_park\" -e DB_USERNAME=\"user\" -e DB_PASSWORD=\"pass\" demo-park-api`\n- O container lê as variáveis `DB_URL`, `DB_USERNAME`, `DB_PASSWORD` em tempo de execução.\n\n### Banco de dados\n- Scripts de criação/carga (MySQL) em `SQL/`.\n- Para testes, há scripts em `src/test/resources/sql/` e configuração H2 em `src/test/resources/application.properties:1`.\n\n### Observações de segurança\n- O JWT é emitido e validado pelo utilitário em `src/main/java/com/apirest/demo_park_api/jwt/JwtUtils.java:41`. Altere a chave de assinatura antes de produção.\n\n### Galeria\n| Item | Preview |\n| --- | --- |\n| Diagrama BD | ![Diagrama](https://github.com/acrisiopb/API_PARK_2025/blob/main/IMG%20GIT/Diagrama%20-%20BD.png?raw=true) |\n| Postman Report 1 | ![Postman Report 1](https://github.com/acrisiopb/API_PARK_2025/blob/main/IMG%20GIT/REPORT%202.png?raw=true) |\n| Postman Report 2 | ![Postman Report 2](https://github.com/acrisiopb/API_PARK_2025/blob/main/IMG%20GIT/Report.png?raw=true) |\n| Swagger UI | ![Swagger UI](https://github.com/acrisiopb/API_PARK_2025/blob/main/IMG%20GIT/Swagger.png?raw=true) |\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Facrisiopb%2Fapi_park_2025","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Facrisiopb%2Fapi_park_2025","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Facrisiopb%2Fapi_park_2025/lists"}