Changes between Version 29 and Version 30 of AdvancedApplicationDevelopment


Ignore:
Timestamp:
09/30/25 10:21:53 (2 weeks ago)
Author:
223270
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedApplicationDevelopment

    v29 v30  
    117117END;
    118118$$;
     119}}}
     120
     1213. Наместо автоматско деактивирање, тригерот само бележи дали е под прагот за просечна оцена >=3 со минимум 5 рецензии.
     122{{{
     123ALTER TABLE destination
     124ADD COLUMN IF NOT EXISTS flagged_low_rating BOOLEAN NOT NULL DEFAULT FALSE;
     125
     126CREATE OR REPLACE FUNCTION recalc_destination_flag(p_dest INT)
     127RETURNS VOID LANGUAGE plpgsql AS $$
     128DECLARE
     129    avg_rating FLOAT;
     130    total_reviews INT;
     131BEGIN
     132    SELECT COUNT(*), COALESCE(AVG(quality),0) INTO total_reviews, avg_rating
     133    FROM review
     134    WHERE id_destination = p_dest;
     135
     136    IF total_reviews >= 5 AND avg_rating < 3 THEN
     137        UPDATE destination SET flagged_low_rating = TRUE WHERE id_destination = p_dest;
     138    ELSE
     139        UPDATE destination SET flagged_low_rating = FALSE WHERE id_destination = p_dest;
     140    END IF;
     141END;
     142$$;
     143
     144CREATE OR REPLACE FUNCTION trg_review_flag_trigger()
     145RETURNS TRIGGER LANGUAGE plpgsql AS $$
     146BEGIN
     147    IF TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN
     148        PERFORM recalc_destination_flag(NEW.id_destination);
     149    ELSIF TG_OP = 'DELETE' THEN
     150        PERFORM recalc_destination_flag(OLD.id_destination);
     151    END IF;
     152    RETURN COALESCE(NEW, OLD);
     153END;
     154$$;
     155
     156DROP TRIGGER IF EXISTS trg_review_after ON review;
     157CREATE TRIGGER trg_review_after
     158AFTER INSERT OR UPDATE OR DELETE ON review
     159FOR EACH ROW EXECUTE FUNCTION trg_review_flag_trigger();
    119160}}}
    120161