Changes between Initial Version and Version 1 of ShowReviews


Ignore:
Timestamp:
03/02/26 10:12:50 (3 weeks ago)
Author:
202033
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ShowReviews

    v1 v1  
     1= Преглед на рецензии за услуга
     2
     3== Актери
     4 * Најавен или ненајавен корисник
     5
     6== Чекор 1
     7Корисникот се наоѓа на страницата за
     8[https://develop.finki.ukim.mk/projects/venusbeauty/wiki/ShowServices Преглед на услуги] 
     9и избира конкретна услуга, по што кликнува на копчето „View reviews“.
     10
     11== Чекор 2
     12Системот ја пронаоѓа избраната услуга во веќе вчитаните податоци според `service_id` и го зема полето `reviews` за таа услуга.
     13
     14Секоја рецензија во ова поле содржи:
     15 * `rating` – оценка,
     16 * `comment` – текст на рецензијата,
     17 * `created_at` – датум и време на креирање,
     18 * `reviewer` – корисник кој ја оставил рецензијата.
     19
     20Податоците за рецензиите се генерираат во базата преку следниот SQL поглед:
     21
     22{{{
     23CREATE OR REPLACE VIEW v_services_grouped_by_category AS
     24SELECT
     25  c.category_id,
     26  c.name AS category_name,
     27  COALESCE(
     28    jsonb_agg(
     29      jsonb_build_object(
     30        'service_id', s.service_id,
     31        'name', s.name,
     32        'price', s.price,
     33        'duration_minutes', s.duration_minutes,
     34        'avg_rating', COALESCE(svc.avg_rating, 0),
     35        'review_count', COALESCE(svc.review_count, 0),
     36        'reviews', COALESCE(svc.reviews, '[]'::jsonb)
     37      )
     38      ORDER BY s.service_id
     39    ) FILTER (WHERE s.service_id IS NOT NULL),
     40    '[]'::jsonb
     41  ) AS services
     42FROM category c
     43LEFT JOIN service s ON s.category_id = c.category_id
     44LEFT JOIN LATERAL (
     45  SELECT
     46    ROUND(AVG(r.rating)::numeric, 1) AS avg_rating,
     47    COUNT(r.review_id) AS review_count,
     48    COALESCE(
     49      jsonb_agg(
     50        jsonb_build_object(
     51          'review_id', r.review_id,
     52          'rating', r.rating,
     53          'comment', r.comment,
     54          'created_at', r.created_at,
     55          'reviewer', u.full_name
     56        )
     57        ORDER BY r.created_at DESC
     58      ) FILTER (WHERE r.review_id IS NOT NULL),
     59      '[]'::jsonb
     60    ) AS reviews
     61  FROM appointmentservice aps
     62  JOIN appointment a ON a.appointment_id = aps.appointment_id
     63  JOIN payment p ON p.appointment_id = a.appointment_id
     64  JOIN review r ON r.payment_id = p.payment_id
     65  JOIN "User" u ON u.user_id = a.user_id
     66  WHERE aps.service_id = s.service_id
     67    AND p.status = 'PAID'
     68) svc ON true
     69GROUP BY c.category_id, c.name;
     70}}}
     71
     72== Чекор 3
     73Системот ги прикажува сите рецензии за избраната услуга, вклучувајќи:
     74 * оценка,
     75 * име на рецензентот,
     76 * датум и време,
     77 * текст на коментарот.
     78
     79Корисникот може да ги прегледа сите рецензии и повторно да го затвори делот со кликнување на „View reviews“.
     80
     81[[Image(showreviews-1.jpg, width=600px)]]