Changes between Initial Version and Version 1 of Trigger Functions


Ignore:
Timestamp:
05/12/26 01:35:16 (2 weeks ago)
Author:
193284
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Trigger Functions

    v1 v1  
     1= Trigger Functions =
     2
     3== Description ==
     4
     5This section documents the PostgreSQL PL/pgSQL trigger functions implemented for automatic validation and conflict prevention.
     6
     7The triggers are executed automatically during INSERT and UPDATE operations.
     8
     9== 1. Venue Booking Conflict Prevention ==
     10
     11=== Description ===
     12
     13This trigger prevents overlapping venue bookings for the same venue and time interval.
     14
     15=== SQL Code ===
     16
     17{{{
     18CREATE OR REPLACE FUNCTION check_venue_booking_overlap()
     19RETURNS TRIGGER AS $$
     20BEGIN
     21    IF EXISTS (
     22        SELECT 1
     23        FROM venue_booking
     24        WHERE venue_id = NEW.venue_id
     25          AND "date" = NEW."date"
     26          AND booking_id <> COALESCE(NEW.booking_id, -1)
     27          AND (
     28                NEW.start_time < end_time
     29            AND NEW.end_time > start_time
     30          )
     31    ) THEN
     32        RAISE EXCEPTION 'Venue is already booked for this time interval.';
     33    END IF;
     34
     35    RETURN NEW;
     36END;
     37$$ LANGUAGE plpgsql;
     38
     39CREATE TRIGGER trg_venue_booking_overlap
     40BEFORE INSERT OR UPDATE ON venue_booking
     41FOR EACH ROW
     42EXECUTE FUNCTION check_venue_booking_overlap();
     43}}}
     44
     45== 2. Photographer Booking Conflict Prevention ==
     46
     47=== Description ===
     48
     49This trigger prevents overlapping photographer bookings.
     50
     51=== SQL Code ===
     52
     53{{{
     54CREATE OR REPLACE FUNCTION check_photographer_booking_overlap()
     55RETURNS TRIGGER AS $$
     56BEGIN
     57    IF EXISTS (
     58        SELECT 1
     59        FROM photographer_booking
     60        WHERE photographer_id = NEW.photographer_id
     61          AND "date" = NEW."date"
     62          AND booking_id <> COALESCE(NEW.booking_id, -1)
     63          AND (
     64                NEW.start_time < end_time
     65            AND NEW.end_time > start_time
     66          )
     67    ) THEN
     68        RAISE EXCEPTION 'Photographer is already booked for this time interval.';
     69    END IF;
     70
     71    RETURN NEW;
     72END;
     73$$ LANGUAGE plpgsql;
     74
     75CREATE TRIGGER trg_photographer_booking_overlap
     76BEFORE INSERT OR UPDATE ON photographer_booking
     77FOR EACH ROW
     78EXECUTE FUNCTION check_photographer_booking_overlap();
     79}}}
     80
     81== 3. Band Booking Conflict Prevention ==
     82
     83=== Description ===
     84
     85This trigger prevents overlapping band reservations.
     86
     87=== SQL Code ===
     88
     89{{{
     90CREATE OR REPLACE FUNCTION check_band_booking_overlap()
     91RETURNS TRIGGER AS $$
     92BEGIN
     93    IF EXISTS (
     94        SELECT 1
     95        FROM band_booking
     96        WHERE band_id = NEW.band_id
     97          AND "date" = NEW."date"
     98          AND booking_id <> COALESCE(NEW.booking_id, -1)
     99          AND (
     100                NEW.start_time < end_time
     101            AND NEW.end_time > start_time
     102          )
     103    ) THEN
     104        RAISE EXCEPTION 'Band is already booked for this time interval.';
     105    END IF;
     106
     107    RETURN NEW;
     108END;
     109$$ LANGUAGE plpgsql;
     110
     111CREATE TRIGGER trg_band_booking_overlap
     112BEFORE INSERT OR UPDATE ON band_booking
     113FOR EACH ROW
     114EXECUTE FUNCTION check_band_booking_overlap();
     115}}}
     116
     117== 4. Attendance Consistency Validation ==
     118
     119=== Description ===
     120
     121This trigger validates attendance records against RSVP responses.
     122
     123=== SQL Code ===
     124
     125{{{
     126CREATE OR REPLACE FUNCTION validate_attendance_consistency()
     127RETURNS TRIGGER AS $$
     128DECLARE
     129    guest_rsvp VARCHAR(30);
     130BEGIN
     131    SELECT status
     132    INTO guest_rsvp
     133    FROM event_rsvp
     134    WHERE guest_id = NEW.guest_id
     135      AND event_id = NEW.event_id;
     136
     137    IF guest_rsvp = 'declined'
     138       AND NEW.status = 'attending' THEN
     139        RAISE EXCEPTION 'Declined guests cannot be marked as attending.';
     140    END IF;
     141
     142    RETURN NEW;
     143END;
     144$$ LANGUAGE plpgsql;
     145
     146CREATE TRIGGER trg_attendance_consistency
     147BEFORE INSERT OR UPDATE ON attendance
     148FOR EACH ROW
     149EXECUTE FUNCTION validate_attendance_consistency();
     150}}}