Skip to content

fuegoaustral/ticketera

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

785 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🎫 Ticketera de FA

Sistema de venta de tickets para eventos de Fuego Austral πŸ”₯

DocumentaciΓ³n de dominio y reglas de negocio (casos de uso, modelos, integraciones): ver la carpeta docs/.

Python Django AWS Lambda Zappa

πŸ“‹ Índice

πŸš€ CaracterΓ­sticas

  • 🎟️ GestiΓ³n de eventos - Crear y administrar eventos de manera sencilla
  • πŸ’³ Pagos integrados - MercadoPago checkout online e Instore (QR/Postnet) en caja v2
  • πŸͺ Caja v2 - MΓΊltiples puntos de venta por evento, stock unificado, reportes
  • πŸ† Logros - Insignias desbloqueables segΓΊn historial de compras
  • πŸ” AutenticaciΓ³n - Login con Google OAuth2
  • πŸ“§ Notificaciones - Sistema de emails automΓ‘ticos
  • ☁️ Deploy automΓ‘tico - CI/CD con GitHub Actions
  • 🐍 Python 3.13 - Última versiΓ³n de Python con mejoras de rendimiento

πŸ› οΈ Desarrollo Local

πŸ“‹ Requisitos Previos

  • PostgreSQL (v16.8 en producciΓ³n, v15.6+ en desarrollo. En cualquier momento migramos todo a 17) 🐘
  • Python 3.13 (ΓΊltima versiΓ³n) 🐍
  • Git para clonar el repositorio πŸ“¦

βš™οΈ ConfiguraciΓ³n del Entorno

πŸ”§ Variables de Entorno

Crea un archivo .env basado en el template:

cp env.example .env

πŸ“ Configura las variables de base de datos en tu archivo .env:

  • DB_HOST - Host de tu base de datos PostgreSQL
  • DB_USER - Usuario de la base de datos
  • DB_DATABASE - Nombre de la base de datos
  • DB_PASSWORD - ContraseΓ±a de la base de datos

🐍 Configuración de Python

  1. Crear entorno virtual 🌐
python3.13 -m venv venv
source venv/bin/activate

πŸ’‘ Tip: Para salir del entorno virtual ejecuta deactivate

  1. Instalar dependencias πŸ“¦
(venv)$ pip install -r requirements.txt
(venv)$ pip install -r requirements-dev.txt
  1. Configurar settings locales βš™οΈ
(venv)$ cp deprepagos/local_settings.py.example deprepagos/local_settings.py

πŸ—„οΈ Base de Datos Local

  1. Iniciar PostgreSQL πŸš€
# macOS
brew services start postgresql@17

# Ubuntu/Debian
sudo systemctl start postgresql
  1. Crear base de datos πŸ—οΈ
(venv)$ createdb deprepagos_development
  1. Aplicar migraciones πŸ”„
(venv)$ python manage.py migrate
  1. Crear usuario administrador πŸ‘€
(venv)$ python manage.py createsuperuser

πŸ”„ MigraciΓ³n de Base de Datos

Si necesitas migrar datos desde PostgreSQL 15 (producciΓ³n) a PostgreSQL 17 (local), usa nuestro script automatizado:

πŸ“‹ Proceso de MigraciΓ³n

  1. Configurar variables de entorno en tu archivo .env:

    DB_HOST=tu_host_de_produccion
    DB_USER=tu_usuario
    DB_DATABASE=tu_database
    DB_PASSWORD=tu_password
  2. Ejecutar migraciΓ³n completa:

    ./migrate_db.sh all
  3. O ejecutar paso a paso:

    ./migrate_db.sh dump      # Hacer dump desde producciΓ³n
    ./migrate_db.sh create    # Crear nuevo schema
    ./migrate_db.sh restore   # Restaurar datos

🎯 Opciones del Script

  • dump - Hacer dump desde PostgreSQL 15 (producciΓ³n)
  • create - Crear nuevo schema en PostgreSQL 17 (local)
  • restore - Restaurar dump en el nuevo schema
  • all - Ejecutar todo el proceso completo
  • help - Mostrar ayuda

