A DinoChronos API é um ecossistema backend robusto que gerencia dados paleontológicos para uma experiência estilo "Pokédex". O projeto foi desenvolvido com foco em alta coesão e baixo acoplamento, utilizando padrões arquiteturais modernos para garantir uma base de código sustentável e profissional.
Embora este repositório seja focado no Backend, a estrutura de dados foi projetada para atender aos requisitos de uma interface visual exclusiva desenhada no Figma. O design utiliza conceitos de Glassmorphism e HUD Interfaces, onde cada dado técnico preenche componentes interativos.
Visualização do Card (Figma Design):
Exemplo de Retorno da API (JSON):
{
"id": 7,
"nome": "Tyrannosaurus rex",
"dieta": "CARNIVORO",
"periodo": "CRETACEO",
"tamanho": "12M",
"peso": "8T",
"descricao": "O Tyrannosaurus rex foi um dos maiores predadores terrestres já existentes...",
"imagemUrl": "https://imgur.com/a/87Gzngn"
}Nota de IHC: A separação entre a camada de apresentação e a API garante que os dados científicos (peso, tamanho, dieta) sejam servidos com integridade para a composição visual dos cards.
O projeto segue os princípios da Clean Architecture, separando responsabilidades em camadas:
- Domain: Regras de negócio puras, modelos (Entities) e contratos de repositório.
- Application: Implementação dos Casos de Uso (
UseCases) que orquestram o fluxo de dados. - Infrastructure: Camada técnica responsável pela persistência (JPA), configurações e drivers.
- Presentation: Interface REST com suporte a DTOs para garantir contratos de entrada e saída seguros.
- Linguagem: Java 21 (LTS)
- Framework: Spring Boot 4.0.5
- IDE: IntelliJ IDEA
- Persistência: Spring Data JPA / Hibernate
- Banco de Dados: PostgreSQL
- Documentação: Swagger (OpenAPI 3.0)
- Gerenciador de Dependências: Maven
-
Gestão de Dados: Cadastro e persistência de informações científicas via API.
-
Busca Inteligente: Consulta por nome com suporte a Case Insensitivity.
-
Filtros Geológicos: Listagem segmentada por períodos (Triássico, Jurássico, Cretáceo).
-
Listagem de Coleção: Recuperação total de registros via API REST.
-
Documentação Dinâmica: Interface Swagger integrada para teste e inserção de dados.
Para detalhes completos de schemas e códigos de retorno, consulte o Swagger UI. Abaixo, os principais pontos de entrada da API:
| Método | Endpoint | Descrição |
|---|---|---|
POST |
/api/dinos |
Cadastra um novo dinossauro na base científica. |
GET |
/api/dinos |
Lista todos os registros (suporta paginação). |
GET |
/api/dinos/{id} |
Busca detalhes completos de um espécime por ID. |
GET |
/api/dinos/nome/{nome} |
Filtro inteligente por nome (Case Insensitive). |
GET |
/api/dinos/periodo/{periodo} |
Filtra dinossauros por Era Geológica. |
O sistema segue um fluxo rigoroso de camadas para garantir que a regra de negócio permaneça isolada e protegida:
Client → Controller (Presentation) → UseCase (Application) → Gateway/Repository (Domain) → JPA/PostgreSQL (Infrastructure)
- Request: O JSON chega pelo Controller e é validado via DTO.
- Processamento: O UseCase executa a lógica e orquestra as entidades de domínio.
- Mapeamento: O Mapper converte os objetos de domínio para Entidades JPA.
- Persistência: O dado é gravado no PostgreSQL através da implementação da infraestrutura.
A organização das pastas reflete a separação de interesses e a independência de frameworks:
DinoChronos/
├── presentation/ # Entrada: Controllers REST e DTOs (Request/Response)
├── application/ # Orquestração: Casos de Uso (UseCases) e Mappers
├── domain/ # Core: Entidades, Enums e Interfaces de Repositório
└── infrastructure/ # Detalhes Técnicos: Configurações, JPA e PersistencePara garantir a escalabilidade e a manutenibilidade da DinoChronos API, foram aplicados os seguintes padrões e conceitos de engenharia:
- Clean Architecture: Organização modular que garante a independência de frameworks e foca na lógica de negócio (Core).
- Separation of Concerns (SoC): Divisão clara de responsabilidades entre as camadas de apresentação, aplicação, domínio e infraestrutura.
- DTO Pattern (Request/Response): Utilização de objetos de transferência para desacoplar as entidades do banco de dados das respostas da API, garantindo segurança e flexibilidade contratual.
- Mapper Pattern (Domain ↔ Entity): Isolamento das transformações de dados, garantindo que o domínio não conheça detalhes da persistência.
- Repository Pattern: Abstração da camada de dados, permitindo que a aplicação dependa de interfaces e facilite a inversão de dependência.
- SOLID: Aplicação dos princípios de Responsabilidade Única (SRP) e Inversão de Dependência (DIP) em toda a estrutura de camadas.
A integridade dos fluxos de negócio é validada através de testes unitários utilizando JUnit e Mockito, garantindo a confiabilidade da lógica de domínio e a estabilidade dos UseCases.
Acesse a interface de testes e a documentação dos endpoints através do link local:
http://localhost:8082/swagger-ui/index.html
- Pré-requisitos: JDK 21 e PostgreSQL configurado e rodando.
- Clone o repositório:
git clone https://github.com/stephanievitoria/api-dinochronos.git
- Configuração de Ambiente:
Renomeie o arquivo
application.properties.exampleparaapplication.propertiese insira suas credenciais locais de banco de dados. (Nota: Este arquivo está protegido via.gitignorepara sua segurança). - Execução:
mvn spring-boot:run
Desenvolvido por Stephanie Soares
✨ Foco em escalabilidade, integridade de dados e arquitetura profissional.