Spaces:
Running
Running
| -- ============================================================ | |
| -- MATHSOLVER v5.0 - State Architecture Upgrade Migration | |
| -- ============================================================ | |
| -- 1. Auto-update `sessions.updated_at` function | |
| CREATE OR REPLACE FUNCTION public.update_session_timestamp() | |
| RETURNS TRIGGER AS $$ | |
| BEGIN | |
| UPDATE public.sessions | |
| SET updated_at = NOW() | |
| WHERE id = NEW.session_id; | |
| RETURN NEW; | |
| END; | |
| $$ LANGUAGE plpgsql SECURITY DEFINER; | |
| -- 2. Triggers for session timestamp updates | |
| DROP TRIGGER IF EXISTS trg_update_session_on_message ON public.messages; | |
| CREATE TRIGGER trg_update_session_on_message | |
| AFTER INSERT ON public.messages | |
| FOR EACH ROW | |
| EXECUTE FUNCTION public.update_session_timestamp(); | |
| DROP TRIGGER IF EXISTS trg_update_session_on_job ON public.jobs; | |
| CREATE TRIGGER trg_update_session_on_job | |
| AFTER INSERT OR UPDATE ON public.jobs | |
| FOR EACH ROW | |
| EXECUTE FUNCTION public.update_session_timestamp(); | |
| DROP TRIGGER IF EXISTS trg_update_session_on_asset ON public.session_assets; | |
| CREATE TRIGGER trg_update_session_on_asset | |
| AFTER INSERT ON public.session_assets | |
| FOR EACH ROW | |
| EXECUTE FUNCTION public.update_session_timestamp(); | |
| -- 3. Idempotency Support: client_message_id on messages | |
| ALTER TABLE public.messages | |
| ADD COLUMN IF NOT EXISTS client_message_id UUID; | |
| CREATE UNIQUE INDEX IF NOT EXISTS idx_messages_session_client_id | |
| ON public.messages(session_id, client_message_id) | |
| WHERE client_message_id IS NOT NULL; | |
| -- 4. Atomic Asset Versioning: Unique version per session and asset type | |
| CREATE UNIQUE INDEX IF NOT EXISTS idx_session_assets_unique_version | |
| ON public.session_assets(session_id, asset_type, version); | |