βš™οΈ Configurar Django para Nuevo Schema

DespuΓ©s de la migraciΓ³n, actualiza tu local_settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'tu_usuario',
        'PASSWORD': 'tu_password',
        'HOST': 'localhost',
        'PORT': '5432',
        'OPTIONS': {
            'options': '-c search_path=ticketera_new,public'
        }
    }
}

πŸ’‘ Tip: El script crea un schema llamado ticketera_new para mantener los datos separados del schema public

πŸ”— Integraciones Externas

πŸ’³ MercadoPago

  1. Crear usuario de prueba en MercadoPago πŸ§ͺ

  2. Configurar variables:

    • MERCADOPAGO_PUBLIC_KEY
    • MERCADOPAGO_ACCESS_TOKEN
    • MERCADOPAGO_WEBHOOK_SECRET
    • MERCADOPAGO_COLLECTOR_USER_ID (caja v2: stores/POS MP Instore)
  3. Configurar webhook apuntando a {tu_url_local}/webhooks/mercadopago πŸ”—

🌐 Para exponer tu servidor local: Usa Cloudflare Tunnel o ngrok

πŸ” Google OAuth2

  1. Crear proyecto en Google Cloud Platform ☁️
  2. Habilitar Google+ API πŸ“‘
  3. Crear credenciales OAuth 2.0 πŸ”‘
  4. Configurar variables:
    • GOOGLE_CLIENT_ID
    • GOOGLE_CLIENT_SECRET
  5. Agregar URI de redirecciΓ³n: {tu_url_local}/accounts/google/login/callback/ πŸ”„

πŸ“§ Testing de Emails

Usa Mailtrap para testing de emails πŸ“¬

  1. Crear cuenta en Mailtrap
  2. Obtener credenciales SMTP de Email Testing > Inboxes > SMTP
  3. Configurar en tu .env

πŸƒβ€β™‚οΈ Ejecutar el Servidor

(venv)$ python manage.py runserver

Β‘Listo! πŸŽ‰ Tu aplicaciΓ³n estarΓ‘ disponible en http://127.0.0.1:8000

πŸ› οΈ Herramientas de Desarrollo

πŸ—„οΈ Script de MigraciΓ³n de Base de Datos

El proyecto incluye un script automatizado para migrar datos entre diferentes versiones de PostgreSQL:

πŸ“ Archivos Incluidos

  • migrate_db.sh - Script principal de migraciΓ³n
  • env.example - Template de variables de entorno

πŸš€ Uso RΓ‘pido

# Configurar variables de entorno
cp env.example .env
# Editar .env con tus datos

# Ejecutar migraciΓ³n completa
./migrate_db.sh all

πŸ”§ CaracterΓ­sticas del Script

  • βœ… Carga automΓ‘tica de variables desde .env
  • βœ… Compatibilidad con PostgreSQL 15 β†’ 16+
  • βœ… CreaciΓ³n automΓ‘tica de base de datos ticketera_local
  • βœ… Dump optimizado con opciones avanzadas
  • βœ… Limpieza automΓ‘tica de archivos temporales
  • βœ… Manejo de foreign keys circulares
  • βœ… Mensajes informativos con colores
  • βœ… Manejo de errores robusto

πŸ“‹ Comandos Disponibles

./migrate_db.sh help        # Mostrar ayuda
./migrate_db.sh check       # Verificar dependencias del sistema
./migrate_db.sh dump        # Hacer dump desde producciΓ³n
./migrate_db.sh create      # Crear base de datos ticketera_local
./migrate_db.sh restore     # Restaurar datos
./migrate_db.sh cleanup     # Limpiar archivos de dump
./migrate_db.sh drop-db     # Eliminar base de datos ticketera_local
./migrate_db.sh test-local  # Verificar conexiΓ³n local
./migrate_db.sh test-remote # Verificar conexiΓ³n remota
./migrate_db.sh test-all    # Verificar ambas conexiones
./migrate_db.sh all         # Proceso completo

πŸ”§ VerificaciΓ³n de Dependencias

