Initial commit: unionflow-mobile-apps

Application Flutter complète (sans build artifacts).

Signed-off-by: lions dev Team
This commit is contained in:
dahoud
2026-03-15 16:30:08 +00:00
commit d094d6db9c
1790 changed files with 507435 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
/// Use case: Annuler une inscription à un événement
library cancel_registration;
import 'package:injectable/injectable.dart';
import '../repositories/evenement_repository.dart';
/// Use case pour se désinscrire d'un événement
@injectable
class CancelRegistration {
final IEvenementRepository _repository;
CancelRegistration(this._repository);
/// Exécute le use case
///
/// [evenementId] - UUID de l'événement
///
/// Annule l'inscription du membre connecté à l'événement
/// Lève une exception si:
/// - L'événement n'existe pas
/// - Le membre n'est pas inscrit
/// - L'événement a déjà commencé
Future<void> call(String evenementId) async {
return _repository.desinscrireEvenement(evenementId);
}
}

View File

@@ -0,0 +1,25 @@
/// Use case: Créer un nouvel événement
library create_event;
import 'package:injectable/injectable.dart';
import '../../data/models/evenement_model.dart';
import '../repositories/evenement_repository.dart';
/// Use case pour créer un événement
/// Réservé aux utilisateurs avec le rôle ADMIN_ORGANISATION
@injectable
class CreateEvent {
final IEvenementRepository _repository;
CreateEvent(this._repository);
/// Exécute le use case
///
/// [evenement] - Modèle de l'événement à créer
///
/// Retourne l'événement créé avec son ID généré
/// Lève une exception en cas d'erreur de validation ou de création
Future<EvenementModel> call(EvenementModel evenement) async {
return _repository.createEvenement(evenement);
}
}

View File

@@ -0,0 +1,24 @@
/// Use case: Supprimer un événement
library delete_event;
import 'package:injectable/injectable.dart';
import '../repositories/evenement_repository.dart';
/// Use case pour supprimer un événement
/// Réservé à l'organisateur de l'événement ou ADMIN_ORGANISATION
@injectable
class DeleteEvent {
final IEvenementRepository _repository;
DeleteEvent(this._repository);
/// Exécute le use case
///
/// [id] - UUID de l'événement à supprimer
///
/// Supprime l'événement de manière définitive
/// Lève une exception si l'événement n'existe pas ou ne peut être supprimé
Future<void> call(String id) async {
return _repository.deleteEvenement(id);
}
}

View File

@@ -0,0 +1,24 @@
/// Use case: Récupérer un événement par son ID
library get_event_by_id;
import 'package:injectable/injectable.dart';
import '../../data/models/evenement_model.dart';
import '../repositories/evenement_repository.dart';
/// Use case pour récupérer le détail d'un événement
@injectable
class GetEventById {
final IEvenementRepository _repository;
GetEventById(this._repository);
/// Exécute le use case
///
/// [id] - UUID de l'événement
///
/// Retourne le détail complet de l'événement
/// Retourne null si l'événement n'existe pas
Future<EvenementModel?> call(String id) async {
return _repository.getEvenementById(id);
}
}

View File

@@ -0,0 +1,30 @@
/// Use case: Récupérer la liste des participants d'un événement
library get_event_participants;
import 'package:injectable/injectable.dart';
import '../repositories/evenement_repository.dart';
/// Use case pour récupérer les participants d'un événement
/// Réservé à l'organisateur de l'événement ou ADMIN_ORGANISATION
@injectable
class GetEventParticipants {
final IEvenementRepository _repository;
GetEventParticipants(this._repository);
/// Exécute le use case
///
/// [evenementId] - UUID de l'événement
///
/// Retourne la liste des participants avec leurs informations:
/// - id: UUID du membre
/// - nom: Nom complet
/// - email: Email
/// - dateInscription: Date d'inscription
/// - statut: Statut de participation (CONFIRME, EN_ATTENTE, etc.)
///
/// Lève une exception si l'événement n'existe pas ou accès refusé
Future<List<Map<String, dynamic>>> call(String evenementId) async {
return _repository.getParticipants(evenementId);
}
}

View File

