Uma API RESTful para gerenciamento de pedidos de uma pizzaria/restaurante, desenvolvida usando Spring Boot.
Fornello API é um sistema de gerenciamento para pizzaria que permite:
- Cadastro e autenticação de usuários
- Gerenciamento de produtos e variações de produtos
- Processamento de pedidos
- Gerenciamento de entregas
- Controle de status dos pedidos
- Java 17
- Spring Boot 3.4.4
- Spring Data JPA
- Spring Security
- JWT para autenticação
- H2 Database (em memória)
- Lombok
- MapStruct
- Maven
fornello-api/
├── src/
│ ├── main/
│ │ ├── java/pedroleonez/fornello/api/
│ │ │ ├── config/ # Configurações do Spring
│ │ │ ├── controllers/ # Controladores REST
│ │ │ ├── cors/ # Configuração de CORS
│ │ │ ├── dtos/ # Objetos de Transferência de Dados
│ │ │ │ ├── input/ # DTOs para entrada de dados
│ │ │ │ └── output/ # DTOs para saída de dados
│ │ │ ├── entities/ # Entidades JPA
│ │ │ ├── enums/ # Enumeradores
│ │ │ ├── exceptions/ # Classes de exceção
│ │ │ ├── mappers/ # Mapeadores (MapStruct)
│ │ │ ├── repositories/ # Repositórios JPA
│ │ │ ├── security/ # Configurações de segurança
│ │ │ └── services/ # Serviços da aplicação
│ │ └── resources/
│ │ ├── application.properties # Configurações da aplicação
│ │ ├── messages.properties # Mensagens de internacionalização
│ │ └── db/migration/ # Scripts de migração
│ └── test/ # Testes da aplicação
└── pom.xml # Configurações do Maven
- JDK 17
- Maven
- Clone o repositório
git clone https://github.com/pedroleonez/fornello-api.git
cd fornello-api- Compile o projeto
mvn clean install- Execute a aplicação
mvn spring-boot:runA API estará disponível em http://localhost:8080
A API utiliza autenticação baseada em JWT (JSON Web Token). Para acessar endpoints protegidos, é necessário incluir o token no cabeçalho de autorização:
Authorization: Bearer {seu-token}
POST /api/products- Criar um novo produtoGET /api/products- Listar todos os produtosGET /api/products/{productId}- Obter um produto específicoPATCH /api/products/{productId}- Atualizar parcialmente um produtoDELETE /api/products/{productId}- Excluir um produtoPOST /api/products/{productId}/variation- Adicionar uma variação de produtoPUT /api/products/{productId}/variation/{productVariationId}- Atualizar uma variação de produtoDELETE /api/products/{productId}/variation/{productVariationId}- Excluir uma variação de produto
POST /api/orders- Criar um novo pedidoGET /api/orders- Listar todos os pedidos (paginados)GET /api/orders/{orderId}- Obter um pedido específicoGET /api/orders/status/{statusName}- Listar pedidos por status (paginados)PATCH /api/orders/{orderId}/status- Atualizar status de um pedidoDELETE /api/orders/{orderId}- Excluir um pedido
- Endpoints para registro e autenticação de usuários
- Usuários podem ter diferentes papéis (CUSTOMER, ADMIN)
- Clientes só podem acessar seus próprios pedidos
- Administradores podem acessar e gerenciar todos os pedidos
- Pedidos podem ter diferentes status (PENDENTE, EM_PREPARO, SAIU_PARA_ENTREGA, ENTREGUE, CANCELADO)
- Produtos podem ter múltiplas variações (ex: tamanhos diferentes de pizza)
A aplicação utiliza o banco de dados H2 em memória para desenvolvimento e testes.
Console H2 disponível em: http://localhost:8080/h2-console
- JDBC URL:
jdbc:h2:mem:testdb - Usuário: sa
- Senha: (vazio)
- Autenticação baseada em JWT
- Proteção contra CSRF
- Configuração de CORS
Para contribuir com este projeto:
- Faça um fork do repositório
- Crie uma branch para sua feature
- Envie suas alterações com commits descritivos
- Faça um pull request
Este projeto está sob a licença MIT - veja o arquivo LICENSE para detalhes.
Desenvolvido por Pedro Leonez