El script verifica automΓ‘ticamente que tengas todas las dependencias necesarias:

  • βœ… PostgreSQL 16+ (local)
  • βœ… Homebrew (para instalaciΓ³n)
  • βœ… Archivo .env (configuraciΓ³n)

Si faltan dependencias, el script te darΓ‘ instrucciones especΓ­ficas de instalaciΓ³n.

⚑ Optimizaciones del Dump

El script utiliza opciones avanzadas de pg_dump para mayor eficiencia:

  • --disable-triggers - Evita problemas con foreign keys circulares
  • --no-owner --no-privileges - Ignora permisos especΓ­ficos del sistema
  • --exclude-schema - Excluye schemas del sistema y de Supabase
  • Limpieza automΓ‘tica - Elimina archivos de dump anteriores antes de crear nuevos
  • EliminaciΓ³n robusta de BD - Termina conexiones activas antes de eliminar la base de datos
  • Manejo de conflictos - Ignora errores de schemas/tablas existentes durante la restauraciΓ³n
  • EstadΓ­sticas de archivos - Muestra el tamaΓ±o de cada archivo creado

πŸš€ Deploy

⚠️ IMPORTANTE: Todos los deploys se realizan exclusivamente por CI/CD (GitHub Actions). No se hacen deploys manuales.

πŸ”„ Flujo de Deploy Completo

1️⃣ Desarrollo β†’ Dev Environment

# 1. Crear feature branch desde dev
git checkout dev
git pull origin dev
git checkout -b feature/nueva-funcionalidad

# 2. Hacer cambios y commit
git add .
git commit -m "feat: agregar nueva funcionalidad"

# 3. Push y crear PR a dev
git push origin feature/nueva-funcionalidad
# Crear PR en GitHub: feature/nueva-funcionalidad β†’ dev

⚑ Deploy automÑtico a dev: Al mergear el PR a dev, GitHub Actions despliega automÑticamente

2️⃣ Testing en Dev Environment

  • πŸ§ͺ Probar la funcionalidad en https://dev.fuegoaustral.org
  • βœ… Verificar que todo funciona correctamente
  • πŸ” Revisar logs y mΓ©tricas

3️⃣ Dev β†’ Production

# 1. Crear PR de dev a main
# En GitHub: Crear PR dev β†’ main

# 2. Revisar y mergear
# DespuΓ©s de revisiΓ³n, mergear el PR

# 3. Deploy automΓ‘tico a producciΓ³n
# GitHub Actions despliega automΓ‘ticamente a prod

πŸš€ Deploy automΓ‘tico a prod: Al mergear dev β†’ main, se despliega automΓ‘ticamente a producciΓ³n

πŸ“‹ Reglas de Deploy

