Changes between Version 19 and Version 20 of DatabaseProgramming


Ignore:
Timestamp:
05/09/26 23:01:18 (2 weeks ago)
Author:
231027
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DatabaseProgramming

    v19 v20  
    199199
    200200}}}
     201
     202=== trg_validate_event_rating
     203
     204Овој тригер овозможува оставање на рејтинг само за корисници кои поседуваат валиден билет за конкретниот настан. Системот проверува дали постои купопродажен запис кој не е поврзан со рефундација, со што се спречува лажно оценување од корисници кои не присуствувале на настанот.
     205
     206{{{
     207
     208CREATE OR REPLACE FUNCTION trg_validate_event_rating()
     209RETURNS TRIGGER AS $$
     210BEGIN
     211    IF NOT EXISTS (
     212        SELECT 1
     213        FROM "Ticket_Purchase" tp
     214        JOIN "Ticket" t ON tp.ticket_id = t.ticket_id
     215        LEFT JOIN "Ticket_Refund" tr ON tp.purchase_id = tr.purchase_id
     216        WHERE tp.user_id = NEW.user_id
     217          AND t.event_happening_id = NEW.event_happening_id
     218          AND tr.refund_id IS NULL
     219    ) THEN
     220        RAISE EXCEPTION 'Access Denied: You can only rate events you attended and did not refund.';
     221    END IF;
     222
     223    RETURN NEW;
     224END;
     225$$ LANGUAGE plpgsql;
     226
     227CREATE TRIGGER check_rating_eligibility_before_insert
     228BEFORE INSERT ON "Event_Happening_Rating"
     229FOR EACH ROW EXECUTE FUNCTION trg_validate_event_rating();
     230
     231}}}