Refactoring

This commit is contained in:
DahoudG
2025-09-17 17:54:06 +00:00
parent 12d514d866
commit 63fe107f98
165 changed files with 54220 additions and 276 deletions

View File

@@ -0,0 +1,310 @@
import 'package:dartz/dartz.dart';
import '../../../../core/error/failures.dart';
import '../entities/notification.dart';
import '../entities/preferences_notification.dart';
/// Repository abstrait pour la gestion des notifications
abstract class NotificationsRepository {
// === GESTION DES NOTIFICATIONS ===
/// Récupère les notifications d'un utilisateur
///
/// [utilisateurId] ID de l'utilisateur
/// [includeArchivees] Inclure les notifications archivées
/// [limite] Nombre maximum de notifications à retourner
/// [offset] Décalage pour la pagination
Future<Either<Failure, List<NotificationEntity>>> obtenirNotifications({
required String utilisateurId,
bool includeArchivees = false,
int limite = 50,
int offset = 0,
});
/// Récupère une notification spécifique
///
/// [notificationId] ID de la notification
Future<Either<Failure, NotificationEntity>> obtenirNotification(String notificationId);
/// Marque une notification comme lue
///
/// [notificationId] ID de la notification
/// [utilisateurId] ID de l'utilisateur
Future<Either<Failure, void>> marquerCommeLue(String notificationId, String utilisateurId);
/// Marque toutes les notifications comme lues
///
/// [utilisateurId] ID de l'utilisateur
Future<Either<Failure, void>> marquerToutesCommeLues(String utilisateurId);
/// Marque une notification comme importante
///
/// [notificationId] ID de la notification
/// [utilisateurId] ID de l'utilisateur
/// [importante] true pour marquer comme importante, false pour enlever
Future<Either<Failure, void>> marquerCommeImportante(
String notificationId,
String utilisateurId,
bool importante,
);
/// Archive une notification
///
/// [notificationId] ID de la notification
/// [utilisateurId] ID de l'utilisateur
Future<Either<Failure, void>> archiverNotification(String notificationId, String utilisateurId);
/// Archive toutes les notifications lues
///
/// [utilisateurId] ID de l'utilisateur
Future<Either<Failure, void>> archiverToutesLues(String utilisateurId);
/// Supprime une notification
///
/// [notificationId] ID de la notification
/// [utilisateurId] ID de l'utilisateur
Future<Either<Failure, void>> supprimerNotification(String notificationId, String utilisateurId);
/// Supprime toutes les notifications archivées
///
/// [utilisateurId] ID de l'utilisateur
Future<Either<Failure, void>> supprimerToutesArchivees(String utilisateurId);
// === FILTRAGE ET RECHERCHE ===
/// Recherche des notifications par critères
///
/// [utilisateurId] ID de l'utilisateur
/// [query] Texte de recherche
/// [types] Types de notifications à inclure
/// [statuts] Statuts de notifications à inclure
/// [dateDebut] Date de début de la période
/// [dateFin] Date de fin de la période
/// [limite] Nombre maximum de résultats
Future<Either<Failure, List<NotificationEntity>>> rechercherNotifications({
required String utilisateurId,
String? query,
List<TypeNotification>? types,
List<StatutNotification>? statuts,
DateTime? dateDebut,
DateTime? dateFin,
int limite = 50,
});
/// Récupère les notifications par type
///
/// [utilisateurId] ID de l'utilisateur
/// [type] Type de notification
/// [limite] Nombre maximum de notifications
Future<Either<Failure, List<NotificationEntity>>> obtenirNotificationsParType(
String utilisateurId,
TypeNotification type, {
int limite = 50,
});
/// Récupère les notifications non lues
///
/// [utilisateurId] ID de l'utilisateur
/// [limite] Nombre maximum de notifications
Future<Either<Failure, List<NotificationEntity>>> obtenirNotificationsNonLues(
String utilisateurId, {
int limite = 50,
});
/// Récupère les notifications importantes
///
/// [utilisateurId] ID de l'utilisateur
/// [limite] Nombre maximum de notifications
Future<Either<Failure, List<NotificationEntity>>> obtenirNotificationsImportantes(
String utilisateurId, {
int limite = 50,
});
// === STATISTIQUES ===
/// Récupère le nombre de notifications non lues
///
/// [utilisateurId] ID de l'utilisateur
Future<Either<Failure, int>> obtenirNombreNonLues(String utilisateurId);
/// Récupère les statistiques des notifications
///
/// [utilisateurId] ID de l'utilisateur
/// [periode] Période d'analyse (en jours)
Future<Either<Failure, Map<String, dynamic>>> obtenirStatistiques(
String utilisateurId, {
int periode = 30,
});
// === ACTIONS SUR LES NOTIFICATIONS ===
/// Exécute une action rapide sur une notification
///
/// [notificationId] ID de la notification
/// [actionId] ID de l'action à exécuter
/// [utilisateurId] ID de l'utilisateur
/// [parametres] Paramètres additionnels pour l'action
Future<Either<Failure, Map<String, dynamic>>> executerActionRapide(
String notificationId,
String actionId,
String utilisateurId, {
Map<String, dynamic>? parametres,
});
/// Signale une notification comme spam
///
/// [notificationId] ID de la notification
/// [utilisateurId] ID de l'utilisateur
/// [raison] Raison du signalement
Future<Either<Failure, void>> signalerSpam(
String notificationId,
String utilisateurId,
String raison,
);
// === PRÉFÉRENCES DE NOTIFICATION ===
/// Récupère les préférences de notification d'un utilisateur
///
/// [utilisateurId] ID de l'utilisateur
Future<Either<Failure, PreferencesNotificationEntity>> obtenirPreferences(String utilisateurId);
/// Met à jour les préférences de notification
///
/// [preferences] Nouvelles préférences
Future<Either<Failure, void>> mettreAJourPreferences(PreferencesNotificationEntity preferences);
/// Réinitialise les préférences aux valeurs par défaut
///
/// [utilisateurId] ID de l'utilisateur
Future<Either<Failure, PreferencesNotificationEntity>> reinitialiserPreferences(String utilisateurId);
/// Active/désactive un type de notification
///
/// [utilisateurId] ID de l'utilisateur
/// [type] Type de notification
/// [active] true pour activer, false pour désactiver
Future<Either<Failure, void>> toggleTypeNotification(
String utilisateurId,
TypeNotification type,
bool active,
);
/// Active/désactive un canal de notification
///
/// [utilisateurId] ID de l'utilisateur
/// [canal] Canal de notification
/// [active] true pour activer, false pour désactiver
Future<Either<Failure, void>> toggleCanalNotification(
String utilisateurId,
CanalNotification canal,
bool active,
);
/// Configure le mode silencieux
///
/// [utilisateurId] ID de l'utilisateur
/// [active] true pour activer le mode silencieux
/// [heureDebut] Heure de début (format HH:mm)
/// [heureFin] Heure de fin (format HH:mm)
/// [jours] Jours de la semaine (1=Lundi, 7=Dimanche)
Future<Either<Failure, void>> configurerModeSilencieux(
String utilisateurId,
bool active, {
String? heureDebut,
String? heureFin,
Set<int>? jours,
});
// === GESTION DES TOKENS FCM ===
/// Enregistre ou met à jour le token FCM
///
/// [utilisateurId] ID de l'utilisateur
/// [token] Token FCM
/// [plateforme] Plateforme (android, ios)
Future<Either<Failure, void>> enregistrerTokenFCM(
String utilisateurId,
String token,
String plateforme,
);
/// Supprime le token FCM
///
/// [utilisateurId] ID de l'utilisateur
Future<Either<Failure, void>> supprimerTokenFCM(String utilisateurId);
// === NOTIFICATIONS DE TEST ===
/// Envoie une notification de test
///
/// [utilisateurId] ID de l'utilisateur
/// [type] Type de notification à tester
Future<Either<Failure, NotificationEntity>> envoyerNotificationTest(
String utilisateurId,
TypeNotification type,
);
// === CACHE ET SYNCHRONISATION ===
/// Synchronise les notifications avec le serveur
///
/// [utilisateurId] ID de l'utilisateur
/// [forceSync] Force la synchronisation même si le cache est récent
Future<Either<Failure, void>> synchroniser(String utilisateurId, {bool forceSync = false});
/// Vide le cache des notifications
///
/// [utilisateurId] ID de l'utilisateur (optionnel, vide tout si null)
Future<Either<Failure, void>> viderCache([String? utilisateurId]);
/// Vérifie si les données sont en cache et récentes
///
/// [utilisateurId] ID de l'utilisateur
/// [maxAgeMinutes] Âge maximum du cache en minutes
Future<bool> isCacheValide(String utilisateurId, {int maxAgeMinutes = 5});
// === ABONNEMENTS ET TOPICS ===
/// S'abonne à un topic de notifications
///
/// [utilisateurId] ID de l'utilisateur
/// [topic] Nom du topic
Future<Either<Failure, void>> abonnerAuTopic(String utilisateurId, String topic);
/// Se désabonne d'un topic de notifications
///
/// [utilisateurId] ID de l'utilisateur
/// [topic] Nom du topic
Future<Either<Failure, void>> desabonnerDuTopic(String utilisateurId, String topic);
/// Récupère la liste des topics auxquels l'utilisateur est abonné
///
/// [utilisateurId] ID de l'utilisateur
Future<Either<Failure, List<String>>> obtenirTopicsAbornes(String utilisateurId);
// === EXPORT ET SAUVEGARDE ===
/// Exporte les notifications vers un fichier
///
/// [utilisateurId] ID de l'utilisateur
/// [format] Format d'export (json, csv)
/// [dateDebut] Date de début de la période
/// [dateFin] Date de fin de la période
Future<Either<Failure, String>> exporterNotifications(
String utilisateurId,
String format, {
DateTime? dateDebut,
DateTime? dateFin,
});
/// Sauvegarde les notifications localement
///
/// [utilisateurId] ID de l'utilisateur
Future<Either<Failure, void>> sauvegarderLocalement(String utilisateurId);
/// Restaure les notifications depuis une sauvegarde locale
///
/// [utilisateurId] ID de l'utilisateur
Future<Either<Failure, void>> restaurerDepuisSauvegarde(String utilisateurId);
}