refactor: remove obsolete member management API module
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
-- =====================================================
|
||||
-- Optimistic Locking for Courses, Events, Bookings
|
||||
--
|
||||
-- Problem: Concurrent edits to courses, events, or bookings
|
||||
-- can silently overwrite each other (last write wins).
|
||||
--
|
||||
-- Fix: Add version column to each table with an auto-
|
||||
-- increment trigger on update. API layer checks version
|
||||
-- match before writing, preventing silent overwrites.
|
||||
--
|
||||
-- Reuses the same trigger function pattern established
|
||||
-- in 20260416000005_member_versioning.sql but creates a
|
||||
-- shared generic function instead of table-specific ones.
|
||||
-- =====================================================
|
||||
|
||||
-- Shared version increment function (CREATE OR REPLACE is idempotent)
|
||||
CREATE OR REPLACE FUNCTION public.increment_version()
|
||||
RETURNS trigger
|
||||
LANGUAGE plpgsql AS $$
|
||||
BEGIN
|
||||
NEW.version := OLD.version + 1;
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$;
|
||||
|
||||
-- -------------------------------------------------------
|
||||
-- COURSES
|
||||
-- -------------------------------------------------------
|
||||
|
||||
ALTER TABLE public.courses
|
||||
ADD COLUMN IF NOT EXISTS version integer NOT NULL DEFAULT 1;
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM pg_trigger WHERE tgname = 'trg_courses_increment_version'
|
||||
) THEN
|
||||
CREATE TRIGGER trg_courses_increment_version
|
||||
BEFORE UPDATE ON public.courses
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION public.increment_version();
|
||||
END IF;
|
||||
END;
|
||||
$$;
|
||||
|
||||
-- -------------------------------------------------------
|
||||
-- EVENTS
|
||||
-- -------------------------------------------------------
|
||||
|
||||
ALTER TABLE public.events
|
||||
ADD COLUMN IF NOT EXISTS version integer NOT NULL DEFAULT 1;
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM pg_trigger WHERE tgname = 'trg_events_increment_version'
|
||||
) THEN
|
||||
CREATE TRIGGER trg_events_increment_version
|
||||
BEFORE UPDATE ON public.events
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION public.increment_version();
|
||||
END IF;
|
||||
END;
|
||||
$$;
|
||||
|
||||
-- -------------------------------------------------------
|
||||
-- BOOKINGS
|
||||
-- -------------------------------------------------------
|
||||
|
||||
ALTER TABLE public.bookings
|
||||
ADD COLUMN IF NOT EXISTS version integer NOT NULL DEFAULT 1;
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM pg_trigger WHERE tgname = 'trg_bookings_increment_version'
|
||||
) THEN
|
||||
CREATE TRIGGER trg_bookings_increment_version
|
||||
BEFORE UPDATE ON public.bookings
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION public.increment_version();
|
||||
END IF;
|
||||
END;
|
||||
$$;
|
||||
Reference in New Issue
Block a user