Changes between Version 12 and Version 13 of AdvancedApplicationDevelopment
- Timestamp:
- 09/30/25 08:36:43 (2 weeks ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
AdvancedApplicationDevelopment
v12 v13 31 31 32 32 1. Деактивирање дестинација со негативни рецензии 33 Де активира дестинација само ако просечната оцена падне под еден праг, а не на првата ниска оцена. Всушност дестинацијата ќе се деактивира само ако навистина падне просечната оцена.33 Дестинација се означува како is_flagged само ако има најмалку 5 рецензии и просечната оцена е под 3.0. Користејќи функција recalc_destination_flag и тригери што реагираат на INSERT, UPDATE и DELETE во табелата review. Предност: не се брише/сокрива содржината од корисникот, но се дава сигнал (за филтрирање или admin action) со стабилен праг. 34 34 {{{ 35 35 ALTER TABLE destination 36 ADD COLUMN IF NOT EXISTS aktivna BOOLEAN NOT NULL DEFAULT TRUE; 37 }}} 38 39 {{{ 40 CREATE OR REPLACE FUNCTION check_avg_rating() 41 RETURNS TRIGGER AS $$ 36 ADD COLUMN IF NOT EXISTS is_flagged BOOLEAN NOT NULL DEFAULT FALSE; 37 38 CREATE OR REPLACE FUNCTION recalc_destination_flag(p_dest INT) 39 RETURNS VOID LANGUAGE plpgsql AS $$ 42 40 DECLARE 43 41 avg_rating FLOAT; 44 BEGIN 45 SELECT AVG(quality) INTO avg_rating 42 total_reviews INT; 43 BEGIN 44 SELECT AVG(quality), COUNT(*) INTO avg_rating, total_reviews 46 45 FROM review 47 WHERE id_destination = NEW.id_destination;48 49 IF avg_rating < 4THEN50 UPDATE destination 51 SET aktivna = FALSE52 WHERE id_destination = NEW.id_destination;46 WHERE id_destination = p_dest; 47 48 IF total_reviews >= 5 AND COALESCE(avg_rating,0) < 3 THEN 49 UPDATE destination SET is_flagged = TRUE WHERE id_destination = p_dest; 50 ELSE 51 UPDATE destination SET is_flagged = FALSE WHERE id_destination = p_dest; 53 52 END IF; 54 55 RETURN NEW; 56 END; 57 $$ LANGUAGE plpgsql; 58 59 CREATE TRIGGER trg_avg_rating 53 END; 54 $$; 55 56 CREATE OR REPLACE FUNCTION trg_recalc_dest_flag_trigger() 57 RETURNS TRIGGER LANGUAGE plpgsql AS $$ 58 BEGIN 59 PERFORM recalc_destination_flag(NEW.id_destination) WHEN (TG_OP = 'INSERT' OR TG_OP = 'UPDATE'); 60 IF TG_OP = 'DELETE' THEN 61 PERFORM recalc_destination_flag(OLD.id_destination); 62 END IF; 63 RETURN COALESCE(NEW, OLD); 64 END; 65 $$; 66 67 DROP TRIGGER IF EXISTS trg_review_after_insert ON review; 68 CREATE TRIGGER trg_review_after_insert 60 69 AFTER INSERT ON review 61 FOR EACH ROW 62 EXECUTE FUNCTION check_avg_rating(); 70 FOR EACH ROW EXECUTE FUNCTION trg_recalc_dest_flag_trigger(); 71 72 DROP TRIGGER IF EXISTS trg_review_after_update ON review; 73 CREATE TRIGGER trg_review_after_update 74 AFTER UPDATE ON review 75 FOR EACH ROW EXECUTE FUNCTION trg_recalc_dest_flag_trigger(); 76 77 DROP TRIGGER IF EXISTS trg_review_after_delete ON review; 78 CREATE TRIGGER trg_review_after_delete 79 AFTER DELETE ON review 80 FOR EACH ROW EXECUTE FUNCTION trg_recalc_dest_flag_trigger(); 63 81 }}} 64 82