API REST desenvolvida com Spring Boot para gerenciamento de livros, autores e editoras.
🔴 🟩🟩 __/\\\\\\\\\\\__/\\\\\\\\\\\\\\\_____/\\\\\\\\\\\__________/\\\\\\\\\_
🟩 🟩 _\/////\\\///__\/\\\///////////____/\\\/////////\\\_____/\\\////////__
🟩 🟩🟩 _____\/\\\_____\/\\\______________\//\\\______\///____/\\\/___________
🟩 🟩 _____\/\\\_____\/\\\\\\\\\\\_______\////\\\__________/\\\_____________
_____\/\\\_____\/\\\///////___________\////\\\______\/\\\_____________
_____\/\\\_____\/\\\_____________________\////\\\___\//\\\____________
_____\/\\\_____\/\\\______________/\\\______\//\\\___\///\\\__________
__/\\\\\\\\\\\_\/\\\_____________\///\\\\\\\\\\\/______\////\\\\\\\\\_
_\///////////__\///________________\///////////___________\/////////__
-
Acessar trecho do terminal populando dados →
-
Acessar trecho do terminal testando as endpoints →
Aluno: ANDRE GUILHERME BARRETO DE FARIAS
Matrícula: 202111701842
Disciplina: SWB | Serviços Web
Curso: CTDS [3010]/FLN
- 1. 📋 Descrição
- 2. 🎯 Objetivo
- 3. 🏗️ Modelo de Dados
- 4. 📡 Endpoints da API
- 5. 🛠️ Tecnologias Utilizadas
- 6. 📂 Estrutura do Projeto
- 7. ⚙️ Configuração
- 8. 🚀 Como Executar
- 9. 📦 Build e Distribuição
- 10. 🔒 Extras
- 11. 📝 Entrega da Atividade
- 12. 🔗 Links Úteis
- 13. 📜 Licença
- 14. ☕ Autor @andreriffen
Este projeto implementa uma API REST completa para gerenciar um sistema de livros, incluindo operações CRUD (Create, Read, Update, Delete) para três entidades principais:
- Livros: Gerenciamento de livros com cálculo automático de preço de venda
- Autores: Cadastro e controle de autores
- Editoras: Registro e gerenciamento de editoras
Desenvolver uma API REST robusta utilizando Spring Boot, seguindo boas práticas de desenvolvimento como:
- Arquitetura em camadas (Controller, Service, Repository, Model)
- DTOs para transferência de dados
- Tratamento de exceções personalizado
- Validação de dados
- Documentação com Swagger
- Uso de Lombok para redução de código boilerplate
| Atributo | Tipo | Descrição |
|---|---|---|
| id | Integer | Identificador único |
| nome | String | Nome do autor |
| String | E-mail do autor | |
| nacionalidade | String | Nacionalidade do autor |
| Atributo | Tipo | Descrição |
|---|---|---|
| id | Integer | Identificador único |
| nome | String | Nome da editora |
| String | E-mail da editora | |
| cidade | String | Cidade da editora |
| estado | String | Estado da editora |
| Atributo | Tipo | Descrição |
|---|---|---|
| id | Integer | Identificador único |
| titulo | String | Título do livro |
| isbn | String | Código ISBN |
| precoDeCusto | BigDecimal | Preço de custo |
| precoDeVenda | BigDecimal | Preço de venda (calculado) |
| margemDeLucro | BigDecimal | Margem de lucro |
| dataDeCadastro | LocalDate | Data de cadastro |
| status | StatusLivro | Status do livro (enum) |
| autor | Autor | Autor do livro (ManyToOne) |
| editora | Editora | Editora do livro (ManyToOne) |
Enum StatusLivro:
DISPONIVELESGOTADOBLOQUEADO
Método de Negócio:
calcularPrecoVenda(): Calcula o preço de venda baseado em:precoDeVenda = precoDeCusto + (precoDeCusto * margemDeLucro)
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /autores |
Criar novo autor |
| GET | /autores/{id} |
Buscar autor por ID |
| GET | /autores |
Listar todos os autores |
| PUT | /autores/{id} |
Atualizar autor |
| DELETE | /autores/{id} |
Remover autor |
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /editoras |
Criar nova editora |
| GET | /editoras/{id} |
Buscar editora por ID |
| GET | /editoras |
Listar todas as editoras |
| PUT | /editoras/{id} |
Atualizar editora |
| DELETE | /editoras/{id} |
Remover editora |
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /livros |
Criar novo livro |
| GET | /livros/{id} |
Buscar livro por ID |
| GET | /livros |
Listar todos os livros |
| PUT | /livros/{id} |
Atualizar livro |
| DELETE | /livros/{id} |
Remover livro |
- Spring Boot: Framework principal
- Spring Data JPA: Persistência de dados
- Hibernate: ORM
- Lombok: Redução de código boilerplate
- Jakarta Bean Validation: Validação de dados
- ModelMapper: Conversão entre DTOs e entidades
- SpringDoc OpenAPI (Swagger): Documentação da API
- H2 Database ou MySQL: Banco de dados
- Maven: Gerenciamento de dependências
src/main/java/
├── model/ # Entidades JPA
│ ├── Autor.java
│ ├── Editora.java
│ ├── Livro.java
│ └── StatusLivro.java (enum)
├── repository/ # Interfaces JpaRepository
│ ├── AutorRepository.java
│ ├── EditoraRepository.java
│ └── LivroRepository.java
├── service/ # Lógica de negócio
│ ├── AutorService.java
│ ├── EditoraService.java
│ └── LivroService.java
├── controller/ # Endpoints REST
│ ├── AutorController.java
│ ├── EditoraController.java
│ └── LivroController.java
├── dto/ # Data Transfer Objects
│ └── ModelMapperConfig.java
└── exception/ # Tratamento de exceções
└── GlobalExceptionHandler.java
spring.datasource.url=jdbc:h2:mem:api_livros
spring.datasource.driverClassName=org.h2.Driver
spring.h2.console.enabled=true
spring.jpa.hibernate.ddl-auto=updatespring.datasource.url=jdbc:mysql://localhost:3306/api_livros
spring.datasource.username=seu_usuario
spring.datasource.password=sua_senha
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect- Clone o repositório
- Configure o banco de dados no
application.properties(H2 já configurado por padrão) - Execute o projeto:
./mvnw spring-boot:run
- Acesse a documentação Swagger em:
http://localhost:8080/swagger-ui/index.html
Popular banco com dados iniciais:
chmod +x populate-data.sh
./populate-data.shExecutar suite completa de testes:
chmod +x test-api.sh
./test-api.shPara gerar o arquivo JAR executável:
./mvnw clean packageO arquivo será gerado em: target/api-livros-0.0.1-SNAPSHOT.jar
Para executar o JAR:
java -jar target/api-livros-0.0.1-SNAPSHOT.jar- Spring Security: Implementação de segurança básica (desafio extra)
- Documentação de implantação: Processo de deploy da aplicação
A entrega deve conter:
- Projeto completo compactado
- Script SQL do banco de dados (se usar MySQL)
- Documento com screenshots das requisições aos endpoints e explicações dos resultados
- Instruções de Execução - Guia passo a passo para executar o projeto
- Repositório GitHub - Código fonte completo (opcional)
Este projeto está licenciado sob a Licença MIT.
- 2025 ©️ - Andre Riffen | @andreriffen (Github)