Intranet Prépavogt Alumni

Documentation interne · Django 5.1 · DRF · React · PostgreSQL · Cloudinary · Resend

v0.7.0 PROD

Modèles de données

Architecture RGPD-compliant : séparation stricte entre base de contacts privée et annuaire public.

Principe d'architecture RGPD

🔒 Base privée (admin)

ContactBase — tous les anciens élèves identifiés, importés CSV. Jamais exposé via l'API publique.

✅ Activation + Consentement

L'alumni clique le lien, crée son mot de passe et coche le consentement RGPD explicite.

📖 Annuaire public (membres)

AlumniProfile — créé uniquement si consentement = True. Visible aux membres connectés.

ContactBase

apps/accounts/models.py
Privé — admin uniquement

Base de contacts importée depuis CSV. Contient tous les anciens élèves identifiés, qu'ils aient activé leur compte ou non. Jamais exposée via l'API publique.

Champ Description Statut
first_name / last_name Nom et prénom Obligatoire
email Adresse email — identifiant unique Obligatoire
promotion_year Année de promotion Obligatoire
filiere Filière (INGE, MF, SPH, IGC, IGEA) Obligatoire
phone Numéro de téléphone Optionnel
academic_major Spécialité académique Pré-rempli CSV
last_diploma Dernier diplôme Pré-rempli CSV
last_school Dernière école / université Pré-rempli CSV
education_level Niveau d'études Pré-rempli CSV
current_situation Situation actuelle Pré-rempli CSV
company Entreprise actuelle Pré-rempli CSV
current_role Fonction actuelle Pré-rempli CSV
linkedin_url Profil LinkedIn Pré-rempli CSV
is_activated Compte activé Auto

User

apps/accounts/models.py
Privé — authentification

Utilisateur Django personnalisé (email-based). Créé lors de l'activation. Relié à ContactBase par OneToOne.

Champ Description Statut
email Email — identifiant de connexion Obligatoire
password Mot de passe haché (PBKDF2) Obligatoire
contact_base Lien vers ContactBase (O2O, nullable) Obligatoire
is_verified Compte vérifié via lien activation Auto
is_active / is_staff Statuts Django standard Auto

ActivationToken

apps/accounts/models.py
Privé — temporaire

Token d'activation unique valable 7 jours. Généré lors de l'envoi d'invitation. Précédents tokens invalidés à chaque renvoi.

Champ Description Statut
token Token URL-safe (64 chars, secrets.token_urlsafe) Auto
contact Lien vers ContactBase FK
expires_at Expiration (now + 7 jours) Auto
is_used Consommé à l'activation Auto

AlumniProfile

apps/alumni/models.py
Public — membres connectés

Profil visible dans l'annuaire. Créé UNIQUEMENT si consent_given=True. save() lève ValueError si consent_given=False.

Champ Description Statut
user Lien vers User (O2O) Obligatoire
consent_given Consentement RGPD (doit être True) Obligatoire
is_visible Visible dans l'annuaire Défaut True
filiere Filière PrépaVogt Pré-rempli
city Ville actuelle Optionnel
current_role Fonction actuelle Pré-rempli
company Entreprise Pré-rempli
sector Secteur d'activité (nouveau) Optionnel
skills Compétences — JSONField liste (nouveau) Optionnel
bio Biographie courte Optionnel
academic_major Spécialité Pré-rempli
last_diploma / last_school Parcours diplôme Pré-rempli
education_level Niveau d'études Pré-rempli
current_situation Situation (étudiant, salarié…) Pré-rempli
linkedin_url LinkedIn Pré-rempli
phone Téléphone (si partagé) Optionnel

Article

apps/news/models.py
Membres connectés

Articles et actualités publiés via l'admin Django (CKEditor 5). Covertures stockées sur Cloudinary. Accessible aux membres connectés uniquement.

Champ Description Statut
title Titre de l'article Obligatoire
slug Slug unique auto-généré (slugify + déduplication) Auto
content Corps HTML (CKEditor 5) Obligatoire
excerpt Extrait (auto depuis content si vide) Optionnel
cover_image Image de couverture (Cloudinary) Optionnel
category Catégorie (EVENEMENT, SUCCESS, ANNONCE…) Optionnel
author Auteur (FK User) Auto — requester en admin
is_published Publié (visible via API) Défaut False
published_at Date de publication Auto à la publication
created_at / updated_at Horodatage Auto

PasswordResetToken

apps/accounts/models.py
Privé — temporaire

Token de réinitialisation de mot de passe. Valable 24h. Endpoint POST /api/auth/password-reset/confirm/ pour confirmer.

Champ Description Statut
token Token URL-safe (64 chars) Auto
user Lien vers User FK
expires_at Expiration (now + 24h) Auto
is_used Consommé Auto