woj-server/internal/api/runner/handler.go

46 lines
1.2 KiB
Go

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(false)
if status != e.Success {
hnd.log.Error("failed to ensure runner dependencies", zap.String("status", status.String()))
return nil, errors.New("failed to ensure dependencies")
}
return hnd, nil
}