== Пребарување на дестинации\\ === Актери Регистриран корисник === Реализација 1. Внесување на критериуми за пребарување. Корисникот пристапува до функцијата за пребарување на дестинации, ги внесува своите преференции: * Тип на место (на пример, море, планина) * Посакувана сезона (пролет, лето, есен, зима) * Приоритет (популарност од 1 до 10) 2. Системот потоа: * Ја користи табелата destination како главен извор на податоци. * Преку LEFT JOIN се приклучуваат destination_tag и tag за филтрирање и прикажување на категории/ознаки. * Преку LEFT JOIN кон review и destination_user се добиваат информации за просечен рејтинг и коментари. * Условите се применуваат само ако корисникот внел вредности (инаку се игнорираат). * ILIKE за case-insensitive пребарување. * Популарноста се проверува врз основа на полето popularity од табелата destination. Резултатот е листа на дестинации со основни информации, просечен рејтинг и поврзани ознаки. {{{ SELECT d.id_destination, d.location_name, d.location_desc, d.types_of_places, d.recommended_season, d.country, d.popularity, ARRAY_AGG(DISTINCT t.tag_name) AS tags, COALESCE(ROUND(AVG(r.quality), 2), 0) AS avg_review FROM travel_sage.destination d LEFT JOIN travel_sage.destination_tag dt ON d.id_destination = dt.id_destination LEFT JOIN travel_sage.tag t ON dt.id_tag = t.id_tag LEFT JOIN travel_sage.review r ON d.id_destination = r.id_destination WHERE (:tip IS NULL OR d.types_of_places ILIKE CONCAT('%', :tip, '%')) AND (:sezona IS NULL OR d.recommended_season ILIKE CONCAT('%', :sezona, '%')) AND ( :prioritet_min IS NULL OR :prioritet_max IS NULL OR d.popularity BETWEEN :prioritet_min AND :prioritet_max ) GROUP BY d.id_destination, d.location_name, d.location_desc, d.types_of_places, d.recommended_season, d.country, d.popularity; }}}