Files
mylder-frontend/supabase/migrations/20241214_add_phase_metadata.sql
christiankrag ef31ed3564 Add health endpoint for Swarm health checks
The /health route returns JSON status for Docker Swarm
to verify container health during deployment.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 13:27:25 +01:00

71 lines
2.2 KiB
PL/PgSQL

-- Add phase_metadata column for agentic workflow tracking
ALTER TABLE projects ADD COLUMN IF NOT EXISTS phase_metadata JSONB DEFAULT '{
"currentPhase": "think",
"completedPhases": [],
"phaseStatus": "not_started",
"activities": [],
"metrics": {
"totalDuration": 0,
"phaseDurations": {},
"iterationCount": 0
}
}'::jsonb;
-- Create index for efficient querying
CREATE INDEX IF NOT EXISTS idx_projects_phase_metadata ON projects USING gin(phase_metadata);
-- Add comment for documentation
COMMENT ON COLUMN projects.phase_metadata IS 'Stores agentic development loop state: currentPhase, completedPhases, phaseStatus, activities, metrics';
-- Create function to update phase
CREATE OR REPLACE FUNCTION update_project_phase(
p_project_id UUID,
p_new_phase TEXT,
p_status TEXT DEFAULT 'in_progress'
)
RETURNS JSONB AS $$
DECLARE
v_current_metadata JSONB;
v_current_phase TEXT;
v_completed_phases JSONB;
v_new_activity JSONB;
v_updated_metadata JSONB;
BEGIN
-- Get current metadata
SELECT phase_metadata INTO v_current_metadata
FROM projects WHERE id = p_project_id;
v_current_phase := v_current_metadata->>'currentPhase';
v_completed_phases := COALESCE(v_current_metadata->'completedPhases', '[]'::jsonb);
-- Add current phase to completed if transitioning
IF v_current_phase IS NOT NULL AND v_current_phase != p_new_phase THEN
v_completed_phases := v_completed_phases || to_jsonb(v_current_phase);
END IF;
-- Create activity record
v_new_activity := jsonb_build_object(
'id', gen_random_uuid(),
'type', 'phase_change',
'message', 'Transitioned to ' || p_new_phase || ' phase',
'timestamp', now()
);
-- Build updated metadata
v_updated_metadata := jsonb_build_object(
'currentPhase', p_new_phase,
'completedPhases', v_completed_phases,
'phaseStatus', p_status,
'activities', (v_new_activity || COALESCE(v_current_metadata->'activities', '[]'::jsonb))[0:49],
'metrics', COALESCE(v_current_metadata->'metrics', '{}'::jsonb)
);
-- Update project
UPDATE projects
SET phase_metadata = v_updated_metadata, updated_at = now()
WHERE id = p_project_id;
RETURN v_updated_metadata;
END;
$$ LANGUAGE plpgsql;