O OrchidAPI é uma API REST desenvolvida para catalogar coleções de orquídeas, ideal para uso pessoal ou pequenos cultivadores. O sistema permite gerenciar o acervo completo de plantas, organizando-as por dados botânicos (espécies), localização física (ambientes), histórico visual (imagens) e categorização dinâmica por meio de etiquetas (tags).
- Gerenciamento do Acervo: Cadastro completo de orquídeas individuais com controle de estado de saúde (
SAUDAVEL,EM_OBSERVACAO,DOENTE,EM_RECUPERACAO), data de aquisição e observações personalizadas. - Classificação Botânica: Vinculação das plantas a espécies com dados taxonômicos fixos (origem, nome científico único, família).
- Organização por Ambiente: Mapeamento físico de onde as plantas estão localizadas (ex: estufa, varanda, jardim), facilitando o manejo e a busca rápida.
- Galeria de Fotos: Suporte ao registro cronológico de imagens de cada orquídea para acompanhamento de evolução e floração.
- Categorização Flexível (Tags): Sistema de etiquetas muitos-para-muitos para agrupar plantas por características sazonais ou de interesse (ex: "Floração Roxa", "Miniatura", "Presente de Aniversário").
- Busca Avançada: Filtragem dinâmica de orquídeas por espécie, ambiente e tags associadas.
| Componente | Tecnologia | Papel no Projeto |
|---|---|---|
| Framework Base | Spring Boot 3.x | Ecossistema principal da aplicação |
| Persistência / ORM | Spring Data JPA + Hibernate | Abstração de banco de dados e mapeamento de entidades |
| Banco de Dados | PostgreSQL | Banco de dados relacional para produção/desenvolvimento |
| Versionamento de Banco | Flyway | Gerenciamento de evoluções do esquema via migrações SQL |
| Validação | Bean Validation (Jakarta) | Validação rigorosa dos dados de entrada (@NotNull, @Size, etc.) |
| Documentação | Springdoc OpenAPI (Swagger UI) | Geração automática da documentação dos endpoints |
| Testes | JUnit 5 + MockMvc | Testes de integração e validação das camadas de controle |
Para garantir a manutenibilidade, escalabilidade e clareza do código, o projeto adota:
- Arquitetura em Camadas: Divisão clássica entre
Controller(camada de apresentação/HTTP),Service(regras de negócio) eRepository(acesso a dados). - Uso de DTOs (Data Transfer Objects): Isolamento total das entidades de domínio. A API recebe e expõe objetos específicos de Request/Response, evitando vazamento de dados internos.
- Tratamento Global de Exceções: Implementação de
@ControllerAdvicepara capturar falhas de negócio ou validações e retornar respostas JSON padronizadas e amigáveis ao cliente. - Imutabilidade e Segurança: Validação de payloads HTTP logo na entrada da aplicação via Bean Validation.
O banco de dados está modelado de forma relacional com as seguintes conexões:
- Espécie
1 : NOrquídea — Uma espécie abriga várias plantas do acervo. - Ambiente
1 : NOrquídea — Um espaço físico agrupa várias plantas. - Orquídea
1 : NImagem — Uma planta pode ter histórico de várias fotos. - Orquídea
N : MTag — Múltiplas orquídeas podem compartilhar várias etiquetas customizadas.
Abaixo estão os endpoints fundamentais além dos CRUDs convencionais (GET, POST, PUT, DELETE) de cada recurso:
GET /orquideas?especieId=&ambienteId=&tagId=— Consulta avançada com filtros dinâmicos.GET /orquideas/{id}/imagens— Retorna o histórico de imagens de uma planta específica.
POST /orquideas/{id}/tags/{tagId}— Associa uma tag existente a uma orquídea.DELETE /orquideas/{id}/tags/{tagId}— Remove a associação de uma tag de uma orquídea.
- Java 21 ou superior instalado.
- Maven 3.8+ instalado (ou utilizar o wrapper
./mvnw). - Instância do PostgreSQL ativa.
1. Clonar o repositório:
git clone https://github.com/seu-usuario/orchid-api.git
cd orchid-api2. Configurar as credenciais do Banco de Dados:
Abra o arquivo src/main/resources/application.properties e ajuste as configurações conforme o seu ambiente:
spring.datasource.url=jdbc:postgresql://localhost:5432/nome_do_seu_banco
spring.datasource.username=seu_usuario
spring.datasource.password=sua_senha
# O Flyway cuidará da criação das tabelas automaticamente ao rodar
spring.flyway.enabled=true3. Compilar e buildar a aplicação:
mvn clean install4. Executar a aplicação:
mvn spring-boot:runCom a aplicação em execução, você pode visualizar interativamente todos os endpoints disponíveis, parâmetros aceitos e esquemas de dados acessando a interface do Swagger UI:
http://localhost:8080/swagger-ui.html