The discount tab was wired into AdminSubscriptionPage (route
/admin/admin-subscription, admin-only) but /admin/subscription renders the
doctor/clinic SubscriptionPage. Since discount rules are owner-scoped, add
the segmented «مدیریت تخفیفها» tab there and revert AdminSubscriptionPage.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
SettingsLayout rendered its own role-gated aside while the subscription page
rendered PurchaseSubscriptionSidebar, so /admin/subscription and other settings
pages (sms-wallet, ...) showed two different settings menus. Make SettingsLayout
render the shared PurchaseSubscriptionSidebar and have SubscriptionPage use
SettingsLayout too, so every settings page shows one identical menu. menuForRole
/ SETTINGS_MENU are kept for the mobile settings list (SettingsMenuPage).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The page wrapped its grid in a second maxWidth:1180/margin:auto on top of the
shell's already-centered .content (max-width 1480), leaving a ~150px gap
between the settings menu and the main navigation. Make the page full-width so
the settings sidebar sits flush against the main nav; trim the sidebar column
to 248px to match the app nav width.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Replace wrapping flex (maxWidth cap) with a fills-the-row grid
(repeat(auto-fit, minmax(230px, 1fr))) so the three cards sit in one row
and grow to the content width — removes the empty gap and stray wrap
- Move the most-popular highlight to the professional (top) plan, matching
clinic-pro-tauri
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Drop leaking mobile tab strip; settings sidebar is now desktop-only (hidden
lg:block) and pinned right via grid lg:grid-cols-[280px_minmax(0,1fr)],
matching the SettingsLayout pattern
- Make plan cards responsive (flex 1 1 280px, min 250 / max 340) instead of
fixed 300px width
- Fix secretaries pill bidi rendering (rtl, single label)
- Add Persian label for the 'insurance' plan feature
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Rebuild /admin/subscription to pixel-match clinic-pro-tauri's
setting/purchase-subscription while keeping the real subscription/payment API:
- New PurchaseSubscriptionSidebar (orange-accent settings sidebar, routes preserved)
- New subscriptionIcons (SVGs copied verbatim from tauri source)
- Rewrite SubscriptionPage: 522px plan cards (gradient blur, popular badge,
secretaries pill, period toggle, dashed trial box), 365x104 current-plan card;
wired to /subscription/plans, /subscription/my, /subscription/trial and the
existing payment-gateway modal (no backend change)
- Expand tests: healthy/expiring/expired/no-sub, empty-plans, period toggle, buy modal
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add a doctor/clinic settings sub-navigation shell (SettingsLayout) with
"خرید اشتراک" as its first section, plus a mobile settings-list page.
Rebuild the plan-selection page with a per-plan billing-period toggle,
single price, most-popular badge and a current-plan status banner.
Add a payment-success page that reads the gateway return params
(?payment_uuid&status), shows the transaction receipt and the newly
active plan, and redirects to the plans page with a toast on any
non-success status.
Frontend only — reuses the existing /api/v1/subscription/* and
/api/v1/subscription-payment endpoints; no backend or API-doc changes.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Refactor PaymentController to delegate payment processing to PaymentManager.
- Add findByOrderIdForUpdate method in PaymentRepository for pessimistic locking.
- Create PaymentLog entity and repository for auditing payment actions.
- Implement startGatewayHandoff and processCallback methods in PaymentManager.
- Introduce transaction handling and logging for payment verification.
- Update payment flow to ensure idempotency and prevent race conditions.
- Enhance security by logging sensitive actions without exposing credentials.
- Update database schema with migration for payment_logs table.
- Document changes in payment flow architecture.
- Active subscription card: colored gradient bg, icon, progress bar, expiry warning badge
- Trial banner: shown when no subscription and trial not used yet
- Plan cards: icon header, feature checklist (✓/✗), per-period buy buttons inline
- Free plan card shows "شما اکنون در این پنل هستید" when current
- Payment modal: order summary card + gateway selector with styled radio buttons
- Loading skeleton for plan cards
- Footer with trust signals
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>