1.9 KiB
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()