package runner import ( "context" "errors" "git.0x7f.app/WOJ/woj-server/internal/e" "git.0x7f.app/WOJ/woj-server/internal/misc/log" "git.0x7f.app/WOJ/woj-server/internal/service/runner" "git.0x7f.app/WOJ/woj-server/internal/service/storage" "git.0x7f.app/WOJ/woj-server/internal/service/task" "github.com/hibiken/asynq" "github.com/samber/do" "go.uber.org/zap" ) var _ Handler = (*handler)(nil) type Handler interface { Build(_ context.Context, t *asynq.Task) error Judge(_ context.Context, t *asynq.Task) error } type handler struct { log *zap.Logger runnerService runner.Service taskService task.Service storageService storage.Service } func NewRunner(i *do.Injector) (Handler, error) { hnd := &handler{ log: do.MustInvoke[log.Service](i).GetLogger("api.runner"), runnerService: do.MustInvoke[runner.Service](i), taskService: do.MustInvoke[task.Service](i), storageService: do.MustInvoke[storage.Service](i), } status := hnd.runnerService.EnsureDeps() if status != e.Success { hnd.log.Fatal("failed to ensure runner dependencies", zap.String("status", status.String())) return nil, errors.New("failed to ensure dependencies") } return hnd, nil }