{"id":21685706,"url":"https://github.com/aron-alvarenga/projeto-crypto-api-java-spring-boot","last_synced_at":"2026-04-08T22:32:05.017Z","repository":{"id":60523650,"uuid":"543293403","full_name":"aron-alvarenga/Projeto-Crypto-API-Java-Spring-Boot","owner":"aron-alvarenga","description":"API simulando uma carteira de criptomoedas, envolvendo todas as operações de CRUD (Create, Read, Update e Delete).","archived":false,"fork":false,"pushed_at":"2026-01-19T00:31:13.000Z","size":31,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-19T10:27:22.086Z","etag":null,"topics":["api","backend-api","crud-api","h2-database","java","maven","mysql","portfolio","portfolio-project","spring","spring-boot","springboot"],"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}},"created_at":"2022-09-29T19:46:16.000Z","updated_at":"2026-01-19T00:31:18.000Z","dependencies_parsed_at":"2023-01-19T01:00:33.765Z","dependency_job_id":null,"html_url":"https://github.com/aron-alvarenga/Projeto-Crypto-API-Java-Spring-Boot","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aron-alvarenga/Projeto-Crypto-API-Java-Spring-Boot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aron-alvarenga%2FProjeto-Crypto-API-Java-Spring-Boot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aron-alvarenga%2FProjeto-Crypto-API-Java-Spring-Boot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aron-alvarenga%2FProjeto-Crypto-API-Java-Spring-Boot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aron-alvarenga%2FProjeto-Crypto-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/Projeto-Crypto-API-Java-Spring-Boot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aron-alvarenga%2FProjeto-Crypto-API-Java-Spring-Boot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31577444,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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","backend-api","crud-api","h2-database","java","maven","mysql","portfolio","portfolio-project","spring","spring-boot","springboot"],"created_at":"2024-11-25T16:22:36.392Z","updated_at":"2026-04-08T22:32:05.012Z","avatar_url":"https://github.com/aron-alvarenga.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Crypto API\r\n\r\n\u003e **API REST** - Uma API completa para gestão de carteira de criptomoedas demonstrando boas práticas de desenvolvimento 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[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\r\n\r\n## Sobre o Projeto\r\n\r\nO **Crypto API** é uma API REST desenvolvida em Spring Boot para simular uma carteira de criptomoedas, permitindo realizar todas as operações CRUD (Create, Read, Update e Delete) sobre transações de criptomoedas. Este projeto demonstra boas práticas de desenvolvimento backend, arquitetura limpa e uso de tecnologias modernas do ecossistema Spring.\r\n\r\n### Objetivos\r\n\r\n- Demonstrar implementação de **API REST** completa com Spring Boot\r\n- Implementar operações CRUD completas sobre transações de criptomoedas\r\n- Aplicar boas práticas de desenvolvimento (validações, tratamento de erros, estrutura modular)\r\n- Servir como **portfólio técnico** demonstrando competências em desenvolvimento backend\r\n\r\n## Arquitetura\r\n\r\n### Estrutura do Projeto\r\n\r\nO projeto segue uma arquitetura em camadas tradicional, organizada por responsabilidades:\r\n\r\n```\r\ncryptoapp/\r\n├── controller/          # Camada de apresentação (REST endpoints)\r\n├── entity/             # Entidades JPA (modelo de domínio)\r\n├── repository/         # Camada de acesso a dados (JPA Repository)\r\n├── dto/                # Data Transfer Objects\r\n└── CryptoApplication.java\r\n```\r\n\r\n### Camadas\r\n\r\n- **Controller**: Expõe endpoints REST para operações sobre criptomoedas\r\n- **Entity**: Modelo de domínio mapeado para o banco de dados\r\n- **Repository**: Abstração de acesso a dados usando JPA\r\n- **DTO**: Objetos de transferência de dados para agregações e consultas\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** - Construção de APIs REST\r\n\r\n### Banco de Dados\r\n- **H2 Database** - Banco em memória para desenvolvimento (padrão)\r\n- **MySQL** - Banco de dados relacional para produção (configurável)\r\n\r\n### Modos de Execução\r\n\r\nO projeto foi projetado para rodar **sem necessidade de infraestrutura complexa**, oferecendo dois modos de execução:\r\n\r\n- **Desenvolvimento**: H2 em memória para rodar rapidamente sem configuração\r\n- **Produção**: MySQL para ambiente de produção (configuração opcional)\r\n\r\nEsta abordagem demonstra flexibilidade: desenvolvimento rápido sem complexidade desnecessária, com opção de usar banco de dados robusto quando necessário.\r\n\r\n### Ferramentas\r\n- **Apache Maven** - Gerenciamento de dependências e build\r\n- **H2 Console** - Interface web para visualização do banco de dados durante desenvolvimento\r\n\r\n## Estrutura do Projeto\r\n\r\n```\r\nProjeto-Crypto-API-Java-Spring-Boot/\r\n├── src/\r\n│   ├── main/\r\n│   │   ├── java/com/aronalvarenga/cryptoapp/\r\n│   │   │   ├── controller/        # REST Controllers\r\n│   │   │   │   └── CoinController.java\r\n│   │   │   ├── entity/            # Entidades JPA\r\n│   │   │   │   └── Coin.java\r\n│   │   │   ├── repository/       # Repositórios JPA\r\n│   │   │   │   └── CoinRepository.java\r\n│   │   │   ├── dto/               # Data Transfer Objects\r\n│   │   │   │   └── CoinTransationDTO.java\r\n│   │   │   └── CryptoApplication.java\r\n│   │   └── resources/\r\n│   │       ├── application.properties\r\n│   │       └── data.sql           # Scripts de inicialização (se houver)\r\n│   └── test/\r\n│       └── java/com/aronalvarenga/cryptoapp/\r\n├── pom.xml\r\n└── README.md\r\n```\r\n\r\n## Como Executar\r\n\r\n### Pré-requisitos\r\n\r\n- **Java 21** ou superior\r\n- **Maven 3.6+** (ou use o wrapper: `./mvnw`)\r\n- **MySQL** (opcional, apenas se quiser usar MySQL ao invés de H2)\r\n\r\n### Executando Localmente\r\n\r\n1. **Clone o repositório**\r\n   ```bash\r\n   git clone https://github.com/aron-alvarenga/Projeto-Crypto-API-Java-Spring-Boot.git\r\n   cd Projeto-Crypto-API-Java-Spring-Boot\r\n   ```\r\n\r\n2. **Configure o banco de dados** (escolha uma opção)\r\n\r\n   **Opção A: H2 (recomendado para desenvolvimento rápido)**\r\n   - A aplicação usa H2 por padrão, sem necessidade de configuração adicional\r\n   - Ideal para desenvolvimento e testes rápidos\r\n   - Console H2 disponível em: `http://localhost:8080/h2-console`\r\n   \r\n   **Opção B: MySQL (para produção)**\r\n   - Crie um banco de dados MySQL chamado `cryptodb`\r\n   - Descomente as linhas de configuração MySQL no arquivo `application.properties`\r\n   - Comente ou remova as linhas de configuração H2\r\n   - Configure usuário e senha conforme necessário\r\n\r\n3. **Execute a aplicação**\r\n   ```bash\r\n   mvn spring-boot:run\r\n   ```\r\n   ou\r\n   ```bash\r\n   ./mvnw spring-boot:run  # Usando Maven wrapper\r\n   ```\r\n\r\n4. **Acesse a aplicação**\r\n   - API Base: `http://localhost:8080`\r\n   - H2 Console: `http://localhost:8080/h2-console` (quando usando H2)\r\n     - JDBC URL: `jdbc:h2:mem:cryptodb`\r\n     - Username: `sa`\r\n     - Password: (deixe em branco)\r\n\r\n## Endpoints da API\r\n\r\n### Base URL\r\n```\r\nhttp://localhost:8080/coin\r\n```\r\n\r\n### Operações Disponíveis\r\n\r\n#### 1. Listar todas as transações agregadas\r\n```http\r\nGET /coin\r\n```\r\n\r\n**Resposta:**\r\n```json\r\n[\r\n  {\r\n    \"name\": \"BITCOIN\",\r\n    \"quantity\": 1.5\r\n  },\r\n  {\r\n    \"name\": \"ETHEREUM\",\r\n    \"quantity\": 10.0\r\n  }\r\n]\r\n```\r\n\r\n#### 2. Buscar transações por nome da criptomoeda\r\n```http\r\nGET /coin/{name}\r\n```\r\n\r\n**Exemplo:**\r\n```http\r\nGET /coin/BITCOIN\r\n```\r\n\r\n**Resposta:**\r\n```json\r\n[\r\n  {\r\n    \"id\": 1,\r\n    \"name\": \"BITCOIN\",\r\n    \"price\": 50000.00,\r\n    \"quantity\": 1.0,\r\n    \"dateTime\": \"2024-01-15T10:30:00\"\r\n  }\r\n]\r\n```\r\n\r\n#### 3. Criar nova transação\r\n```http\r\nPOST /coin\r\nContent-Type: application/json\r\n```\r\n\r\n**Body:**\r\n```json\r\n{\r\n  \"name\": \"BITCOIN\",\r\n  \"price\": 50000.00,\r\n  \"quantity\": 0.5\r\n}\r\n```\r\n\r\n**Resposta:**\r\n```json\r\n{\r\n  \"id\": 1,\r\n  \"name\": \"BITCOIN\",\r\n  \"price\": 50000.00,\r\n  \"quantity\": 0.5,\r\n  \"dateTime\": \"2024-01-15T10:30:00\"\r\n}\r\n```\r\n\r\n#### 4. Atualizar transação existente\r\n```http\r\nPUT /coin\r\nContent-Type: application/json\r\n```\r\n\r\n**Body:**\r\n```json\r\n{\r\n  \"id\": 1,\r\n  \"name\": \"BITCOIN\",\r\n  \"price\": 51000.00,\r\n  \"quantity\": 0.5\r\n}\r\n```\r\n\r\n#### 5. Deletar transação\r\n```http\r\nDELETE /coin/{id}\r\n```\r\n\r\n**Exemplo:**\r\n```http\r\nDELETE /coin/1\r\n```\r\n\r\n## Modelo de Dados\r\n\r\n### Entidade Coin\r\n\r\n```java\r\n@Entity\r\n@Table(name = \"coin\")\r\npublic class Coin {\r\n    @Id\r\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\r\n    private int id;\r\n    \r\n    private String name;           // Nome da criptomoeda (ex: BITCOIN, ETHEREUM)\r\n    private BigDecimal price;      // Preço unitário da criptomoeda\r\n    private BigDecimal quantity;   // Quantidade da criptomoeda\r\n    private Timestamp dateTime;    // Data e hora da transação\r\n}\r\n```\r\n\r\n## Funcionalidades\r\n\r\n- [x] CRUD completo de transações de criptomoedas\r\n- [x] Agregação de transações por nome da criptomoeda\r\n- [x] Busca de transações por nome (com LIKE)\r\n- [x] Suporte a H2 (desenvolvimento) e MySQL (produção)\r\n- [x] Console H2 habilitado para visualização de dados\r\n- [x] Validações e tratamento de erros\r\n\r\n## Diferenciais Técnicos\r\n\r\n### Boas Práticas Implementadas\r\n\r\n- **Arquitetura em camadas** clara e organizada\r\n- **Separação de responsabilidades** (Controller, Repository, Entity)\r\n- **Uso de DTOs** para agregações e consultas específicas\r\n- **Configuração flexível** entre H2 e MySQL\r\n- **Tratamento de erros** com códigos HTTP apropriados\r\n- **JPA/Hibernate** para mapeamento objeto-relacional\r\n- **Timestamps automáticos** para rastreamento de transações\r\n\r\n## Testes\r\n\r\n### Executando Testes\r\n\r\n```bash\r\n# Todos os testes\r\nmvn test\r\n\r\n# Testes específicos\r\nmvn test -Dtest=CoinControllerTest\r\n```\r\n\r\n### Estratégia de Testes (planejado)\r\n\r\n- **Testes Unitários**: Lógica de negócio e validações\r\n- **Testes de Integração**: Endpoints REST e persistência\r\n- **Testes de Contrato**: Validação de DTOs e respostas\r\n\r\n## Documentação\r\n\r\n### Planejado\r\n\r\n- [ ] **API Documentation** (Swagger/OpenAPI)\r\n- [ ] **Postman Collection** para testes de API\r\n- [ ] **Diagramas** de arquitetura e fluxo de dados\r\n\r\n## Roadmap\r\n\r\n### v1.0 - MVP (Atual)\r\n- CRUD completo de transações\r\n- Suporte a H2 e MySQL\r\n- Agregações básicas\r\n\r\n### v1.1 - Melhorias\r\n- [ ] Validações de entrada mais robustas\r\n- [ ] Documentação Swagger/OpenAPI\r\n- [ ] Testes unitários e de integração\r\n- [ ] Tratamento de erros padronizado (Problem Details / RFC 7807)\r\n\r\n### v2.0 - Expansão\r\n- [ ] Autenticação e autorização (Spring Security)\r\n- [ ] Rate limiting\r\n- [ ] Cache de consultas frequentes\r\n- [ ] Logs estruturados\r\n- [ ] Métricas e observabilidade (Actuator)\r\n\r\n### v3.0 - Funcionalidades Avançadas\r\n- [ ] Integração com APIs de cotações em tempo real\r\n- [ ] Cálculo de lucro/prejuízo por transação\r\n- [ ] Relatórios e dashboards\r\n- [ ] Exportação de dados (CSV/Excel)\r\n\r\n## Novo Direcionamento\r\n* Hoje é CRUD de transações. Transformar em **carteira com visão de portfólio**:\r\n  * Posição atual por ativo, preço médio, PnL realizado/não realizado.\r\n  * **Integração externa** de preço (pode mockar provider ou usar client com fallback).\r\n  * Idempotência + importação (CSV) + eventos.\r\n  * Segurança (JWT) e multiusuário (carteira por usuário).\r\n\r\n## Contribuindo\r\n\r\nEste é um projeto de portfólio pessoal. Contribuiçõ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. Veja o arquivo [LICENSE](LICENSE) para mais detalhes.\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## Agradecimentos\r\n\r\n- Spring Framework e comunidade Spring\r\n- Todos os mantenedores das bibliotecas open-source utilizadas\r\n\r\n---\r\n\r\n**Nota**: Este projeto demonstra uma implementação prática e funcional de uma API REST usando Spring Boot, focando em simplicidade e boas práticas de desenvolvimento. O uso de H2 em desenvolvimento permite execução rápida sem necessidade de configuração de infraestrutura, enquanto a opção de MySQL garante robustez para ambientes de produção.\r\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faron-alvarenga%2Fprojeto-crypto-api-java-spring-boot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faron-alvarenga%2Fprojeto-crypto-api-java-spring-boot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faron-alvarenga%2Fprojeto-crypto-api-java-spring-boot/lists"}