API REST completa para e-commerce de bebidas con autenticación JWT, verificación de mayoría de edad, gestión de carritos de compra, sistema de pedidos e integración con Mercado Pago.
- 🌐 API Base: https://web-production-62840.up.railway.app
- 📚 Documentación Interactiva (Swagger): https://web-production-62840.up.railway.app/docs
- 📖 Documentación Alternativa (ReDoc): https://web-production-62840.up.railway.app/redoc
- ✅ Sistema de autenticación JWT (JSON Web Tokens)
- ✅ Roles de usuario (Cliente / Administrador)
- ✅ Verificación de mayoría de edad (18+)
- ✅ Rate limiting con Redis (protección contra abuso)
- ✅ Hashing seguro de contraseñas con bcrypt
- ✅ CRUD completo de productos (bebidas)
- ✅ Sistema de Combos y Packs promocionales
- ✅ Categorías: Cerveza, Vinos, Licores, Gaseosas, Combos
- ✅ Filtrado por categoría, precio y búsqueda por texto
- ✅ Cálculo automático de precios (Costo + % Ganancia)
- ✅ Información detallada (ABV, volumen, origen)
- ✅ Carrito de compras persistente por usuario
- ✅ Gestión de stock en tiempo real
- ✅ Sistema de pedidos con estados
- ✅ Historial de compras
- ✅ Direcciones de envío
- ✅ Integración completa con Mercado Pago
- ✅ Generación de preferencias de pago
- ✅ Webhooks para notificaciones en tiempo real
- ✅ Actualización automática de estados de pedido
- ✅ Control de stock automático (Individual y Combos)
- ✅ Alertas de bajo inventario
- ✅ Reposición de stock simplificada
- ✅ Gestión de Roles de Usuario (Admin/Cliente)
- ✅ Modo Mantenimiento con IP permitidas
- ✅ Configuración de Costos de Envío y Retiro en Sucursal
- ✅ Configuración de Redes Sociales y Métodos de Pago
- ✅ Sistema de auditoría de eventos críticos
- ✅ Logging estructurado
- ✅ Registro de inicios de sesión y operaciones
- FastAPI - Framework web moderno y rápido para Python
- Python 3.13 - Lenguaje de programación
- Motor - Driver asíncrono para MongoDB
- Pydantic - Validación de datos
- python-jose - Manejo de JWT
- passlib + bcrypt - Hashing de contraseñas
- MongoDB Atlas - Base de datos NoSQL en la nube
- Redis Cloud - Caché y rate limiting
- Mercado Pago API - Procesamiento de pagos
- Railway - Plataforma de deploy
- Docker & Docker Compose - Containerización
- Uvicorn - Servidor ASGI
- Git - Control de versiones
POST /auth/register- Registrar nuevo usuarioPOST /auth/token- Iniciar sesión (OAuth2)GET /auth/me- Obtener usuario actual
POST /age-verification/verify-age- Verificar mayoría de edadGET /age-verification/minimum-age- Obtener edad mínima requerida
GET /products/- Listar productos (con filtros)GET /products/{id}- Obtener producto específicoPOST /products/- Crear producto [Admin]PUT /products/{id}- Actualizar producto [Admin]DELETE /products/{id}- Eliminar producto [Admin]
GET /combos/- Listar combos activosGET /combos/{id}- Detalles de comboPOST /combos/- Crear combo [Admin]PUT /combos/{id}- Editar combo [Admin]DELETE /combos/{id}- Eliminar combo [Admin]
GET /cart/- Ver carrito actualPOST /cart/add- Agregar producto al carritoPUT /cart/update- Actualizar cantidad de productoDELETE /cart/remove/{product_id}- Eliminar producto del carritoDELETE /cart/clear- Vaciar carrito
POST /orders/- Crear pedido desde carritoGET /orders/me- Ver mis pedidosGET /orders/{id}- Ver detalles de un pedidoPUT /orders/admin/{id}/status- Actualizar estado [Admin]
POST /payments/create-preference/{order_id}- Crear preferencia de Mercado PagoPOST /payments/webhook- Webhook de Mercado Pago
PUT /inventory/{product_id}/stock- Establecer stockPUT /inventory/{product_id}/stock/add- Reponer stockGET /inventory/alerts- Ver alertas de bajo stock
GET /admin/users- Gestión de usuarios y rolesGET/PUT /admin/system-status- Modo mantenimientoGET/PUT /admin/shipping-settings- Configuración de envíosGET/PUT /admin/payment-settings- Redes sociales y pagos
Endpoint: POST /auth/register
{
"username": "juanperez",
"email": "juan@example.com",
"password": "MiPassword123!",
"birth_date": "1995-06-15T00:00:00.000Z"
}Endpoint: POST /auth/token
Form Data:
- username:
juan@example.com - password:
MiPassword123!
Respuesta:
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "bearer"
}Endpoint: POST /age-verification/verify-age
Headers:
Authorization: Bearer {tu_token}
Endpoint: GET /products/?category=Cerveza&min_price=500&max_price=1500
Endpoint: POST /cart/add
{
"product_id": "507f1f77bcf86cd799439011",
"quantity": 2
}Endpoint: POST /orders/
{
"items": [
{
"product_id": "507f1f77bcf86cd799439011",
"quantity": 2
}
],
"shipping_address": {
"street": "Av. San Martín 1234",
"city": "San Miguel de Tucumán",
"state": "Tucumán",
"zip_code": "4000",
"country": "Argentina"
}
}- JWT Tokens: Expiración configurable (30 minutos por defecto)
- Rate Limiting: 5 intentos de login por minuto por IP
- Hashing: Bcrypt para contraseñas
- Validación: Pydantic para validación de entrada
- CORS: Configurado para producción
- Variables de Entorno: Credenciales nunca en código
curl -X POST "https://web-production-62840.up.railway.app/auth/register" \
-H "Content-Type: application/json" \
-d '{
"username": "testuser",
"email": "test@example.com",
"password": "Test123!",
"birth_date": "1995-01-01T00:00:00.000Z"
}'curl -X POST "https://web-production-62840.up.railway.app/auth/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=test@example.com&password=Test123!"curl -X GET "https://web-production-62840.up.railway.app/products/"curl -X POST "https://web-production-62840.up.railway.app/products/" \
-H "Authorization: Bearer {tu_token}" \
-H "Content-Type: application/json" \
-d '{
"name": "Cerveza Corona 355ml",
"description": "Cerveza mexicana importada",
"price": 1200.00,
"category": "Cerveza",
"stock": 50,
"abv": 4.5,
"volume_ml": 355,
"origin": "México"
}'- Cervezas: Quilmes, Corona, Heineken, artesanales
- Vinos: Tintos, Blancos, Rosados
- Licores: Whisky, Vodka, Gin, Ron, Tequila
- Gaseosas: Coca-Cola, Sprite, Fanta
- Otros: Jugos, aguas saborizadas, energizantes
- Registrarse e iniciar sesión
- Verificar mayoría de edad
- Buscar y ver productos
- Agregar productos al carrito
- Crear pedidos
- Ver historial de pedidos
- Todo lo que puede hacer un cliente
- Crear, editar y eliminar productos
- Gestionar inventario
- Ver alertas de stock
- Actualizar estados de pedidos
- Acceso a panel administrativo
- Python 3.13+
- MongoDB
- Redis
- Git
- Clonar el repositorio
git clone https://github.com/tu-usuario/escabi-api.git
cd escabi-api- Crear entorno virtual
python -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activate- Instalar dependencias
pip install -r requirements.txt- Configurar variables de entorno
Crear archivo .env:
SECRET_KEY=tu-secret-key-super-segura
DATABASE_URL=mongodb://localhost:27017
DATABASE_NAME=bebidas_db
REDIS_URL=redis://localhost:6379
ENV=development
MERCADOPAGO_ACCESS_TOKEN=tu-token
WEBHOOK_BASE_URL=http://localhost:8000- Iniciar con Docker Compose (recomendado)
docker compose upO manualmente:
python main.py- Acceder a la documentación
Abrir navegador en: http://localhost:8000/docs
# Construir imagen
docker build -t escabi-api .
# Ejecutar contenedor
docker run -p 8000:8000 --env-file .env escabi-api- Sistema de reseñas y calificaciones
- Recomendaciones personalizadas
- Sistema de cupones y descuentos
- Notificaciones por email
- Programa de fidelización
- API de analytics
- Integración con más pasarelas de pago
- App móvil
Las contribuciones son bienvenidas. Por favor:
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
Luciano Lagoria
- GitHub: @Dybalux
- LinkedIn: Tu Perfil
- Email: lagorialuciano@gmail.com
- FastAPI por su excelente framework
¿Encontraste un bug o tenés una sugerencia?
- 🐛 Reportar bug: Issues
- 💡 Sugerir feature: Issues
- 📧 Contacto: lagorialuciano@gmail.com
⭐ Si te gustó el proyecto, dale una estrella en GitHub ⭐
Hecho con ❤️ y ☕ en Argentina 🇦🇷