workspace/projects/gamilit/docs/ARCHITECTURE.md
rckrdmrd 513a86ceee
Some checks are pending
CI Pipeline / changes (push) Waiting to run
CI Pipeline / core (push) Blocked by required conditions
CI Pipeline / trading-backend (push) Blocked by required conditions
CI Pipeline / trading-data-service (push) Blocked by required conditions
CI Pipeline / trading-frontend (push) Blocked by required conditions
CI Pipeline / erp-core (push) Blocked by required conditions
CI Pipeline / erp-mecanicas (push) Blocked by required conditions
CI Pipeline / gamilit-backend (push) Blocked by required conditions
CI Pipeline / gamilit-frontend (push) Blocked by required conditions
Major update: orchestration system, catalog references, and multi-project enhancements
Core:
- Add catalog reference implementations (auth, payments, notifications, websocket, etc.)
- New agent profiles: Database Auditor, Integration Validator, LLM Agent, Policy Auditor, Trading Strategist
- Update SIMCO directives and add escalation/git guidelines
- Add deployment inventory and audit execution reports

Projects:
- erp-suite: DevOps configs, Dockerfiles, shared libs, vertical enhancements
- gamilit: Test structure, admin controllers, service refactoring, husky/commitlint
- trading-platform: MT4 gateway, auth controllers, admin frontend, deployment scripts
- platform_marketing_content: Full DevOps setup, tests, Docker configs
- betting-analytics/inmobiliaria-analytics: Initial app structure

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 22:53:55 -06:00

13 KiB
Raw Permalink Blame History

Architecture

Overview

GAMILIT (Gamificación Maya para la Lectoescritura en Tecnología) es una plataforma educativa que mejora las habilidades de lectoescritura en estudiantes de educación básica mediante gamificación basada en la cultura maya y aprendizaje adaptativo con IA.

La arquitectura sigue un patrón de monorepo modular con separación clara entre frontend, backend y database, implementando clean architecture y domain-driven design.

Tech Stack

  • Backend: NestJS 11.x + TypeScript 5.9+
  • Frontend: React 19.x + TypeScript 5.x
  • State Management: Zustand 5.x
  • Styling: Tailwind CSS 4.x
  • Database: PostgreSQL 16.x
  • ORM: TypeORM 0.3.x
  • Auth: JWT + Passport.js
  • Real-time: Socket.IO 4.8+
  • Notifications: Web Push
  • Deployment: Docker + PM2
  • CI/CD: GitHub Actions

Module Structure

gamilit/
├── apps/
│   ├── backend/                    # NestJS API
│   │   └── src/
│   │       ├── modules/            # Feature modules
│   │       │   ├── auth/           # Authentication & authorization
│   │       │   ├── admin/          # Admin dashboard
│   │       │   ├── teacher/        # Teacher tools (create subjects, quizzes)
│   │       │   ├── profile/        # User profiles
│   │       │   ├── content/        # Learning content
│   │       │   ├── educational/    # Educational resources
│   │       │   ├── assignments/    # Student assignments
│   │       │   ├── tasks/          # Task system
│   │       │   ├── progress/       # Progress tracking
│   │       │   ├── gamification/   # Points, badges, ranks (Maya system)
│   │       │   ├── social/         # Social features
│   │       │   ├── notifications/  # Push notifications
│   │       │   ├── mail/           # Email system
│   │       │   ├── websocket/      # Real-time communication
│   │       │   ├── audit/          # Audit logging
│   │       │   └── health/         # Health checks
│   │       ├── shared/             # Shared code
│   │       │   ├── constants/      # SSOT constants
│   │       │   ├── decorators/     # Custom decorators
│   │       │   ├── filters/        # Exception filters
│   │       │   ├── guards/         # Auth guards
│   │       │   ├── interceptors/   # HTTP interceptors
│   │       │   ├── pipes/          # Validation pipes
│   │       │   └── utils/          # Utility functions
│   │       ├── config/             # Configuration
│   │       ├── middleware/         # Express middleware
│   │       ├── app.module.ts       # Root module
│   │       └── main.ts             # Bootstrap
│   │
│   ├── frontend/                   # React SPA
│   │   └── src/
│   │       ├── modules/            # Feature modules
│   │       ├── shared/             # Shared components
│   │       │   ├── components/     # UI components
│   │       │   ├── constants/      # SSOT constants
│   │       │   ├── hooks/          # Custom hooks
│   │       │   ├── stores/         # Zustand stores
│   │       │   └── utils/          # Utilities
│   │       └── App.tsx
│   │
│   ├── database/                   # PostgreSQL
│   │   ├── ddl/                    # Schema definitions
│   │   │   └── schemas/            # 8 schemas
│   │   │       ├── auth_management/
│   │   │       ├── student_learning/
│   │   │       ├── gamification_system/
│   │   │       ├── content_management/
│   │   │       ├── social_interaction/
│   │   │       ├── admin_tools/
│   │   │       ├── notifications_system/
│   │   │       └── audit_logs/
│   │   ├── seeds/                  # Test data
│   │   ├── migrations/             # TypeORM migrations
│   │   └── scripts/                # Maintenance scripts
│   │
│   └── devops/                     # DevOps scripts
│       └── scripts/
│           ├── sync-enums.ts       # Sync enums Backend → Frontend
│           ├── validate-constants-usage.ts
│           └── validate-api-contract.ts
│
├── orchestration/                  # Agent orchestration
├── docs/                           # Documentation
└── artifacts/                      # Generated artifacts

