From f4831e93a7c49aaf97bca0acbc6b211ce1a3e862 Mon Sep 17 00:00:00 2001 From: Zareian Date: Tue, 13 Oct 2026 14:47:24 +0330 Subject: [PATCH] Docs: payment event ledger and its CSV export on the backup server Co-Authored-By: Claude Opus 5.5 --- CLAUDE.md | 3 +++ docs/operations.md | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index ee09825..54d2929 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -566,6 +566,9 @@ anyone who can read this repo can forge a token for any user.** نه `/etc`) سقفِ چیزی است که در قطعیِ ۲۴۷ روی دیسکِ ۲۴۹ جمع می‌شود. قطعیِ طولانی‌تر اسلات را `lost` می‌کند (رویه در docs). - **پایش:** `OFFSITE_WAL_SLOT=zareian_247` در `.env`ِ ۲۴۹؛ `/api/health` (با کلید) `offsiteBackup` و هشدار می‌دهد (`config/tests_offsite_backup.py`). شکستِ نسخه‌ی روزانه فقط در `journalctl -u zareian-pg-basebackup`ِ ۲۴۷ دیده می‌شود. +- **دفترِ خرید** (`payment.PaymentEvent`، از ۲۰۲۶-۱۰-۱۳، `44ad2ea`): هر قدمِ خرید یک ردیف؛ با WAL به ۲۴۷ می‌رود و هر ۶ ساعت + `zareian-pg-export-events` آن را (با سفارش/تراکنش) CSV در `~/zareian-pgbackup/payment-log/` می‌کند. سنجیده: کال‌بکِ جعلی روی ۲۴۹ → ردیف → CSVِ ۲۴۷. + نسنجیده: یک خریدِ واقعی تا آخر. شرح: `docs/operations.md` «دفترِ خرید». - **سنجیده (۲۰۲۶-۱۰-۱۰):** کلید شِل نمی‌گیرد و تونل به پورتِ دیگر رد می‌شود؛ `restore-check.sh` روی ۲۴۷ شمارش و آخرین زمانِ کاربر/ورود/سفارش/تراکنش/تغییرِ وضعیت را برابرِ ۲۴۹ داد؛ یک ردیفِ آزمایشی که بعد از نسخه‌ی کامل روی ۲۴۹ نوشته شد ۲ ثانیه بعد در بازیابیِ ۲۴۷ بود (جدولش پاک شد). **نسنجیده:** ری‌بوتِ ۲۴۷، قطعیِ طولانی تا `lost`، اجرای خودکارِ timer diff --git a/docs/operations.md b/docs/operations.md index cd4ab93..ea6c567 100644 --- a/docs/operations.md +++ b/docs/operations.md @@ -82,6 +82,19 @@ curl -i https://mathapi.tadrisino2.ir/api/health بکاپِ شبانه‌ی جداگانه (`backup_db` با cron) حذف شد: کپیِ زنده همان کار را بهتر می‌کند و ایمیجِ روزانه را ادمین دارد. +### دفترِ خرید (`PaymentEvent`) روی هر دو سرور + +هر قدمِ مسیرِ خرید یک ردیف در جدولِ `payment_paymentevent` می‌نویسد (`payment/events.py`): `order_created`، +`discount_applied`، `gateway_redirect`، `gateway_request_failed`، `callback_received`، `callback_unknown_authority`، +`payment_result` (همه‌ی مسیرها: کال‌بک، بازسنجی، بازار، تمدیدِ بازار، کدِ ۱۰۰٪؛ با `ignored` برای تکراری/جعلی)، +`bazaar_start`، `admin_cancel`، `admin_refund`. توکنِ خریدِ بازار در آن نمی‌رود. ادمین: «Payment events» (فقط‌خواندنی). + +چون جدول در همان Postgres است با WAL لحظه‌ای به ۲۴۷ می‌رسد. روی ۲۴۷، `zareian-pg-export-events.timer` +(۰۱:۱۵، ۰۷:۱۵، ۱۳:۱۵، ۱۹:۱۵) با `bin/export-payment-events.sh` از روی همان بکاپ (نمونه‌ی موقت روی سوکتِ داخلِ پوشه، +بی‌اتصال به ۲۴۹ یا Postgresِ دیگران) سه CSVِ تجمعی در `~/zareian-pgbackup/payment-log/` می‌نویسد: +`payment-events-*`، `orders-*`، `transactions-*`؛ ۱۴ تای آخرِ هر نوع می‌ماند. شکستش در +`journalctl -u zareian-pg-export-events`ِ ۲۴۷. زیرِ ۳ گیگ فضای آزاد اجرا نمی‌شود. + ### کپیِ زنده چطور کار می‌کند Postgres هر تغییر را اول در یک دفترِ پیوسته (WAL) می‌نویسد. سرورِ ۲۴۷ این دفتر را با ابزارِ خودِ Postgres