Fast Order es una API Rest que permite gestionar pedidos de productos de manera eficiente y
segura.
Está pensada para facilitar operaciones como registrar usuarios, gestionar productos y
realizar pedidos, todo en tipo real y de forma asincrónica.
- Desarrollar un sistema de gestión de pedidos con operaciones CRUD (Crear, Leer, Actualizar y Eliminar).
- Organizar el código utilizando la arquitectura MVC para lograr una organización clara del código.
- Proteger los datos y endpoints, integrando un mecanismo de seguridad con JWT y Spring Security.
- Asincronía y comunicación eficiente mediante Apache Kafka.
- Gestión de usuarios: registro, login y autenticación con JWT.
- Gestión de productos: operaciones CRUD para productos.
- Gestión de pedidos: creación, modificación y consulta de pedidos.
- Notificaciones asincrónicas de cambios en los pedidos mediante Kafka.
- Spring Boot: Framework principal para el desarrollo del backend.
- JPA (Hibernate): Mapeo objeto-relacional para la persistencia de datos.
- Apache Kafka: Comunicación asincrónica y notificaciones.
- Spring Security y JWT: Autenticación y autorización seguras.
- PostgreSQL: Motor de base de datos.
- Postman: Testing y documentación de endpoints.
- Swagger / Open API: Documentación de endpoints.
El proyecto sigue una estructura organizada por capas:
- Controladores: Manejan la lógica de las peticiones HTTP.
- Servicios: Contienen la lógica de negocio.
- Repositorios: Administran la persistencia de datos.
fast-order/
├── src/
│ ├── main/
│ │ ├── java
│ │ │ └── fast_order/
│ │ │ ├── controller/
│ │ │ ├── repository/
│ │ │ └── service/
│ │ └── resources/
│ └── test/
├── README.md
├── .env.demo
├── .gitignore
└── pom.xml
Entidad role
.
Campo | Tipo | Descripción |
---|---|---|
id | UUID | Identificador único |
role_name | Enum (RoleType) | Nombre del rol |
description | String | Descripción del rol |
Entidad user
.
Campo | Tipo | Descripción |
---|---|---|
id | UUID | Identificador único |
name | String | Nombre completo |
String | Correo electrónico | |
password | String | Contraseña de usuario |
sign_up_date | Date | Fecha de registro |
total_spent | Double | Total de gastos |
role | Role (RoleEntity) | Rol del usuario |
Entidad product
.
Campo | Tipo | Descripción |
---|---|---|
id | UUID | Identificador único |
name | String | Nombre del producto |
stock | String | Número de existencias |
price | Double | Precio del producto |
description | String | Detalles del producto |
Entidad order
.
Campo | Tipo | Descripción |
---|---|---|
id | UUID | Identificador único |
amount | Integer | Cantidad de productos |
user | User(UserEntity) | Identificador del usuario |
product | Product(ProductEntity) | Identificador del producto |
status | Enum(OrderStatus) | Estado del pedido |
created_at | Date | Fecha de creación |
Entidad notification
.
Campo | Tipo | Descripción |
---|---|---|
id | UUID | Identificador único |
message | String | Mensaje de notificación |
order | Order(OrderEntity) | Identificador de la orden |
created_at | Date | Fecha de creación |
-
Clonar repositorio
git clone https://github.com/puriihuaman/fast-order.git cd fast-order
-
Crear base de datos y esquema en PostgreSQL
- Crear la base de datos en local:
CREATE DATABASE db_name WITH OWNER = postgres ENCODING = 'UTF8';
- Crear el esquema:
CREATE SCHEMA schema_name;
- Crear la base de datos en local:
-
Tener instalado Apache Kafka
Descargar Apache Kafka
Abrir una terminal y ejecutar los siguientes comandos en ventas distintas.- Iniciar el servidor de Zookeeper:
.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties
- Iniciar el servidor de Kafka:
.\bin\windows\kafka-server-start.bat .\config\server.properties
- Iniciar el servidor de Zookeeper:
-
Configurar variables de entorno
📄 Crear archivo
.env
con las siguientes variables de entorno (revisar el archivo.env.demo
):# Configuración de la base de datos SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/db_name?currentSchema=schema_name SPRING_DATASOURCE_USERNAME=your_user SPRING_DATASOURCE_PASSWORD=your_password # Seguridad SECURITY_USER_NAME=admin SECURITY_USER_PASSWORD=admin # JWT SECRET_KEY=62d84588dd8e4b359... TIME_EXPIRATION=86400000 # KAFKA KAFKA_TOPIC_NAME=fast-order-topic KAFKA_TOPIC_GROUP=kafka-fast-order-group
-
Ejecutar la aplicación.
mvn spring-boot:run
-
Probar la API
- Autenticación desde Postman:
POST http://localhost:8080/api/auth/login
- Documentación Swagger (en el navegador):
http://localhost:8080/swagger-ui.html
- Autenticación desde Postman:
Note
Para más información de como consumir la API, ver el siguiente archivo Manual de usuario.
Este es un proyecto de la comunidad Bytes Colaborativos. Si deseas aportar:
- Crea un issue para sugerir mejoras.
- Abre un pull request con tu propuesta.
- Código fuente: https://github.com/puriihuaman/fast-order
¿Quieres unirte o seguir las iniciativas de Bytes Colaborativos?
- Twitch: Bytes Colaborativos
- Discord: Bytes Colaborativos
Autor: Pedro Purihuaman
- GitHub: https://github.com/puriihuaman
- LinkedIn: https://www.linkedin.com/in/pedropurihuaman/
- Código fuente: https://github.com/puriihuaman/fast-order