nomadcode/services/core/internal/scheduler/slot_finalizer.go
toki afb26e67ed feat: complete work item creation sync milestone - slot finalizer, live cycle smoke test, archive completed subtasks
- Add slot_finalizer.go for terminal state management
- Add live cycle smoke test documentation
- Archive completed subtasks (slot terminal state, live cycle smoke)
- Update scheduler jobs and workflow service for roadmap sync
- Update authoring request/result handlers
- Update milestone documentation
2026-06-16 10:06:58 +09:00

44 lines
1.5 KiB
Go

package scheduler
import (
"context"
"log/slog"
"github.com/nomadcode/nomadcode-core/internal/authoring"
"github.com/nomadcode/nomadcode-core/internal/db"
"github.com/nomadcode/nomadcode-core/internal/projectsync"
"github.com/nomadcode/nomadcode-core/internal/storage"
)
type WorkspaceSlotStateUpdater interface {
UpdateWorkspaceSlotState(ctx context.Context, args db.UpdateWorkspaceSlotStateParams) (db.WorkspaceSlot, error)
}
func applyTaskSlotTerminalState(ctx context.Context, updater WorkspaceSlotStateUpdater, task storage.Task, state projectsync.SlotState, logger *slog.Logger) {
if updater == nil {
return
}
checkout, ok := authoring.TaskCheckoutMetadata(task)
if !ok || checkout.SlotID <= 0 {
if logger != nil {
logger.Warn("authoring task missing slot metadata; skipping slot terminal state update", "task_id", task.ID)
}
return
}
params, err := projectsync.ToUpdateWorkspaceSlotStateParams(checkout.SlotID, state)
if err != nil {
if logger != nil {
logger.Warn("invalid slot terminal state; skipping slot update", "task_id", task.ID, "slot_id", checkout.SlotID, "state", string(state), "error", err)
}
return
}
if _, err := updater.UpdateWorkspaceSlotState(ctx, params); err != nil {
if logger != nil {
logger.Warn("workspace slot terminal state update failed", "task_id", task.ID, "slot_id", checkout.SlotID, "state", string(state), "error", err)
}
return
}
if logger != nil {
logger.Info("workspace slot terminal state updated", "task_id", task.ID, "slot_id", checkout.SlotID, "state", string(state))
}
}