-- src.program_get: одна строка программы атлета (+ активная версия). -- На основе: новая. -- Параметры: p_athlete_id; p_program_id. -- Возвращает: TABLE — строка program + денормализация; чужая — пустая таблица. -- прежняя сигнатура (без external_id) снимается — row type меняется DROP FUNCTION IF EXISTS src.program_get(int, int); CREATE OR REPLACE FUNCTION src.program_get( p_athlete_id int, p_program_id int ) RETURNS TABLE ( id int, athlete_id int, title text, created_at timestamptz, active_version_id uuid, active_version int ) LANGUAGE sql AS $$ SELECT p.id, p.athlete_id, p.title, p.created_at, v.id AS active_version_id, v.version AS active_version FROM src.program p LEFT JOIN src.program_version v ON v.program_id = p.id AND v.status = 'active' WHERE p.athlete_id = p_athlete_id AND p.id = p_program_id; $$;