API RESTful para gerenciamento de estoque e vendas de uma rede de farmácias
Desenvolvida com Java e Spring Boot, seguindo arquitetura MVC, com autenticação segura via JWT, persistência de dados com PostgreSQL e publicada em ambiente de produção na Render.
Projeto desenvolvido durante o Bootcamp Java Full Stack da Generation Brasil 🚀
| Recurso | Link |
|---|---|
| 🔗 API | projeto-final-bloco-02-llyf.onrender.com |
| 📘 Swagger UI | /swagger-ui/index.html |
| 🗄️ Banco de Dados | PostgreSQL (Neon.tech) |
| ☁️ Hospedagem | Render |
⚠️ Observação: como a aplicação está hospedada no plano gratuito do Render, o primeiro acesso pode levar entre 50 e 60 segundos devido ao modo de inatividade (sleep mode).
| Tecnologia | Descrição |
|---|---|
| ☕ Java 17 | Linguagem principal da aplicação |
| 🍃 Spring Boot 3 | Framework backend |
| 🔒 Spring Security | Segurança da aplicação |
| 🔑 JWT | Autenticação via Bearer Token |
| 🗂️ Spring Data JPA | Persistência de dados |
| 🧩 Hibernate | ORM |
| 🐘 PostgreSQL | Banco de dados em produção |
| 🧪 H2 Database | Banco de dados para desenvolvimento |
| ✅ JUnit 5 | Testes unitários |
| ✅ Spring Boot Test | Testes da aplicação |
| 📄 SpringDoc OpenAPI | Documentação da API |
| 📘 Swagger UI | Interface para testes da API |
| 📦 Maven | Gerenciador de dependências |
| 🛠️ Insomnia | Testes dos endpoints |
- Cadastro de usuários
- Criptografia de senhas utilizando
BCryptPasswordEncoder - Login com geração de Token JWT
- Proteção das rotas da aplicação
- Listagem de usuários cadastrados
- CRUD completo
- Busca por ID
- Busca por nome (case insensitive)
- Relacionamento One-to-Many (1:N) com Produtos
- CRUD completo
- Controle de estoque
- Associação obrigatória com Categoria
- Associação obrigatória com Usuário responsável pelo cadastro
- Busca por ID
- Busca por nome (case insensitive)
O projeto utiliza os seguintes relacionamentos entre as entidades:
- Uma Categoria possui vários Produtos
- Um Produto pertence a uma Categoria
- Um Usuário pode cadastrar vários Produtos
- Um Produto pertence a um Usuário
Categoria
+----------------------+
| id |
| nome |
| descricao |
+----------------------+
|
1 |
|
N |
▼
Produto
+-----------------------+
| id |
| nome |
| descricao |
| quantidade |
| preco |
| categoria_id |
| usuario_id |
+-----------------------+
▲
N |
|
1 |
|
Usuario
+-----------------------+
| id |
| nome |
| usuario |
| senha |
| foto |
+-----------------------+
A API utiliza autenticação baseada em JWT (JSON Web Token).
Rotas Públicas
POST /usuarios/cadastrar
POST /usuarios/logar
Rotas Protegidas
Todas as demais rotas exigem um Bearer Token válido enviado no header da requisição.
| Método | Endpoint | Proteção |
|---|---|---|
POST |
/usuarios/cadastrar |
🌐 Público |
POST |
/usuarios/logar |
🌐 Público |
GET |
/usuarios/all |
🔒 Protegido |
| Método | Endpoint | Proteção |
|---|---|---|
GET |
/categorias |
🔒 Protegido |
GET |
/categorias/{id} |
🔒 Protegido |
GET |
/categorias/nome/{nome} |
🔒 Protegido |
POST |
/categorias |
🔒 Protegido |
PUT |
/categorias |
🔒 Protegido |
DELETE |
/categorias/{id} |
🔒 Protegido |
| Método | Endpoint | Proteção |
|---|---|---|
GET |
/produtos |
🔒 Protegido |
GET |
/produtos/{id} |
🔒 Protegido |
GET |
/produtos/nome/{nome} |
🔒 Protegido |
POST |
/produtos |
🔒 Protegido |
PUT |
/produtos |
🔒 Protegido |
DELETE |
/produtos/{id} |
🔒 Protegido |
Cadastrar Usuário
{
"nome": "João Victor Ribeiro",
"usuario": "joao@email.com",
"senha": "12345678",
"foto": "https://..."
}Login
{
"usuario": "joao@email.com",
"senha": "12345678"
}Criar Categoria
{
"nome": "Medicamentos",
"descricao": "Remédios, analgésicos e antitérmicos"
}Criar Produto
{
"nome": "Doril 500mg",
"descricao": "Analgésico para alívio de dores",
"quantidade": 100,
"preco": 14.90,
"categoria": {
"id": 1
},
"usuario": {
"id": 1
}
}A aplicação possui testes desenvolvidos utilizando:
- JUnit
- Spring Boot Test
Os testes garantem o correto funcionamento das regras de negócio, autenticação, persistência de dados e dos principais endpoints da API.
- Java 17 ou superior
- Maven instalado (ou Maven Wrapper)
- Uma IDE de sua preferência (STS, Eclipse, IntelliJ IDEA ou VS Code)
git clone https://github.com/jvribe/projeto-final-bloco-02.gitcd projeto-final-bloco-02No arquivo src/main/resources/application.properties, configure:
spring.profiles.active=devmvn spring-boot:runOu execute a classe principal do Spring Boot diretamente pela sua IDE.
| Ambiente | URL |
|---|---|
| 💻 Local | http://localhost:8080/swagger-ui/index.html |
| ☁️ Produção | projeto-final-bloco-02-llyf.onrender.com/swagger-ui |