Compare commits

..

8 commits

Author SHA1 Message Date
259d63b66e add seed test
All checks were successful
continuous-integration/drone/push Build is passing
2025-10-20 20:11:48 +02:00
0af3ac7b69 fix validation behaviour 2025-10-20 20:11:48 +02:00
3b8682bb52 refactor: email sync changes 2025-10-20 20:11:48 +02:00
7d570687c0 refactor: email validations 2025-10-20 20:11:48 +02:00
1fe4a9bb06 refactor: email sync changes 2025-10-20 20:11:48 +02:00
67cfcc5c41 feat: email uniqueness constraint between user and member 2025-10-20 20:11:48 +02:00
f390c5a965 add action changes for email sync 2025-10-20 20:11:48 +02:00
7df34ce5ea email sync tests 2025-10-20 20:11:48 +02:00

View file

@ -1,49 +0,0 @@
## Core Rules
1. **User.email is source of truth** - Always overrides member email when linking
2. **DB constraints** - Prevent duplicates within same table (users.email, members.email)
3. **Custom validations** - Prevent cross-table conflicts only for linked entities
4. **Sync is bidirectional**: User ↔ Member (but User always wins on link)
---
## Decision Tree
```
Action: Create/Update/Link Entity with Email X
├─ Does Email X violate DB constraint (same table)?
│ └─ YES → ❌ FAIL (two users or two members with same email)
├─ Is Entity currently linked? (or being linked?)
│ │
│ ├─ NO (unlinked entity)
│ │ └─ ✅ SUCCESS (no custom validation)
│ │
│ └─ YES (linked or linking)
│ │
│ ├─ Action: Update Linked User Email
│ │ ├─ Email used by other member? → ❌ FAIL (validation)
│ │ └─ Email unique? → ✅ SUCCESS + sync to member
│ │
│ ├─ Action: Update Linked Member Email
│ │ ├─ Email used by other user? → ❌ FAIL (validation)
│ │ └─ Email unique? → ✅ SUCCESS + sync to user
│ │
│ ├─ Action: Link User to Member (both directions)
│ │ ├─ User email used by other member? → ❌ FAIL (validation)
│ │ └─ Otherwise → ✅ SUCCESS + override member email
```
## Sync Triggers
| Action | Sync Direction | When |
|--------|---------------|------|
| Update linked user email | User → Member | Email changed |
| Update linked member email | Member → User | Email changed |
| Link user to member | User → Member | Always (override) |
| Link member to user | User → Member | Always (override) |
| Unlink | None | Emails stay as-is |