docs: add synthetic email warning design spec
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
# Synthetic Email Warning Design
|
||||
|
||||
**Date:** 2026-05-24
|
||||
**Status:** Draft
|
||||
|
||||
## Problem
|
||||
|
||||
When users authenticate via VK without providing a real email, the server generates a synthetic email (`vk_<userId>@vk.local`). These users cannot receive email notifications, but there is no indication of this in the personal account (LK).
|
||||
|
||||
## Solution
|
||||
|
||||
Display an informational MUI Alert in two places when the user's email matches a known synthetic domain:
|
||||
|
||||
1. **AuthMethodsSection** — where the current email is displayed
|
||||
2. **NotificationsPage** — where notification settings are managed
|
||||
|
||||
## Architecture
|
||||
|
||||
### Email Utility
|
||||
|
||||
New file: `client/src/shared/lib/email-utils.ts`
|
||||
|
||||
```ts
|
||||
const SYNTHETIC_DOMAINS = ['vk.local']
|
||||
|
||||
export function isSyntheticEmail(email: string): boolean {
|
||||
return SYNTHETIC_DOMAINS.some(domain => email.endsWith(`@${domain}`))
|
||||
}
|
||||
```
|
||||
|
||||
This is a pure client-side check. The `@vk.local` domain is internal-only — real users cannot register with it.
|
||||
|
||||
### AuthMethodsSection
|
||||
|
||||
Add MUI Alert below the email display:
|
||||
|
||||
```tsx
|
||||
{isSyntheticEmail(user.email) && (
|
||||
<Alert severity="info">
|
||||
Ваша почта сгенерирована автоматически. Без указания реальной почты вы не сможете получать уведомления о заказах.
|
||||
</Alert>
|
||||
)}
|
||||
```
|
||||
|
||||
### NotificationsPage
|
||||
|
||||
Add MUI Alert at the top of the page:
|
||||
|
||||
```tsx
|
||||
{isSyntheticEmail(user.email) && (
|
||||
<Alert severity="info">
|
||||
Ваша почта сгенерирована автоматически. Для получения уведомлений укажите реальную почту в настройках профиля.
|
||||
</Alert>
|
||||
)}
|
||||
```
|
||||
|
||||
## Data Flow
|
||||
|
||||
```
|
||||
user.email (from auth model)
|
||||
→ isSyntheticEmail() check
|
||||
→ true → render Alert
|
||||
→ false → no change
|
||||
```
|
||||
|
||||
## Error Handling
|
||||
|
||||
- No errors possible — pure string comparison
|
||||
- If `user.email` is undefined/null, the check returns `false` (safe)
|
||||
|
||||
## Testing
|
||||
|
||||
- Unit test for `isSyntheticEmail()` with real emails, synthetic emails, edge cases
|
||||
- No component tests needed — trivial conditional rendering
|
||||
Reference in New Issue
Block a user