| | 201 | |
| | 202 | === trg_validate_event_rating |
| | 203 | |
| | 204 | Овој тригер овозможува оставање на рејтинг само за корисници кои поседуваат валиден билет за конкретниот настан. Системот проверува дали постои купопродажен запис кој не е поврзан со рефундација, со што се спречува лажно оценување од корисници кои не присуствувале на настанот. |
| | 205 | |
| | 206 | {{{ |
| | 207 | |
| | 208 | CREATE OR REPLACE FUNCTION trg_validate_event_rating() |
| | 209 | RETURNS TRIGGER AS $$ |
| | 210 | BEGIN |
| | 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; |
| | 224 | END; |
| | 225 | $$ LANGUAGE plpgsql; |
| | 226 | |
| | 227 | CREATE TRIGGER check_rating_eligibility_before_insert |
| | 228 | BEFORE INSERT ON "Event_Happening_Rating" |
| | 229 | FOR EACH ROW EXECUTE FUNCTION trg_validate_event_rating(); |
| | 230 | |
| | 231 | }}} |