| 81 | }}} |
| 82 | |
| 83 | 2. Тежинска просечна оцена, каде што помал број рецензии имаат помала тежина - без деактивирање, само со можност за admin да ги филтрира. |
| 84 | {{{ |
| 85 | CREATE OR REPLACE FUNCTION recalc_destination_flag_weighted(p_dest INT) |
| 86 | RETURNS VOID LANGUAGE plpgsql AS $$ |
| 87 | DECLARE |
| 88 | avg_rating FLOAT; |
| 89 | total_reviews INT; |
| 90 | weight_rating FLOAT; |
| 91 | BEGIN |
| 92 | SELECT AVG(quality), COUNT(*) INTO avg_rating, total_reviews |
| 93 | FROM review |
| 94 | WHERE id_destination = p_dest; |
| 95 | |
| 96 | IF total_reviews < 5 THEN |
| 97 | weight_rating := avg_rating * (total_reviews::FLOAT / 5); |
| 98 | ELSE |
| 99 | weight_rating := avg_rating; |
| 100 | END IF; |
| 101 | |
| 102 | IF total_reviews >= 1 AND COALESCE(weight_rating, 0) < 3 THEN |
| 103 | UPDATE destination SET is_flagged = TRUE WHERE id_destination = p_dest; |
| 104 | ELSE |
| 105 | UPDATE destination SET is_flagged = FALSE WHERE id_destination = p_dest; |
| 106 | END IF; |
| 107 | END; |
| 108 | $$; |