Skip to content

Fase 1.2: Job Dispatcher

← Anterior: 1.1 Infraestructura | Siguiente: 1.3 Endpoints →


Crear clase JobDispatcher

Archivo: backend/background-jobs-system.md

Rama: feature/background-jobs-dispatcher

Fase: 1.2: Job Dispatcher con exec()

Estimación: 4 horas

Dependencias: Crear Models BackgroundJobModel y NotificationModel

Deliverables

  • [ ] Crear server/src/services/BackgroundJobs/JobDispatcher.php
    • [ ] Método dispatch(handlerClass, payload, schema): Job ID
    • [ ] Persistencia en BD
    • [ ] Asignación de UUID
    • [ ] Validación de schema multi-tenant
  • [ ] Exception handling (InvalidJobHandler, InvalidSchema)
  • [ ] Unit tests con mock JobModel
  • [ ] Integration tests con BD real

Crear script CLI worker (bootstrap-cli.php)

Archivo: backend/background-jobs-system.md

Rama: feature/background-jobs-dispatcher

Fase: 1.2: Job Dispatcher con exec()

Estimación: 3 horas

Dependencias: Crear clase JobDispatcher

Deliverables

  • [ ] Crear server/bin/worker.php (CLI entrypoint)
  • [ ] Lógica de polling cada 5 segundos
  • [ ] Graceful shutdown (SIGTERM)
  • [ ] Logging a STDOUT
  • [ ] Parámetro --schema para multi-tenancy
  • [ ] Tests simulando execution

Crear clase JobRunner

Archivo: backend/background-jobs-system.md

Rama: feature/background-jobs-dispatcher

Fase: 1.2: Job Dispatcher con exec()

Estimación: 4 horas

Dependencias: Crear script CLI worker, Crear Models

Deliverables

  • [ ] Crear server/src/services/BackgroundJobs/JobRunner.php
    • [ ] Método executeJob(jobId)
    • [ ] Carga handler dinámico
    • [ ] Manejo de excepciones
    • [ ] Actualiza status (pending → processing → completed/failed)
    • [ ] Registra timestamps (started_at, completed_at)
    • [ ] Almacena resultado en JSON
  • [ ] Unit tests con stubs
  • [ ] Integration tests end-to-end

Crear interfaz JobHandlerInterface

Archivo: backend/background-jobs-system.md

Rama: feature/background-jobs-handlers

Fase: 1.2: Job Dispatcher con exec()

Estimación: 2 horas

Dependencias: Ninguna (puede crearse en paralelo)

Deliverables

  • [ ] Crear server/src/services/BackgroundJobs/JobHandlerInterface.php
    • [ ] Método handle(payload): array
    • [ ] Método getName(): string
    • [ ] PHPDoc con ejemplos
  • [ ] Abstract base class AbstractJobHandler
  • [ ] Tests verificando interfaz

Crear BatchInvoicingJobHandler

Archivo: backend/background-jobs-system.md

Rama: feature/background-jobs-handlers

Fase: 1.2: Job Dispatcher con exec()

Estimación: 5 horas

Dependencias: Crear interfaz JobHandlerInterface, Crear clase JobRunner

Deliverables

  • [ ] Crear server/src/services/BackgroundJobs/Handlers/BatchInvoicingJobHandler.php
    • [ ] Implementa JobHandlerInterface
    • [ ] Payload esperado: { facturas: [id1, id2, ...] }
    • [ ] Lógica de facturación batch (usa FacturacionService existente)
    • [ ] Retorna { processed: N, failed: N, errors: [...] }
  • [ ] Manejo de errores parciales
  • [ ] Logging por factura
  • [ ] Unit tests
  • [ ] Integration tests con BD mock

← Anterior: 1.1 Infraestructura | Siguiente: 1.3 Endpoints →