https://github.com/jorkdev/hexagonal_cqrs_backend
Este proyecto es una implementación de un backend basado en la arquitectura hexagonal y utilizando el patrón de CQRS (Command Query Responsibility Segregation). La aplicación permite la gestión de usuarios, incluyendo funcionalidades de registro y consulta de información de usuario.
https://github.com/jorkdev/hexagonal_cqrs_backend
docker fastapi mysql python
Last synced: 5 months ago
JSON representation
Este proyecto es una implementación de un backend basado en la arquitectura hexagonal y utilizando el patrón de CQRS (Command Query Responsibility Segregation). La aplicación permite la gestión de usuarios, incluyendo funcionalidades de registro y consulta de información de usuario.
- Host: GitHub
- URL: https://github.com/jorkdev/hexagonal_cqrs_backend
- Owner: JorkDev
- License: mit
- Created: 2024-09-17T01:58:35.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-09-17T04:55:41.000Z (almost 2 years ago)
- Last Synced: 2025-02-12T21:49:11.726Z (over 1 year ago)
- Topics: docker, fastapi, mysql, python
- Language: Python
- Homepage:
- Size: 24.4 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Hexagonal CQRS Backend
## Descripción
Este proyecto tiene como objetivo la creación de un backend con una arquitectura basada en Hexagonal Architecture (Arquitectura Hexagonal) y el patrón CQRS (Command Query Responsibility Segregation). El objetivo es organizar el código de manera limpia y estructurada, separando las responsabilidades de comandos y consultas, así como la capa de dominio, infraestructura y aplicación.
## Tecnologías usadas:
- **FastAPI** - Framework de Python para el desarrollo de APIs rápidas y sencillas.
- **SQLAlchemy** - ORM (Object-Relational Mapper) para manejar interacciones con la base de datos.
- **MySQL** - Base de datos relacional utilizada para almacenar los datos.
- **Docker** - Para contenedores y despliegue.
- **Pydantic** - Para validaciones y estructuración de datos.
- **Uvicorn** - Servidor ASGI para la ejecución del backend.
## Requisitos previos:
- **Python 3.8+**
- **MySQL** instalado y configurado en tu máquina.
## Instrucciones de Configuración
### Opción 1: Usando Docker
1. Clona el repositorio del proyecto:
```bash
git clone https://github.com/JorkDev/hexagonal_cqrs_backend
cd hexagonal_cqrs_backend
```
2. Ejecuta el proyecto usando Docker Compose:
```bash
docker-compose up --build
```
3. La aplicación estará disponible en `http://localhost:8000`.
### Opción 2: Configuración manual
1. Clona el repositorio del proyecto:
```bash
git clone https://github.com/JorkDev/hexagonal_cqrs_backend
cd hexagonal_cqrs_backend
```
2. Crea y activa un entorno virtual (opcional pero recomendado):
```bash
python3 -m venv venv
source venv/bin/activate # En Windows: venv\Scriptsctivate
```
### Instalación de dependencias:
Primero, es necesario crear un entorno virtual en Python para aislar las dependencias del proyecto. Si no tienes `virtualenv` instalado, puedes instalarlo con:
```bash
pip install virtualenv
```
Luego, sigue los siguientes pasos:
```bash
# Crear entorno virtual
python -m venv venv
# Activar entorno virtual (Linux/Mac)
source venv/bin/activate
# Activar entorno virtual (Windows)
.env\Scriptsctivate
# Instalar las dependencias del proyecto
pip install -r requirements.txt
```
## Configuración de la Base de Datos:
1. Asegúrate de tener **MySQL** instalado en tu máquina.
2. Crea una base de datos llamada `hexagonal_cqrs_backend` con un usuario que tenga permisos de escritura y lectura.
```sql
CREATE DATABASE hexagonal_cqrs_backend;
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';
GRANT ALL PRIVILEGES ON hexagonal_cqrs_backend.* TO 'new_user'@'localhost';
FLUSH PRIVILEGES;
```
3. Verifica que la conexión a la base de datos en `main.py` esté correctamente configurada con los credenciales de MySQL:
```python
SQLALCHEMY_DATABASE_URL = "mysql+pymysql://new_user:new_password@localhost/hexagonal_cqrs_backend"
```
## Cómo correr el proyecto:
### Opción 1: Localmente
1. Asegúrate de tener activado tu entorno virtual y que las dependencias estén instaladas.
2. Inicia la aplicación con **Uvicorn**:
```bash
uvicorn main:app --reload
```
Esto levantará el servidor en `http://127.0.0.1:8000/`.
### Opción 2: Usando Docker
Si prefieres usar Docker para correr el proyecto, puedes usar el siguiente `Dockerfile` incluido en el proyecto.
Para construir la imagen de Docker:
```bash
docker build -t hexagonal_cqrs_backend .
```
Para correr el contenedor:
```bash
docker run -p 8000:8000 hexagonal_cqrs_backend
```
## Rutas implementadas
1. **POST /register/**
Registro de un nuevo usuario.
Parámetros:
- `username` (str)
- `email` (str)
Ejemplo de solicitud:
```bash
curl -X POST "http://127.0.0.1:8000/register/" -H "Content-Type: application/json" -d '{"username": "testuser", "email": "testuser@example.com"}'
```
2. **GET /user/{user_id}**
Obtener un usuario por su ID.
3. **GET /**
Página de bienvenida para verificar que el backend está funcionando.
## Cómo ejecutar los tests:
Se han implementado algunos tests básicos para validar las funcionalidades del backend. Para ejecutarlos, simplemente corre:
```bash
pytest
```
Esto ejecutará todos los tests dentro de la carpeta `tests/` y te mostrará los resultados.
## Conclusiones:
El proyecto ha sido desarrollado para demostrar los principios de la arquitectura hexagonal y CQRS. El uso de FastAPI y SQLAlchemy permite una implementación modular y escalable que facilita la separación de responsabilidades y la mantenibilidad del código. Este proyecto puede ser extendido para manejar más casos de uso como la autenticación, autorización, y otras operaciones de dominio complejas.
Agradecemos tu tiempo y estamos abiertos a cualquier consulta técnica adicional a través del contacto proporcionado.
