90 lines
3.4 KiB
Go
90 lines
3.4 KiB
Go
package inboxapp
|
|
|
|
import (
|
|
"context"
|
|
|
|
dashboardapp "inbox/internal/app/dashboard"
|
|
humantasksapp "inbox/internal/app/humantasks"
|
|
lanesapp "inbox/internal/app/lanes"
|
|
rolesapp "inbox/internal/app/roles"
|
|
"inbox/internal/app/runtimeconfig"
|
|
skillsapp "inbox/internal/app/skills"
|
|
systemfsapp "inbox/internal/app/systemfs"
|
|
taskexecapp "inbox/internal/app/taskexec"
|
|
tasksapp "inbox/internal/app/tasks"
|
|
topicsapp "inbox/internal/app/topics"
|
|
"inbox/internal/app/workflowrun"
|
|
workspacelifecycleapp "inbox/internal/app/workspacelifecycle"
|
|
"inbox/internal/app/workspaceprovision"
|
|
"inbox/internal/app/workspaceruntime"
|
|
workspacesapp "inbox/internal/app/workspaces"
|
|
"inbox/internal/base/timeutil"
|
|
"inbox/internal/domain/lane"
|
|
"inbox/internal/domain/workspace"
|
|
sqlitestore "inbox/internal/store/sqlite"
|
|
)
|
|
|
|
type WorkspaceProvisioner interface {
|
|
Provision(ctx context.Context, req workspaceprovision.ProvisionRequest) (workspace.Workspace, workspaceruntime.Runtime, error)
|
|
}
|
|
|
|
type WorkspaceRuntimeManager interface {
|
|
Ensure(ctx context.Context, workspaceID string) (workspace.Workspace, workspaceruntime.Runtime, error)
|
|
EnsureLane(ctx context.Context, laneID string) (lane.Record, error)
|
|
StopLane(ctx context.Context, laneID string) (lane.Record, error)
|
|
}
|
|
|
|
type Options struct {
|
|
WorkspaceProvision WorkspaceProvisioner
|
|
WorkspaceRuntime WorkspaceRuntimeManager
|
|
}
|
|
|
|
type Services struct {
|
|
Roles *rolesapp.Service
|
|
Skills *skillsapp.Service
|
|
RuntimeConfig *runtimeconfig.Service
|
|
Workspaces *workspacesapp.Service
|
|
WorkspaceOps *workspacelifecycleapp.Service
|
|
Topics *topicsapp.Service
|
|
Lanes *lanesapp.Service
|
|
Tasks *tasksapp.Service
|
|
HumanTasks *humantasksapp.Service
|
|
WorkflowRun *workflowrun.Service
|
|
TaskExec *taskexecapp.Service
|
|
Dashboard *dashboardapp.Service
|
|
SystemFS *systemfsapp.Service
|
|
}
|
|
|
|
func BuildServices(store *sqlitestore.Store, clock timeutil.Clock, opts Options) Services {
|
|
roleService := rolesapp.NewService(store, store, clock)
|
|
skillService := skillsapp.NewService(store)
|
|
runtimeConfigService := runtimeconfig.NewService(store, store, clock)
|
|
workspacesService := workspacesapp.NewService(store)
|
|
workspaceLifecycleService := workspacelifecycleapp.NewService(opts.WorkspaceProvision, opts.WorkspaceRuntime)
|
|
topicsService := topicsapp.NewService(store, opts.WorkspaceRuntime, clock)
|
|
lanesService := lanesapp.NewService(store, opts.WorkspaceRuntime, clock)
|
|
tasksService := tasksapp.NewService(store, clock)
|
|
humanTasksService := humantasksapp.NewService(store, clock)
|
|
taskExecOptions := make([]taskexecapp.Option, 0, 1)
|
|
if releaser, ok := any(opts.WorkspaceRuntime).(taskexecapp.LaneRuntimeReleaser); ok {
|
|
taskExecOptions = append(taskExecOptions, taskexecapp.WithLaneRuntimeReleaser(releaser))
|
|
}
|
|
taskExecService := taskexecapp.NewService(store, runtimeConfigService, clock, taskExecOptions...)
|
|
|
|
return Services{
|
|
Roles: roleService,
|
|
Skills: skillService,
|
|
RuntimeConfig: runtimeConfigService,
|
|
Workspaces: workspacesService,
|
|
WorkspaceOps: workspaceLifecycleService,
|
|
Topics: topicsService,
|
|
Lanes: lanesService,
|
|
Tasks: tasksService,
|
|
HumanTasks: humanTasksService,
|
|
WorkflowRun: workflowrun.NewService(store, runtimeConfigService, clock),
|
|
TaskExec: taskExecService,
|
|
Dashboard: dashboardapp.NewService(store),
|
|
SystemFS: systemfsapp.NewService(),
|
|
}
|
|
}
|