Files
roadwave/docs/domains/_shared/entities/parental-consents.md
jpgiannetti 23fe67470b 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
2026-02-12 20:49:02 +01:00

2.4 KiB

Parental Consents

📖 Consentements parentaux pour utilisateurs 13-15 ans (Article 8 RGPD)

Diagramme

Table users {
  id uuid [primary key]
  birthdate date [not null]
}

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)']

  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

Workflow :

  1. Ado saisit email parent → validation_token généré (expire 7j)
  2. Parent clique lien → validated = true
  3. Parent configure PARENTAL_CONTROLS
  4. Révocation possible → revoked_at renseigné

Restrictions par défaut (13-15 ans) :

  • gps_enabled: false (GeoIP uniquement)
  • messaging_enabled: false
  • content_16plus_enabled: false
  • Dashboard parent : notifications hebdomadaires activité