Milestone work item 생성 동기화에서 workspace slot 상태를 DB에 저장하고 available slot을 원자적으로 예약할 수 있어야 한다. 리뷰 루프 산출물을 archive하고, 현재 로드맵 우선순위를 Workbench Provider Slot Composition으로 조정한다.
30 lines
1.1 KiB
SQL
30 lines
1.1 KiB
SQL
-- name: ListWorkspaceSlotsByProject :many
|
|
SELECT id, project_sync_setting_id, slot_index, state, path, created_at, updated_at
|
|
FROM workspace_slots
|
|
WHERE project_sync_setting_id = $1
|
|
ORDER BY slot_index;
|
|
|
|
-- name: UpsertWorkspaceSlot :one
|
|
INSERT INTO workspace_slots (project_sync_setting_id, slot_index, state, path)
|
|
VALUES ($1, $2, 'available', $3)
|
|
ON CONFLICT (project_sync_setting_id, slot_index)
|
|
DO UPDATE SET path = EXCLUDED.path, updated_at = now()
|
|
RETURNING id, project_sync_setting_id, slot_index, state, path, created_at, updated_at;
|
|
|
|
-- name: ReserveAvailableWorkspaceSlot :one
|
|
UPDATE workspace_slots
|
|
SET state = 'in_use', updated_at = now()
|
|
WHERE id = (
|
|
SELECT id FROM workspace_slots
|
|
WHERE project_sync_setting_id = $1 AND state = 'available'
|
|
ORDER BY slot_index
|
|
LIMIT 1
|
|
FOR UPDATE SKIP LOCKED
|
|
)
|
|
RETURNING id, project_sync_setting_id, slot_index, state, path, created_at, updated_at;
|
|
|
|
-- name: UpdateWorkspaceSlotState :one
|
|
UPDATE workspace_slots
|
|
SET state = $2, updated_at = now()
|
|
WHERE id = $1
|
|
RETURNING id, project_sync_setting_id, slot_index, state, path, created_at, updated_at;
|