package tasks import ( "context" "encoding/json" "fmt" "management/internal/erpserver/model/system" "github.com/hibiken/asynq" ) const TaskConsumeAuditLog = "task:audit" type PayloadConsumeAuditLog struct { *system.AuditLog } func (d *RedisTaskDistributor) DistributeTaskConsumeAuditLog( ctx context.Context, payload *PayloadConsumeAuditLog, opts ...asynq.Option, ) error { jsonPayload, err := json.Marshal(payload) if err != nil { return fmt.Errorf("failed to marshal task payload: %w", err) } task := asynq.NewTask(TaskConsumeAuditLog, jsonPayload, opts...) _, err = d.client.EnqueueContext(ctx, task) if err != nil { return fmt.Errorf("failed to enqueue task: %w", err) } //d.log.Info("enqueued task", // zap.String("type", task.Type()), // zap.Binary("payload", task.Payload()), // zap.String("queue", info.Queue), // zap.Int("max_retry", info.MaxRetry), //) return nil } func (p *RedisTaskProcessor) ProcessTaskConsumeAuditLog(ctx context.Context, task *asynq.Task) error { var payload PayloadConsumeAuditLog if err := json.Unmarshal(task.Payload(), &payload); err != nil { return fmt.Errorf("failed to unmarshal payload: %w", err) } if err := p.auditService.Create(ctx, payload.AuditLog); err != nil { return fmt.Errorf("failed to process task: %w", err) } //p.log.Info("processed task", // zap.String("type", task.Type()), // zap.Binary("payload", task.Payload()), //) return nil }