/// Interface du repository des membres (Clean Architecture) library membre_repository_interface; import '../../data/models/membre_complete_model.dart'; import '../../../../shared/models/membre_search_result.dart'; import '../../../../shared/models/membre_search_criteria.dart'; /// Interface définissant le contrat du repository des membres /// Implémentée par MembreRepositoryImpl dans la couche data abstract class IMembreRepository { /// Récupère la liste des membres avec pagination Future getMembres({ int page = 0, int size = 20, String? recherche, }); /// Récupère un membre par son ID Future getMembreById(String id); /// Crée un nouveau membre Future createMembre(MembreCompletModel membre); /// Met à jour un membre Future updateMembre(String id, MembreCompletModel membre); /// Supprime un membre Future deleteMembre(String id); /// Active un membre Future activateMembre(String id); /// Désactive un membre Future deactivateMembre(String id); /// Recherche avancée de membres Future searchMembres({ required MembreSearchCriteria criteria, int page = 0, int size = 20, }); /// Récupère les membres actifs Future getActiveMembers({int page = 0, int size = 20}); /// Récupère les membres du bureau Future getBureauMembers({int page = 0, int size = 20}); /// Récupère les statistiques des membres Future> getMembresStats(); /// Réinitialise le mot de passe d'un membre — retourne le membre avec motDePasseTemporaire Future resetMotDePasse(String id); /// Affecte un membre à une organisation (superadmin uniquement) Future affecterOrganisation(String membreId, String organisationId); // ── Cycle de vie des adhésions ─────────────────────────────────────────── /// Invite un membre dans une organisation (statut INVITE, token 7j) Future> inviterMembre(String membreId, String organisationId, {String? roleOrg}); /// Active l'adhésion d'un membre (EN_ATTENTE/INVITE/SUSPENDU → ACTIF) Future> activerAdhesion(String membreId, String organisationId, {String? motif}); /// Suspend l'adhésion d'un membre (ACTIF → SUSPENDU) Future> suspendrAdhesion(String membreId, String organisationId, {String? motif}); /// Radie un membre d'une organisation Future> radierAdhesion(String membreId, String organisationId, {String? motif}); }