Files
clinicpro/docs/phase2_taskes/task-16-smart-dashboard/database.md
T

1.9 KiB

پایگاه داده — تسک ۱۶: داشبورد هوشمند

هیچ migration لازم نیست

همه داده‌ها از جداول موجود و جداول ساخته‌شده در تسک‌های قبل خوانده می‌شوند.

Query های جدید

نوبت‌ها بر اساس روز (admin chart)

SELECT 
    FLOOR(created_at / 86400) * 86400 AS date_unix,
    COUNT(*) AS count
FROM appointments
WHERE created_at BETWEEN :from AND :to
GROUP BY date_unix
ORDER BY date_unix ASC

درآمد بر اساس روز (از patient_sessions)

SELECT 
    FLOOR(created_at / 86400) * 86400 AS date_unix,
    SUM(final_price_rials) AS amount_rials
FROM patient_sessions
WHERE entity_type = :entityType 
  AND record_id IN (
      SELECT id FROM patient_records WHERE entity_type = :entityType AND entity_id = :entityId
  )
  AND created_at BETWEEN :from AND :to
GROUP BY date_unix
ORDER BY date_unix ASC

فروش اشتراک بر اساس پنل (admin)

SELECT 
    sp.name AS plan,
    COUNT(cs.id) AS count,
    SUM(p.amount) AS total_rials
FROM clinic_subscriptions cs
JOIN subscription_plans sp ON cs.plan_id = sp.id
LEFT JOIN payments p ON cs.payment_id = p.id
WHERE cs.is_trial = 0
  AND cs.created_at BETWEEN :from AND :to
GROUP BY sp.name

بیماران منحصربه‌فرد در بازه

SELECT COUNT(DISTINCT pr.user_id) AS unique_count
FROM patient_records pr
JOIN patient_sessions ps ON ps.record_id = pr.id
WHERE pr.entity_type = :entityType 
  AND pr.entity_id = :entityId
  AND ps.created_at BETWEEN :from AND :to

نکات مهم

  • تمام created_at ها Unix timestamp هستند — فیلتر بازه زمانی مستقیم روی عدد اعمال می‌شود
  • گروه‌بندی روزانه: FLOOR(created_at / 86400) * 86400 → شروع روز به Unix
  • نمایش در frontend: تبدیل Unix به تاریخ شمسی با formatDate()