Commit Graph
2 Commits
Author SHA1 Message Date
objecttothis bb99a22f59 fix(job-throttle): return saved throttle id to prevent unintended deletion
- JobThrottle::saveValue now returns int throttle_id instead of bool:
  new inserts return the DB-generated insertID, updates return the
  existing throttleId.
- Jobs controller collects saved ids into $notToDelete using the
  returned value, so newly inserted throttles are correctly tracked.

Fixes bug where newly inserted throttles had no id captured,
causing them to be wrongly deleted in the post-save cleanup step.

Signed-off-by: objecttothis <17935339+objecttothis@users.noreply.github.com>
2026-09-17 15:29:58 +04:00
objecttothis 84abb9a4af feat(jobs): add background job queue with web/auto/manual scheduling
Introduce CodeIgniter Tasks-based job scheduling to support
long-running background work (e.g. large CSV imports) without
blocking requests.

- composer.json/composer.lock: add codeigniter4/tasks (and its
  dependencies codeigniter4/queue, codeigniter4/settings) to
  power the task scheduler and settings-backed configuration.
- app/Models/JobThrottle.php: new model for job_throttles table,
  providing exists/save/getAll/delete helpers to rate-limit or
  throttle job execution per throttle_id.
- INSTALL.md: document the three trigger modes (Web default via
  request-hook processing, Auto via cron/Task Scheduler, Manual
  via admin UI button), including step-by-step Linux/Mac cron
  and Windows Task Scheduler setup, and Docker considerations
  (worker container, supervisor, or cron sidecar) since cron
  does not run inside a single-process container by default.

Signed-off-by: objecttothis <17935339+objecttothis@users.noreply.github.com>
2026-09-17 15:13:32 +04:00