Database Schemas (8 schemas, 40+ tables)

Schema Purpose Tables
auth_management Users, roles, permissions users, roles, permissions, user_roles
student_learning Subjects, content, assignments subjects, modules, lessons, assignments, submissions
gamification_system Maya ranks, points, badges user_ranks, points_history, badges, achievements
content_management Learning materials contents, quizzes, questions, answers
social_interaction Social features posts, comments, likes, follows
admin_tools Admin dashboard settings, reports, analytics
notifications_system Notifications & emails notifications, push_subscriptions, email_queue
audit_logs Audit trail activity_logs, api_logs

Data Flow

┌─────────────┐
│   Client    │ (React SPA)
│  (Browser)  │
└──────┬──────┘
       │ HTTP/WebSocket
       ▼
┌─────────────────────────────────────────┐
│         NestJS Backend API              │
│  ┌─────────────────────────────────┐   │
│  │  Controllers (REST Endpoints)   │   │
│  └────────┬────────────────────────┘   │
│           ▼                              │
│  ┌─────────────────────────────────┐   │
│  │      Services (Business Logic)  │   │
│  └────────┬────────────────────────┘   │
│           ▼                              │
│  ┌─────────────────────────────────┐   │
│  │  Repositories (TypeORM)         │   │
│  └────────┬────────────────────────┘   │
└───────────┼──────────────────────────────┘
            ▼
   ┌─────────────────┐
   │   PostgreSQL    │
   │   (Database)    │
   └─────────────────┘

Authentication Flow

1. User Login → POST /api/auth/login
2. Validate credentials (bcrypt)
3. Generate JWT token
4. Return token + user data
5. Client stores token in localStorage
6. Subsequent requests include token in Authorization header
7. Guards validate token on protected routes

Gamification Flow (Maya Ranks)

Student completes quiz
    ↓
Points awarded = base_points × rank_multiplier × streak_multiplier
    ↓
Update points_history table
    ↓
Check if rank threshold reached
    ↓
If yes → Upgrade user_rank
    ↓
Emit WebSocket event → Real-time notification

Quiz Evaluation Flow

Student submits answers
    ↓
Backend validates answers
    ↓
Calculate score
    ↓
AI Adaptive System adjusts difficulty
    ↓
Award points (Maya gamification)
    ↓
Update progress tracking
    ↓
Return feedback + new recommendations

Key Design Decisions

1. Constants SSOT (Single Source of Truth)

Decision: Centralizar todas las constantes (schemas, tables, routes, ENUMs) en archivos dedicados.

Rationale:

  • Elimina hardcoding y magic strings
  • Garantiza type-safety en TypeScript
  • Sincronización automática Backend ↔ Frontend
  • Detecta inconsistencias en CI/CD

