Skip to content

Report Module

Public Summary

Asynchronous report generation with a job queue, timeout enforcement, and CSV artifact download.

Internal Details

Files

FileRole
report.controller.jsHTTP handlers for job lifecycle
report.service.jsJob orchestration and report generation
report.routes.jsRoute definitions
report.schema.jsZod validation
report-job.model.jsJob state machine schema
report-job.repository.jsJob data access

Endpoints

MethodPathAuthDescription
POST/reportsJWTCreate job → 202 Accepted with jobId
GET/reports/:jobIdJWTPoll job status
POST/reports/:jobId/cancelJWTCancel pending job
GET/reports/:jobId/downloadJWTDownload CSV artifact

Job State Machine

Constraints

  • One active job per user — creating a new job while one is PENDING/PROCESSING is rejected.
  • 5-minute timeout — jobs exceeding this are moved to ABORTED.
  • Artifacts stored as CSV files on the filesystem.

Data Model — ReportJob

requestedBy: String
filters    : Object (date range, scope, etc.)
status     : PENDING | PROCESSING | COMPLETED | FAILED | CANCELLED | ABORTED
artifact   : String (file path to CSV)
error      : String (failure reason)
createdAt  : Date
updatedAt  : Date

Source Anchors

PathRelevance
apps/server/src/modules/report/Controller, service, routes, schema, model, repository
apps/server/src/data/reports/CSV artifact storage directory

Student Obrok engineering documentation.