wiki:ShowReviews

Version 2 (modified by 202033, 3 weeks ago) ( diff )

--

Преглед на рецензии за услуга

Актери

  • Најавен или ненајавен корисник

Чекор 1

Корисникот се наоѓа на страницата за Преглед на услуги и избира конкретна услуга, по што кликнува на копчето „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“.

Attachments (1)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.