33 lines
2.1 KiB
SQL
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);
|