docs: migrer schémas BDD de Mermaid vers DBML
Remplace les diagrammes Mermaid par DBML (via kroki-dbml) pour une meilleure expressivité des schémas de base de données : - Ajout support notes, contraintes et indexes détaillés - Migration de tous les schémas d'entités partagées - Ajout fichier exemple dbml-example.md - Configuration plugin mkdocs-kroki pour rendu DBML
This commit is contained in:
@@ -4,34 +4,45 @@
|
||||
|
||||
## Diagramme
|
||||
|
||||
```mermaid
|
||||
erDiagram
|
||||
USERS ||--o{ PARENTAL_CONSENTS : "a"
|
||||
PARENTAL_CONSENTS ||--|| PARENTAL_CONTROLS : "configure"
|
||||
```kroki-dbml
|
||||
Table users {
|
||||
id uuid [primary key]
|
||||
birthdate date [not null]
|
||||
}
|
||||
|
||||
PARENTAL_CONSENTS {
|
||||
uuid id PK
|
||||
uuid user_id FK "Ado 13-15 ans"
|
||||
string parent_email
|
||||
string validation_token
|
||||
boolean validated
|
||||
timestamp token_expires_at
|
||||
timestamp validated_at
|
||||
inet parent_ip
|
||||
string parent_user_agent
|
||||
timestamp revoked_at
|
||||
string revocation_reason
|
||||
}
|
||||
Table parental_consents {
|
||||
id uuid [primary key]
|
||||
user_id uuid [not null, unique, ref: > users.id, note: 'Ado 13-15 ans (1 consent par user max)']
|
||||
parent_email varchar(255) [not null, note: 'Email du parent pour validation']
|
||||
validation_token varchar(64) [unique, note: 'Token de validation envoyé par email (expire 7j)']
|
||||
validated boolean [not null, default: false, note: 'true après clic parent sur lien email']
|
||||
token_expires_at timestamp [not null, note: 'validation_token expire après 7 jours']
|
||||
validated_at timestamp [note: 'Timestamp de validation parent (NULL si non validé)']
|
||||
parent_ip inet [note: 'IP du parent lors de la validation']
|
||||
parent_user_agent text [note: 'User agent parent (preuve validation)']
|
||||
revoked_at timestamp [note: 'Révocation du consentement parental']
|
||||
revocation_reason text [note: 'Raison de la révocation (optionnel)']
|
||||
|
||||
PARENTAL_CONTROLS {
|
||||
uuid id PK
|
||||
uuid parental_consent_id FK
|
||||
boolean gps_enabled
|
||||
boolean messaging_enabled
|
||||
boolean content_16plus_enabled
|
||||
json weekly_digest_config
|
||||
timestamp updated_at
|
||||
}
|
||||
indexes {
|
||||
(user_id) [unique, note: 'Un seul consentement parental actif par user']
|
||||
(validation_token) [unique, note: 'Lookup rapide pour validation lien email']
|
||||
(validated, token_expires_at) [note: 'Cleanup des tokens expirés non validés']
|
||||
}
|
||||
}
|
||||
|
||||
Table parental_controls {
|
||||
id uuid [primary key]
|
||||
parental_consent_id uuid [not null, unique, ref: - parental_consents.id, note: 'One-to-one relationship']
|
||||
gps_enabled boolean [not null, default: false, note: 'Autoriser GPS précis (false = GeoIP uniquement)']
|
||||
messaging_enabled boolean [not null, default: false, note: 'Autoriser messagerie privée']
|
||||
content_16plus_enabled boolean [not null, default: false, note: 'Autoriser contenu 16+']
|
||||
weekly_digest_config jsonb [note: 'Config notifications hebdo parent (email, contenu, format)']
|
||||
updated_at timestamp [not null, default: `now()`]
|
||||
|
||||
indexes {
|
||||
(parental_consent_id) [unique]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Légende
|
||||
|
||||
Reference in New Issue
Block a user