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,251 @@
import 'package:dartz/dartz.dart';
import '../../../../core/error/failures.dart';
import '../entities/demande_aide.dart';
import '../entities/proposition_aide.dart';
import '../entities/evaluation_aide.dart';
/// Repository abstrait pour la gestion de la solidarité
///
/// Ce repository définit les contrats pour toutes les opérations
/// liées au système de solidarité : demandes, propositions, évaluations.
abstract class SolidariteRepository {
// === GESTION DES DEMANDES D'AIDE ===
/// Crée une nouvelle demande d'aide
///
/// [demande] La demande d'aide à créer
/// Retourne [Right(DemandeAide)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, DemandeAide>> creerDemandeAide(DemandeAide demande);
/// Met à jour une demande d'aide existante
///
/// [demande] La demande d'aide à mettre à jour
/// Retourne [Right(DemandeAide)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, DemandeAide>> mettreAJourDemandeAide(DemandeAide demande);
/// Obtient une demande d'aide par son ID
///
/// [id] Identifiant de la demande
/// Retourne [Right(DemandeAide)] si trouvée
/// Retourne [Left(Failure)] si non trouvée ou erreur
Future<Either<Failure, DemandeAide>> obtenirDemandeAide(String id);
/// Soumet une demande d'aide pour évaluation
///
/// [demandeId] Identifiant de la demande
/// Retourne [Right(DemandeAide)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, DemandeAide>> soumettreDemande(String demandeId);
/// Évalue une demande d'aide
///
/// [demandeId] Identifiant de la demande
/// [evaluateurId] Identifiant de l'évaluateur
/// [decision] Décision d'évaluation
/// [commentaire] Commentaire de l'évaluateur
/// [montantApprouve] Montant approuvé (optionnel)
/// Retourne [Right(DemandeAide)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, DemandeAide>> evaluerDemande({
required String demandeId,
required String evaluateurId,
required StatutAide decision,
String? commentaire,
double? montantApprouve,
});
/// Recherche des demandes d'aide avec filtres
///
/// [filtres] Critères de recherche
/// Retourne [Right(List<DemandeAide>)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, List<DemandeAide>>> rechercherDemandes({
String? organisationId,
TypeAide? typeAide,
StatutAide? statut,
String? demandeurId,
bool? urgente,
int page = 0,
int taille = 20,
});
/// Obtient les demandes urgentes
///
/// [organisationId] Identifiant de l'organisation
/// Retourne [Right(List<DemandeAide>)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, List<DemandeAide>>> obtenirDemandesUrgentes(String organisationId);
/// Obtient les demandes de l'utilisateur connecté
///
/// [utilisateurId] Identifiant de l'utilisateur
/// Retourne [Right(List<DemandeAide>)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, List<DemandeAide>>> obtenirMesdemandes(String utilisateurId);
// === GESTION DES PROPOSITIONS D'AIDE ===
/// Crée une nouvelle proposition d'aide
///
/// [proposition] La proposition d'aide à créer
/// Retourne [Right(PropositionAide)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, PropositionAide>> creerPropositionAide(PropositionAide proposition);
/// Met à jour une proposition d'aide existante
///
/// [proposition] La proposition d'aide à mettre à jour
/// Retourne [Right(PropositionAide)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, PropositionAide>> mettreAJourPropositionAide(PropositionAide proposition);
/// Obtient une proposition d'aide par son ID
///
/// [id] Identifiant de la proposition
/// Retourne [Right(PropositionAide)] si trouvée
/// Retourne [Left(Failure)] si non trouvée ou erreur
Future<Either<Failure, PropositionAide>> obtenirPropositionAide(String id);
/// Active ou désactive une proposition d'aide
///
/// [propositionId] Identifiant de la proposition
/// [activer] true pour activer, false pour désactiver
/// Retourne [Right(PropositionAide)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, PropositionAide>> changerStatutProposition({
required String propositionId,
required bool activer,
});
/// Recherche des propositions d'aide avec filtres
///
/// [filtres] Critères de recherche
/// Retourne [Right(List<PropositionAide>)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, List<PropositionAide>>> rechercherPropositions({
String? organisationId,
TypeAide? typeAide,
String? proposantId,
bool? actives,
int page = 0,
int taille = 20,
});
/// Obtient les propositions actives pour un type d'aide
///
/// [typeAide] Type d'aide recherché
/// Retourne [Right(List<PropositionAide>)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, List<PropositionAide>>> obtenirPropositionsActives(TypeAide typeAide);
/// Obtient les meilleures propositions (top performers)
///
/// [limite] Nombre maximum de propositions à retourner
/// Retourne [Right(List<PropositionAide>)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, List<PropositionAide>>> obtenirMeilleuresPropositions(int limite);
/// Obtient les propositions de l'utilisateur connecté
///
/// [utilisateurId] Identifiant de l'utilisateur
/// Retourne [Right(List<PropositionAide>)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, List<PropositionAide>>> obtenirMesPropositions(String utilisateurId);
// === MATCHING ET COMPATIBILITÉ ===
/// Trouve les propositions compatibles avec une demande
///
/// [demandeId] Identifiant de la demande
/// Retourne [Right(List<PropositionAide>)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, List<PropositionAide>>> trouverPropositionsCompatibles(String demandeId);
/// Trouve les demandes compatibles avec une proposition
///
/// [propositionId] Identifiant de la proposition
/// Retourne [Right(List<DemandeAide>)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, List<DemandeAide>>> trouverDemandesCompatibles(String propositionId);
/// Recherche des proposants financiers pour une demande approuvée
///
/// [demandeId] Identifiant de la demande
/// Retourne [Right(List<PropositionAide>)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, List<PropositionAide>>> rechercherProposantsFinanciers(String demandeId);
// === GESTION DES ÉVALUATIONS ===
/// Crée une nouvelle évaluation
///
/// [evaluation] L'évaluation à créer
/// Retourne [Right(EvaluationAide)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, EvaluationAide>> creerEvaluation(EvaluationAide evaluation);
/// Met à jour une évaluation existante
///
/// [evaluation] L'évaluation à mettre à jour
/// Retourne [Right(EvaluationAide)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, EvaluationAide>> mettreAJourEvaluation(EvaluationAide evaluation);
/// Obtient une évaluation par son ID
///
/// [id] Identifiant de l'évaluation
/// Retourne [Right(EvaluationAide)] si trouvée
/// Retourne [Left(Failure)] si non trouvée ou erreur
Future<Either<Failure, EvaluationAide>> obtenirEvaluation(String id);
/// Obtient les évaluations d'une demande d'aide
///
/// [demandeId] Identifiant de la demande
/// Retourne [Right(List<EvaluationAide>)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, List<EvaluationAide>>> obtenirEvaluationsDemande(String demandeId);
/// Obtient les évaluations d'une proposition d'aide
///
/// [propositionId] Identifiant de la proposition
/// Retourne [Right(List<EvaluationAide>)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, List<EvaluationAide>>> obtenirEvaluationsProposition(String propositionId);
/// Signale une évaluation comme inappropriée
///
/// [evaluationId] Identifiant de l'évaluation
/// [motif] Motif du signalement
/// Retourne [Right(EvaluationAide)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, EvaluationAide>> signalerEvaluation({
required String evaluationId,
required String motif,
});
// === STATISTIQUES ET ANALYTICS ===
/// Obtient les statistiques de solidarité pour une organisation
///
/// [organisationId] Identifiant de l'organisation
/// Retourne [Right(Map<String, dynamic>)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, Map<String, dynamic>>> obtenirStatistiquesSolidarite(String organisationId);
/// Calcule la note moyenne d'une demande d'aide
///
/// [demandeId] Identifiant de la demande
/// Retourne [Right(StatistiquesEvaluation)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, StatistiquesEvaluation>> calculerMoyenneDemande(String demandeId);
/// Calcule la note moyenne d'une proposition d'aide
///
/// [propositionId] Identifiant de la proposition
/// Retourne [Right(StatistiquesEvaluation)] en cas de succès
/// Retourne [Left(Failure)] en cas d'erreur
Future<Either<Failure, StatistiquesEvaluation>> calculerMoyenneProposition(String propositionId);
}