Fix: Saved address now persists across sessions

Root cause: Ephemeral sessions weren't persisted after checkout
- Sessions ephemeral by default, only persisted during CheckoutFlow
- After checkout completes, state changes to MainMenu
- SavedAddress was lost because session wasn't saved

Fix implemented:
- Persist ephemeral sessions when SavedAddress is not null
- Also persist when cart is non-empty (preserve cart state)
- User's saved shipping address now available on next checkout
- Improves UX - no need to re-enter address every time

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
SysAdmin 2025-10-06 04:58:01 +01:00
parent a6f1c32461
commit d897bb99c3

View File

@ -154,8 +154,14 @@ namespace TeleBot.Services
session.LastActivityAt = DateTime.UtcNow; session.LastActivityAt = DateTime.UtcNow;
_inMemorySessions.AddOrUpdate(session.Id, session, (key, old) => session); _inMemorySessions.AddOrUpdate(session.Id, session, (key, old) => session);
// Don't persist ephemeral sessions, except when in checkout flow // Don't persist ephemeral sessions, except when:
if (session.IsEphemeral && session.State != SessionState.CheckoutFlow) // 1. In checkout flow
// 2. Has saved shipping address (user opted to save)
// 3. Has non-empty cart (preserve cart across sessions)
if (session.IsEphemeral &&
session.State != SessionState.CheckoutFlow &&
session.SavedAddress == null &&
session.Cart.IsEmpty())
{ {
return; return;
} }