| | 142 | === `create_rating` |
| | 143 | |
| | 144 | Оваа процедура овозможува внесување оценка само доколку корисникот поседува валиден и нерефундиран билет за настанот. Со ова се спречува лажно оценување и се гарантира веродостојност на повратните информации. |
| | 145 | |
| | 146 | {{{ |
| | 147 | |
| | 148 | CREATE OR REPLACE PROCEDURE create_rating( |
| | 149 | p_user_id BIGINT, |
| | 150 | p_event_happening_id BIGINT, |
| | 151 | p_rating INT, |
| | 152 | p_comment TEXT |
| | 153 | ) |
| | 154 | AS $$ |
| | 155 | BEGIN |
| | 156 | IF NOT EXISTS ( |
| | 157 | SELECT 1 |
| | 158 | FROM "Ticket_Purchase" tp |
| | 159 | JOIN "Ticket" t ON tp.ticket_id = t.ticket_id |
| | 160 | LEFT JOIN "Ticket_Refund" tr ON tp.purchase_id = tr.purchase_id |
| | 161 | WHERE tp.user_id = p_user_id |
| | 162 | AND t.event_happening_id = p_event_happening_id |
| | 163 | AND tr.refund_id IS NULL |
| | 164 | ) THEN |
| | 165 | RAISE EXCEPTION 'Access Denied: You can only rate events you attended and did not refund.'; |
| | 166 | END IF; |
| | 167 | |
| | 168 | INSERT INTO "Event_Happening_Rating" (rating, comment, event_happening_id, user_id) |
| | 169 | VALUES (p_rating, p_comment, p_event_happening_id, p_user_id); |
| | 170 | |
| | 171 | RAISE NOTICE 'Rating successfully submitted.'; |
| | 172 | END; |
| | 173 | $$ LANGUAGE plpgsql; |
| | 174 | |
| | 175 | }}} |
| | 176 | |
| 240 | | |
| 241 | | === `trg_validate_event_rating` |
| 242 | | |
| 243 | | Овој тригер овозможува оставање на рејтинг само за корисници кои поседуваат валиден билет за конкретниот настан. Системот проверува дали постои купопродажен запис кој не е поврзан со рефундација, со што се спречува лажно оценување од корисници кои не присуствувале на настанот. |
| 244 | | |
| 245 | | {{{ |
| 246 | | |
| 247 | | CREATE OR REPLACE FUNCTION trg_validate_event_rating() |
| 248 | | RETURNS TRIGGER AS $$ |
| 249 | | BEGIN |
| 250 | | IF NOT EXISTS ( |
| 251 | | SELECT 1 |
| 252 | | FROM "Ticket_Purchase" tp |
| 253 | | JOIN "Ticket" t ON tp.ticket_id = t.ticket_id |
| 254 | | LEFT JOIN "Ticket_Refund" tr ON tp.purchase_id = tr.purchase_id |
| 255 | | WHERE tp.user_id = NEW.user_id |
| 256 | | AND t.event_happening_id = NEW.event_happening_id |
| 257 | | AND tr.refund_id IS NULL |
| 258 | | ) THEN |
| 259 | | RAISE EXCEPTION 'Access Denied: You can only rate events you attended and did not refund.'; |
| 260 | | END IF; |
| 261 | | |
| 262 | | RETURN NEW; |
| 263 | | END; |
| 264 | | $$ LANGUAGE plpgsql; |
| 265 | | |
| 266 | | CREATE TRIGGER check_rating_eligibility_before_insert |
| 267 | | BEFORE INSERT ON "Event_Happening_Rating" |
| 268 | | FOR EACH ROW EXECUTE FUNCTION trg_validate_event_rating(); |
| 269 | | |
| 270 | | }}} |