@@ -0,0 +1,33 @@
/// Use case: Récupérer la liste des événements
library get_events;
import 'package:injectable/injectable.dart';
import '../../data/repositories/evenement_repository_impl.dart' show EvenementSearchResult;
import '../repositories/evenement_repository.dart';
/// Use case pour récupérer la liste des événements avec pagination
@injectable
class GetEvents {
final IEvenementRepository _repository;
GetEvents(this._repository);
/// Exécute le use case
///
/// [page] - Numéro de page (pagination)
/// [size] - Taille de la page
/// [recherche] - Terme de recherche (optionnel)
///
/// Retourne la liste paginée des événements
Future<EvenementSearchResult> call({
int page = 0,
int size = 20,
String? recherche,
}) async {
return _repository.getEvenements(
page: page,
size: size,
recherche: recherche,
);
}
}

View File

@@ -0,0 +1,31 @@
/// Use case: Récupérer mes inscriptions aux événements
library get_my_registrations;
import 'package:injectable/injectable.dart';
import '../../data/repositories/evenement_repository_impl.dart' show EvenementSearchResult;
import '../repositories/evenement_repository.dart';
/// Use case pour récupérer les événements auxquels le membre est inscrit
@injectable
class GetMyRegistrations {
final IEvenementRepository _repository;
GetMyRegistrations(this._repository);
/// Exécute le use case
///
/// [page] - Numéro de page (pagination)
/// [size] - Taille de la page
///
/// Retourne la liste paginée des événements auxquels le membre est inscrit
/// Note: Cette fonctionnalité utilise les événements à venir + filtre côté client
/// pour déterminer les inscriptions (endpoint dédié à ajouter côté backend)
Future<EvenementSearchResult> call({
int page = 0,
int size = 20,
}) async {
// Pour l'instant, on récupère les événements à venir
// TODO: Ajouter endpoint backend GET /api/evenements/mes-inscriptions
return _repository.getEvenementsAVenir(page: page, size: size);
}
}

View File

@@ -0,0 +1,27 @@
/// Use case: S'inscrire à un événement
library register_for_event;
import 'package:injectable/injectable.dart';
import '../repositories/evenement_repository.dart';
/// Use case pour s'inscrire à un événement
@injectable
class RegisterForEvent {
final IEvenementRepository _repository;
RegisterForEvent(this._repository);
/// Exécute le use case
///
/// [evenementId] - UUID de l'événement
///
/// Inscrit le membre connecté à l'événement
/// Lève une exception si:
/// - L'événement n'existe pas
/// - Le membre est déjà inscrit
/// - L'événement est complet
/// - L'événement est passé
Future<void> call(String evenementId) async {
return _repository.inscrireEvenement(evenementId);
}
}

View File

@@ -0,0 +1,39 @@
/// Use case: Soumettre un feedback sur un événement
library submit_event_feedback;
import 'package:injectable/injectable.dart';
import '../repositories/evenement_repository.dart';
/// Use case pour soumettre un feedback après un événement
/// Note: Cette fonctionnalité nécessite un endpoint backend dédié
@injectable
class SubmitEventFeedback {
final IEvenementRepository _repository;
SubmitEventFeedback(this._repository);
/// Exécute le use case
///
/// [evenementId] - UUID de l'événement
/// [note] - Note de 1 à 5
/// [commentaire] - Commentaire (optionnel)
///
/// Soumet un feedback pour l'événement
/// Réservé aux participants de l'événement
///
/// TODO: Ajouter endpoint backend POST /api/evenements/{id}/feedback
/// Lève une exception si:
/// - L'événement n'existe pas
/// - Le membre n'a pas participé
/// - L'événement n'est pas terminé
Future<void> call({
required String evenementId,
required int note,
String? commentaire,
}) async {
// TODO: Implémenter quand endpoint backend sera disponible
throw UnimplementedError(
'Endpoint POST /api/evenements/{id}/feedback non implémenté côté backend',
);
}
}

View File

@@ -0,0 +1,26 @@
/// Use case: Mettre à jour un événement existant
library update_event;
import 'package:injectable/injectable.dart';
import '../../data/models/evenement_model.dart';
import '../repositories/evenement_repository.dart';
/// Use case pour modifier un événement
/// Réservé à l'organisateur de l'événement ou ADMIN_ORGANISATION
@injectable
class UpdateEvent {
final IEvenementRepository _repository;
UpdateEvent(this._repository);
/// Exécute le use case
///
/// [id] - UUID de l'événement à modifier
/// [evenement] - Données mises à jour
///
/// Retourne l'événement modifié
/// Lève une exception si l'événement n'existe pas ou erreur de validation
Future<EvenementModel> call(String id, EvenementModel evenement) async {
return _repository.updateEvenement(id, evenement);
}
}