Files:

  • Backend: src/shared/constants/database.constants.ts, routes.constants.ts, enums.constants.ts
  • Frontend: src/shared/constants/api-endpoints.ts, enums.constants.ts (auto-synced)

2. Maya Gamification System

Decision: Implementar sistema de rangos basado en cultura maya (5 niveles).

Rationale:

  • Diferenciador cultural único
  • Mayor engagement estudiantil
  • Multiplicadores por rango incentivan progreso

Ranks:

  1. MERCENARIO (Entry)
  2. GUERRERO (Intermediate)
  3. HOLCATTE (Advanced)
  4. BATAB (Expert)
  5. NACOM (Master)

3. Modular Monorepo Architecture

Decision: Usar monorepo con apps autocontenidas (backend, frontend, database).

Rationale:

  • Facilita desarrollo full-stack
  • Sincronización de cambios
  • Deployment independiente posible
  • Documentación centralizada

4. TypeORM with Manual DDL

Decision: Definir schemas SQL manualmente en /database/ddl/, usar TypeORM solo para queries.

Rationale:

  • Control total sobre estructura de database
  • Migrations explícitas y trackeables
  • Evita auto-migrations peligrosas en producción
  • DDL como documentación versionada

5. JWT Authentication without Refresh Tokens (MVP)

Decision: JWT simple sin refresh tokens en versión inicial.

Rationale:

  • Simplicidad para MVP educativo
  • Menor complejidad de implementación
  • Refresh tokens planificados para Fase 2

6. WebSocket for Real-time Features

Decision: Socket.IO para notificaciones en tiempo real.

Rationale:

  • Mejor UX para gamificación (puntos, badges en tiempo real)
  • Notificaciones de nuevos assignments
  • Chat entre estudiantes/profesores

Dependencies

Critical External Dependencies

Dependency Purpose Criticality
PostgreSQL 16+ Primary database CRITICAL
NestJS 11+ Backend framework CRITICAL
React 19+ Frontend framework CRITICAL
TypeORM 0.3+ ORM CRITICAL
Passport.js Authentication HIGH
Socket.IO Real-time MEDIUM
Web-Push Push notifications MEDIUM
Nodemailer Email sending MEDIUM
Winston Logging MEDIUM

Internal Dependencies

  • Shared Constants: Backend y Frontend dependen de shared/constants (SSOT)
  • Database Schemas: Backend Entities dependen de DDL definitions
  • API Contract: Frontend depende de routes definidas en Backend

Security Considerations

  • Authentication: JWT tokens con expiración
  • Authorization: Role-based access control (RBAC)
  • Password Hashing: bcrypt (salt rounds: 10)
  • Input Validation: class-validator en DTOs
  • SQL Injection Protection: TypeORM parameterized queries
  • XSS Protection: helmet middleware
  • CORS: Configurado para dominios permitidos
  • Rate Limiting: express-rate-limit en endpoints críticos
  • Audit Logging: Todas las acciones críticas logueadas en audit_logs schema

Performance Optimizations

  • Database Indexes: Definidos en DDL files
  • Caching: Cache-manager para responses frecuentes
  • Compression: compression middleware
  • Code Splitting: React lazy loading
  • API Throttling: @nestjs/throttler
  • Connection Pooling: TypeORM connection pool

Deployment Strategy

Production Server:

  • IP: 74.208.126.102
  • Backend: Puerto 3006 (2 instancias cluster con PM2)
  • Frontend: Puerto 3005 (1 instancia con PM2)

Process Manager: PM2 para high availability

Docker: Dockerfiles disponibles para containerización

Ver documentación completa: DEPLOYMENT.md

Monitoring & Observability

  • Health Checks: /api/health endpoint (NestJS Terminus)
  • Logging: Winston logger con niveles (error, warn, info, debug)
  • Audit Logs: Tabla audit_logs.activity_logs para trazabilidad
  • PM2 Monitoring: pm2 monit para métricas de procesos

Future Improvements

  • Implementar refresh tokens (Fase 2)
  • Agregar Redis para caching distribuido
  • Implementar full-text search (PostgreSQL FTS o Elasticsearch)
  • Agregar tests e2e con Playwright
  • Implementar observability con Prometheus + Grafana
  • Migrar a microservicios si escala lo requiere

References