βœ… Permitido

  • βœ… Push a feature/* branches
  • βœ… PRs a dev branch
  • βœ… PRs de dev a main

🚫 Prohibido

  • 🚫 Push directo a dev (excepto hotfixes crΓ­ticos o que estes vibrando expresion radical ✨ y sepas lo que estas haciendo. Mandale cumbia rey)
  • 🚫 Push directo a main (NUNCA)
  • 🚫 Deploys manuales con Zappa

πŸ†˜ Hotfixes CrΓ­ticos

En caso de emergencia crΓ­tica:

# 1. Crear hotfix desde main
git checkout main
git pull origin main
git checkout -b hotfix/fix-critico

# 2. Aplicar fix y commit
git add .
git commit -m "hotfix: fix crΓ­tico urgente"

# 3. Push y crear PR directo a main
git push origin hotfix/fix-critico
# Crear PR: hotfix/fix-critico β†’ main

# 4. OBLIGATORIO: Backport a dev despuΓ©s
git checkout dev
git cherry-pick <commit-hash>
git push origin dev

πŸ—οΈ ConfiguraciΓ³n Docker (Solo para Emergencias)

⚠️ Solo usar en emergencias: El deploy normal es 100% automÑtico

# Construir imagen Docker
docker build . -t ticketera-zappashell

# Crear alias para facilitar el uso
alias zappashell='docker run -ti -e AWS_PROFILE=ticketera -v "$(pwd):/var/task" -v ~/.aws/:/root/.aws --rm ticketera-zappashell'

# Usar el shell (solo emergencias)
zappashell
zappashell> zappa update prod

πŸ“ Archivos EstΓ‘ticos

Los archivos estΓ‘ticos se manejan automΓ‘ticamente en el pipeline:

# Esto se ejecuta automΓ‘ticamente en CI/CD
python manage.py collectstatic --settings=deprepagos.settings_prod

πŸŽͺ Agregar un Nuevo Evento

πŸ“– DocumentaciΓ³n completa: Google Doc

πŸ’‘ Tip: Comparte este documento con el equipo de comunicaciΓ³n y diseΓ±o cuando prepares un nuevo evento

πŸ—οΈ Arquitectura

πŸ—ΊοΈ Vista de pΓ‘jaro del sistema: cΓ³mo se conectan usuarios, infra de AWS, integraciones externas y CI/CD.

🌐 Diagrama de Alto Nivel

flowchart LR
    %% =========================
    %% Actores
    %% =========================
    subgraph Users["πŸ‘₯ Usuarios"]
        Buyer["🎟️ Comprador<br/><i>browser</i>"]
        Staff["πŸ›‘οΈ Staff / Admin<br/><i>/admin</i>"]
    end

    %% =========================
    %% CI/CD
    %% =========================
    subgraph CICD["πŸš€ CI/CD"]
        GH["GitHub<br/><i>main / dev</i>"]
        GHA["GitHub Actions<br/><i>deploy-dev / deploy-prod</i>"]
        Zappa["πŸ“¦ Zappa<br/><i>package + deploy</i>"]
        GH --> GHA --> Zappa
    end

    %% =========================
    %% AWS
    %% =========================
    subgraph AWS["☁️ AWS β€” us-east-1"]
        R53["🌎 Route 53 / ACM<br/><i>eventos.fuegoaustral.org<br/>dev.fuegoaustral.org</i>"]
        APIGW["πŸšͺ API Gateway<br/><i>HTTPS</i>"]

        subgraph Lambda["Ξ» AWS Lambda β€” Python 3.13"]
            Django["🐍 Django 4.2<br/><i>tickets · events ·<br/>user_profile · caja · logros · espaciozen</i>"]
            Crons["⏰ Cron Handlers<br/><i>payment_check · email_crons</i>"]
        end

        EB["πŸ—“οΈ EventBridge<br/><i>schedules</i>"]
        S3Static["πŸͺ£ S3 Β· faprivate<br/><i>static + media</i>"]
        RDS[("🐘 RDS PostgreSQL 16.8")]
        CW["πŸ“Š CloudWatch Logs"]

        APIGW --> Django
        EB -->|"rate(5 min)"| Crons
        EB -->|"cron 17:00 UTC"| Crons
        Django --> RDS
        Crons --> RDS
        Django --> S3Static
        Django --> CW
        Crons --> CW
    end

    %% =========================
    %% Integraciones externas
    %% =========================
    subgraph Ext["πŸ”Œ Integraciones Externas"]
        MP["πŸ’³ MercadoPago<br/><i>checkout + webhook + Instore caja</i>"]
        Google["πŸ” Google OAuth2<br/><i>django-allauth</i>"]
        SMTP["πŸ“§ SMTP<br/><i>transactional email</i>"]
        Twilio["πŸ“± Twilio Verify<br/><i>phone OTP</i>"]
        Chatwoot["πŸ’¬ Chatwoot<br/><i>support widget</i>"]
    end

    %% =========================
    %% Conexiones principales
    %% =========================
    Buyer -->|HTTPS| R53 --> APIGW
    Staff -->|HTTPS| R53

    Django <-->|create preference| MP
    MP -->|POST /webhooks/mercadopago| APIGW
    Django <-->|OAuth2| Google
    Django -->|send| SMTP
    Django <-->|verify| Twilio
    Buyer <-.->|chat| Chatwoot

    Zappa -. deploy .-> Lambda
    Zappa -. upload .-> S3Static

    %% =========================
    %% Estilos
    %% =========================
    classDef aws fill:#FFF4E5,stroke:#FF9900,stroke-width:1px,color:#222;
    classDef ext fill:#EAF4FF,stroke:#1E88E5,stroke-width:1px,color:#222;
    classDef cicd fill:#F3E5F5,stroke:#8E24AA,stroke-width:1px,color:#222;
    classDef users fill:#E8F5E9,stroke:#43A047,stroke-width:1px,color:#222;
    classDef db fill:#FFEBEE,stroke:#E53935,stroke-width:1px,color:#222;

    class R53,APIGW,Lambda,Django,Crons,EB,S3Static,CW aws;
    class RDS db;
    class MP,Google,SMTP,Twilio,Chatwoot ext;
    class GH,GHA,Zappa cicd;
    class Buyer,Staff users;
Loading

🧩 Componentes Principales

Capa TecnologΓ­a Detalle
🎨 Frontend Django Templates + Bootstrap 5 + CKEditor 5 SSR clÑsico, sin SPA
🐍 Backend Django 4.2 / Python 3.13 Apps: tickets, events, user_profile, caja, logros, espaciozen
πŸšͺ Edge API Gateway + ACM + Route 53 TLS y dominios eventos.fuegoaustral.org / dev.fuegoaustral.org
⚑ Compute AWS Lambda (Zappa, slim_handler) 1024 MB · timeout 300s · keep_warm activo
🐘 Datos Amazon RDS PostgreSQL 16.8 Schema único · migraciones Django
πŸ—„οΈ Storage S3 faprivate EstΓ‘ticos + uploads vΓ­a django_s3_storage
πŸ“Š Observabilidad CloudWatch Logs + django-auditlog zappa tail para streaming
⏰ Jobs EventBridge β†’ Lambda Ver tabla de cron jobs ↓
πŸ” Auth django-allauth + Google OAuth2 Email obligatorio, verificaciΓ³n mandatory
πŸ’³ Pagos MercadoPago Checkout Pro + Instore (caja v2) Webhook firmado en /webhooks/mercadopago

⏰ Jobs Programados (EventBridge β†’ Lambda)

Job Schedule FunciΓ³n
πŸ’° check_pending_payments rate(5 minutes) Reconcilia pagos pendientes contra MercadoPago
πŸ“¬ send_pending_actions_emails cron(0 17 * * ? *) Recordatorios diarios de acciones pendientes

πŸ”„ Flujo de Compra de un Ticket

sequenceDiagram
    autonumber
    actor U as 🎟️ Comprador
    participant D as 🐍 Django (Lambda)
    participant DB as 🐘 PostgreSQL
    participant MP as πŸ’³ MercadoPago
    participant E as πŸ“§ SMTP

    U->>D: GET /evento/:slug
    D->>DB: SELECT evento + tickets disponibles
    D-->>U: HTML con formulario de compra

    U->>D: POST /comprar (datos + cantidad)
    D->>DB: INSERT Order (status=pending)
    D->>MP: create_preference()
    MP-->>D: init_point (URL checkout)
    D-->>U: 302 β†’ init_point

    U->>MP: completa pago en MercadoPago
    MP-->>U: redirect a /payment/success

    par Webhook async
        MP->>D: POST /webhooks/mercadopago (firmado)
        D->>MP: GET /v1/payments/:id (verificar)
        D->>DB: UPDATE Order (status=paid) + emitir tickets
        D->>E: enviar tickets por email
    and Cron de respaldo (cada 5 min)
        D->>MP: poll pagos pendientes
        D->>DB: reconciliar estados
    end
Loading

🌳 Entornos

Entorno Branch URL Lambda alias DB
πŸ§ͺ dev dev https://dev.fuegoaustral.org deprepagos-dev RDS dev
πŸš€ prod main https://eventos.fuegoaustral.org deprepagos-prod RDS prod
πŸ“œ Diagrama ASCII (fallback para terminales sin renderizado Mermaid)
                        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                        β”‚              πŸ‘₯ Usuarios                    β”‚
                        β”‚   Comprador  Β·  Staff (/admin)              β”‚
                        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                            β”‚ HTTPS
                                            β–Ό
                        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                        β”‚  🌎 Route 53 + ACM  β†’  πŸšͺ API Gateway       β”‚
                        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                            β–Ό
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚                  ☁️  AWS Lambda  (Python 3.13, Zappa)             β”‚
        β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
        β”‚  β”‚  🐍 Django 4.2              β”‚    β”‚  ⏰ Cron Handlers          β”‚ β”‚
        β”‚  β”‚  tickets Β· events Β·         β”‚    β”‚  payment_check (5 min)    β”‚ β”‚
        β”‚  β”‚  user_profile Β· caja Β· logros Β· espaciozen  β”‚    β”‚  email_crons   (17:00)    β”‚ β”‚
        β”‚  β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                 β”‚      β”‚      β”‚                           β”‚
                 β–Ό      β–Ό      β–Ό                           β–Ό
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚ 🐘 RDS    β”‚ β”‚ πŸͺ£ S3    β”‚ β”‚ πŸ“Š CW Logs β”‚    β”‚ πŸ—“οΈ EventBridgeβ”‚
        β”‚ PG 16.8  β”‚ β”‚faprivateβ”‚ β”‚            β”‚    β”‚  schedules   β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                            β–²
                                            β”‚
                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                  β”‚              πŸ”Œ Integraciones Externas              β”‚
                  β”‚  πŸ’³ MercadoPago Β· πŸ” Google OAuth2 Β· πŸ“§ SMTP        β”‚
                  β”‚  πŸ“± Twilio Verify Β· πŸ’¬ Chatwoot                    β”‚
                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

                       πŸš€ CI/CD:  GitHub  β†’  GH Actions  β†’  Zappa  β†’  Lambda + S3

πŸ› οΈ TecnologΓ­as

  • Backend: Django 4.2 + Python 3.13 🐍
  • Base de Datos: PostgreSQL 16.8 (producciΓ³n) / 15.6 (desarrollo) 🐘
  • Deploy: AWS Lambda + Zappa ☁️
  • CI/CD: GitHub Actions πŸš€
  • Pagos: MercadoPago πŸ’³
  • Auth: Google OAuth2 πŸ”
  • Emails: Django + SMTP πŸ“§
  • Herramientas: Scripts de migraciΓ³n automatizados πŸ”§

πŸ”§ Troubleshooting

❌ Problemas Comunes

🐍 Error de Python/PostgreSQL

# Si psql no se encuentra
export PATH="/opt/homebrew/Cellar/postgresql@17/17.6/bin:$PATH"

# Si hay problemas de permisos
sudo chown -R $(whoami) /opt/homebrew/var/postgresql@17

πŸ—„οΈ Problemas de Base de Datos

# Verificar conexiΓ³n a PostgreSQL
/opt/homebrew/Cellar/postgresql@17/17.6/bin/psql -d postgres -c "SELECT version();"

# Reiniciar PostgreSQL
brew services restart postgresql@17

# Ver logs de PostgreSQL
tail -f /opt/homebrew/var/log/postgresql@17.log

πŸ”„ Problemas de MigraciΓ³n

# Verificar dependencias del sistema
./migrate_db.sh check

# Verificar conexiones
./migrate_db.sh test-all

# Verificar variables de entorno
./migrate_db.sh help

# Verificar conexiΓ³n a base de datos remota manualmente
/opt/homebrew/Cellar/postgresql@16/16.10/bin/psql -h $DB_HOST -U $DB_USER -d $DB_DATABASE -c "SELECT 1;"

πŸš€ Problemas de Deploy

# Verificar AWS credentials
aws sts get-caller-identity

# Verificar Zappa
source venv/bin/activate && zappa status dev

# Ver logs de Lambda
zappa tail dev

πŸ“‹ Comandos Útiles

# Verificar estado del proyecto
python manage.py check

# Verificar migraciones pendientes
python manage.py showmigrations

# Crear migraciones
python manage.py makemigrations

# Aplicar migraciones
python manage.py migrate

# Cargar datos de prueba
python manage.py loaddata fixtures/initial_data.json

πŸ“ž Soporte

ΒΏNecesitas ayuda? πŸ€”


Hecho con ❀️ por el equipo de Fuego Austral πŸ”₯

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors