FastFood Service - Spring Boot 🍔🍟 Sistema backend de pedidos de comida rápida desarrollado con Spring Boot. Este proyecto incluye modelos de Cliente, Producto y Pedido; controladores REST para crear y consultar datos; y servicios con la lógica del negocio. Los datos se almacenan temporalmente en memoria con estructuras thread-safe (ConcurrentHashMap). 📋 Características
- Gestión de Clientes: Crear, consultar, actualizar y eliminar clientes
- Gestión de Productos: CRUD completo de productos con filtrado por categoría
- Gestión de Pedidos: Crear pedidos, consultar por cliente o estado, actualizar estado
- Almacenamiento en Memoria: Uso de ConcurrentHashMap para almacenamiento thread-safe
- API REST: Endpoints RESTful completos para todas las operaciones
- Validaciones: Validación de datos en la capa de servicios Tecnologías
- Java 17
- Spring Boot 3.1.5
- Maven
- Spring Web Estructura del Proyecto
src/main/java/com/fastfood/
├── FastFoodApplication.java # Clase principal
├── model/ # Modelos de dominio
│ ├── Cliente.java
│ ├── Producto.java
│ └── Pedido.java
├── repository/ # Capa de persistencia (en memoria)
│ ├── ClienteRepository.java
│ ├── ProductoRepository.java
│ └── PedidoRepository.java
├── service/ # Lógica de negocio
│ ├── ClienteService.java
│ ├── ProductoService.java
│ └── PedidoService.java
└── controller/ # Controladores REST
├── ClienteController.java
├── ProductoController.java
└── PedidoController.java
- Java 17 o superior
- Maven 3.6 o superior
- Clonar el repositorio:
git clone https://github.com/AvilaCamacho/FastFood-Service-Spring-Boot-.git
cd FastFood-Service-Spring-Boot-- Compilar el proyecto:
mvn clean install- Ejecutar la aplicación:
mvn spring-boot:runO alternativamente:
java -jar target/fastfood-service-1.0.0.jarLa aplicación estará disponible en: http://localhost:8080
| Método | Endpoint | Descripción |
|---|---|---|
| POST | /api/clientes |
Crear un nuevo cliente |
| GET | /api/clientes |
Obtener todos los clientes |
| GET | /api/clientes/{id} |
Obtener un cliente por ID |
| PUT | /api/clientes/{id} |
Actualizar un cliente |
| DELETE | /api/clientes/{id} |
Eliminar un cliente |
| Método | Endpoint | Descripción |
|---|---|---|
| POST | /api/productos |
Crear un nuevo producto |
| GET | /api/productos |
Obtener todos los productos |
| GET | /api/productos?categoria={categoria} |
Filtrar productos por categoría |
| GET | /api/productos/{id} |
Obtener un producto por ID |
| PUT | /api/productos/{id} |
Actualizar un producto |
| DELETE | /api/productos/{id} |
Eliminar un producto |
| Método | Endpoint | Descripción |
|---|---|---|
| POST | /api/pedidos |
Crear un nuevo pedido |
| GET | /api/pedidos |
Obtener todos los pedidos |
| GET | /api/pedidos?clienteId={id} |
Filtrar pedidos por cliente |
| GET | /api/pedidos?estado={estado} |
Filtrar pedidos por estado |
| GET | /api/pedidos/{id} |
Obtener un pedido por ID |
| PATCH | /api/pedidos/{id}/estado |
Actualizar estado de un pedido |
| DELETE | /api/pedidos/{id} |
Eliminar un pedido |
POST http://localhost:8080/api/clientes
{
"nombre": "Juan Pérez",
"email": "juan.perez@example.com",
"telefono": "555-1234"
}Respuesta:
{
"id": 1,
"nombre": "Juan Pérez",
"email": "juan.perez@example.com",
"telefono": "555-1234"
}POST http://localhost:8080/api/productos
{
"nombre": "Hamburguesa Clásica",
"descripcion": "Hamburguesa con carne, lechuga, tomate y queso",
"precio": 8.99,
"categoria": "HAMBURGUESAS"
}{
"nombre": "Papas Fritas",
"descripcion": "Papas fritas crujientes",
"precio": 3.50,
"categoria": "ACOMPAÑAMIENTOS"
}{
"nombre": "Coca Cola",
"descripcion": "Bebida gaseosa 500ml",
"precio": 2.50,
"categoria": "BEBIDAS"
}POST http://localhost:8080/api/pedidos
{
"clienteId": 1,
"productosIds": [1, 2, 3]
}Respuesta:
{
"id": 1,
"clienteId": 1,
"productosIds": [1, 2, 3],
"total": 14.99,
"estado": "PENDIENTE",
"fecha": "2024-01-15T10:30:00"
}GET http://localhost:8080/api/clientes
Respuesta:
[
{
"id": 1,
"nombre": "Juan Pérez",
"email": "juan.perez@example.com",
"telefono": "555-1234"
}
]GET http://localhost:8080/api/productos?categoria=HAMBURGUESAS
PATCH http://localhost:8080/api/pedidos/1/estado
{
"estado": "EN_PREPARACION"
}Estados permitidos:
PENDIENTEEN_PREPARACIONLISTOENTREGADOCANCELADO
GET http://localhost:8080/api/pedidos?clienteId=1
GET http://localhost:8080/api/pedidos?estado=PENDIENTE
{
"id": Long,
"nombre": String,
"email": String,
"telefono": String
}{
"id": Long,
"nombre": String,
"descripcion": String,
"precio": Double,
"categoria": String
}{
"id": Long,
"clienteId": Long,
"productosIds": List<Long>,
"total": Double,
"estado": String,
"fecha": LocalDateTime
}- Uso de
ConcurrentHashMappara almacenamiento de datos AtomicLongpara generación de IDs únicos- Operaciones atómicas garantizadas en entornos multi-hilo