Refactoring
This commit is contained in:
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user