= Преглед на рецензии за услуга == Актери * Најавен или ненајавен корисник == Чекор 1 Корисникот се наоѓа на страницата за [https://develop.finki.ukim.mk/projects/venusbeauty/wiki/ShowServices Преглед на услуги] и избира конкретна услуга, по што кликнува на копчето „View reviews“. == Чекор 2 Системот ја пронаоѓа избраната услуга во веќе вчитаните податоци според `service_id` и го зема полето `reviews` за таа услуга. Секоја рецензија во ова поле содржи: * `rating` – оценка, * `comment` – текст на рецензијата, * `created_at` – датум и време на креирање, * `reviewer` – корисник кој ја оставил рецензијата. Податоците за рецензиите се генерираат во базата преку следниот SQL поглед: {{{ CREATE OR REPLACE VIEW v_services_grouped_by_category AS SELECT c.category_id, c.name AS category_name, COALESCE( jsonb_agg( jsonb_build_object( 'service_id', s.service_id, 'name', s.name, 'price', s.price, 'duration_minutes', s.duration_minutes, 'avg_rating', COALESCE(svc.avg_rating, 0), 'review_count', COALESCE(svc.review_count, 0), 'reviews', COALESCE(svc.reviews, '[]'::jsonb) ) ORDER BY s.service_id ) FILTER (WHERE s.service_id IS NOT NULL), '[]'::jsonb ) AS services FROM category c LEFT JOIN service s ON s.category_id = c.category_id LEFT JOIN LATERAL ( SELECT ROUND(AVG(r.rating)::numeric, 1) AS avg_rating, COUNT(r.review_id) AS review_count, COALESCE( jsonb_agg( jsonb_build_object( 'review_id', r.review_id, 'rating', r.rating, 'comment', r.comment, 'created_at', r.created_at, 'reviewer', u.full_name ) ORDER BY r.created_at DESC ) FILTER (WHERE r.review_id IS NOT NULL), '[]'::jsonb ) AS reviews FROM appointmentservice aps JOIN appointment a ON a.appointment_id = aps.appointment_id JOIN payment p ON p.appointment_id = a.appointment_id JOIN review r ON r.payment_id = p.payment_id JOIN "User" u ON u.user_id = a.user_id WHERE aps.service_id = s.service_id AND p.status = 'PAID' ) svc ON true GROUP BY c.category_id, c.name; }}} == Чекор 3 Системот ги прикажува сите рецензии за избраната услуга, вклучувајќи: * оценка, * име на рецензентот, * датум и време, * текст на коментарот. Корисникот може да ги прегледа сите рецензии и повторно да го затвори делот со кликнување на „View reviews“. [[Image(reviews-1.jpg, width=600px)]]