Files

33 lines
2.1 KiB
SQL

-- تراکنش‌ها: ثبتِ نوع محصول (kind) و قیمتِ پرداخت‌شده (price_toman) در خریدها.
-- تا پیش از این، خرید فقط بسته‌ی دریافتی (سکه/بلیط/VIP) را ثبت می‌کرد؛ نه نوع و نه
-- مبلغ را. این دو ستون برای پنلِ «تراکنش‌ها» لازم است و از این پس هنگامِ ثبتِ خرید
-- پر می‌شوند. ردیف‌های قدیمی با توجه به کاتالوگِ فعلی backfill می‌شوند.
ALTER TABLE purchases ADD COLUMN kind TEXT NOT NULL DEFAULT '';
ALTER TABLE purchases ADD COLUMN price_toman INTEGER NOT NULL DEFAULT 0;
-- Backfill نوع: اولویت سکه → بلیط → VIP → بوستر. ردیف‌های غیرِ verified هیچ
-- بسته‌ای نگرفته‌اند پس نوعشان نامعلوم می‌ماند ('' نه 'booster' تا دوپاره نشود).
UPDATE purchases SET kind = CASE
WHEN status != 'verified' THEN ''
WHEN coins > 0 THEN 'coin'
WHEN tickets > 0 THEN 'ticket'
WHEN vip_days > 0 THEN 'vip'
ELSE 'booster'
END
WHERE kind = '';
-- Backfill قیمت؛ با توجه به نوع، چون شناسه‌ی محصول بین جدول‌های کاتالوگ مشترک است
-- (مثلاً 'small' هم در coin_packages هست و هم در ticket_packages). محصولِ حذف‌شده → ۰.
UPDATE purchases SET price_toman = CASE kind
WHEN 'coin' THEN COALESCE((SELECT price_toman FROM coin_packages WHERE id = purchases.product_id), 0)
WHEN 'ticket' THEN COALESCE((SELECT price_toman FROM ticket_packages WHERE id = purchases.product_id), 0)
WHEN 'booster' THEN COALESCE((SELECT price_toman FROM boosters WHERE id = purchases.product_id), 0)
WHEN 'vip' THEN COALESCE((SELECT price_toman FROM vip_packages WHERE id = purchases.product_id), 0)
ELSE 0
END
WHERE price_toman = 0;
-- ایندکس برای فیلترِ وضعیت + آمارِ روزانه/ماهانه در پنلِ تراکنش‌ها.
CREATE INDEX IF NOT EXISTS idx_purchases_status_created ON purchases(status, created_at);