package asynqqueue import ( "context" "time" "github.com/libnovel/backend/internal/domain" "github.com/libnovel/backend/internal/taskqueue" ) // Consumer wraps the PocketBase-backed Consumer for result write-back only. // // When using Asynq, the runner no longer polls for work — Asynq delivers // tasks via the ServeMux handlers. The only Consumer operations the handlers // need are: // - FinishAudioTask / FinishScrapeTask — write result back to PocketBase // - FailTask — mark PocketBase record as failed // // ClaimNextAudioTask, ClaimNextScrapeTask, HeartbeatTask, and ReapStaleTasks // are all no-ops here because Asynq owns those responsibilities. type Consumer struct { pb taskqueue.Consumer // underlying PocketBase consumer (for write-back) } // NewConsumer wraps an existing PocketBase Consumer. func NewConsumer(pb taskqueue.Consumer) *Consumer { return &Consumer{pb: pb} } // ── Write-back (delegated to PocketBase) ────────────────────────────────────── func (c *Consumer) FinishScrapeTask(ctx context.Context, id string, result domain.ScrapeResult) error { return c.pb.FinishScrapeTask(ctx, id, result) } func (c *Consumer) FinishAudioTask(ctx context.Context, id string, result domain.AudioResult) error { return c.pb.FinishAudioTask(ctx, id, result) } func (c *Consumer) FinishTranslationTask(ctx context.Context, id string, result domain.TranslationResult) error { return c.pb.FinishTranslationTask(ctx, id, result) } func (c *Consumer) FailTask(ctx context.Context, id, errMsg string) error { return c.pb.FailTask(ctx, id, errMsg) } // ── No-ops (Asynq owns claiming / heartbeating / reaping) ─────────────────── func (c *Consumer) ClaimNextScrapeTask(_ context.Context, _ string) (domain.ScrapeTask, bool, error) { return domain.ScrapeTask{}, false, nil } func (c *Consumer) ClaimNextAudioTask(_ context.Context, _ string) (domain.AudioTask, bool, error) { return domain.AudioTask{}, false, nil } func (c *Consumer) ClaimNextTranslationTask(_ context.Context, _ string) (domain.TranslationTask, bool, error) { return domain.TranslationTask{}, false, nil } func (c *Consumer) HeartbeatTask(_ context.Context, _ string) error { return nil } func (c *Consumer) ReapStaleTasks(_ context.Context, _ time.Duration) (int, error) { return 0, nil }