Initial commit: unionflow-mobile-apps
Application Flutter complète (sans build artifacts). Signed-off-by: lions dev Team
This commit is contained in:
26
lib/features/events/domain/usecases/cancel_registration.dart
Normal file
26
lib/features/events/domain/usecases/cancel_registration.dart
Normal 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);
|
||||
}
|
||||
}
|
||||
25
lib/features/events/domain/usecases/create_event.dart
Normal file
25
lib/features/events/domain/usecases/create_event.dart
Normal 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);
|
||||
}
|
||||
}
|
||||
24
lib/features/events/domain/usecases/delete_event.dart
Normal file
24
lib/features/events/domain/usecases/delete_event.dart
Normal 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);
|
||||
}
|
||||
}
|
||||
24
lib/features/events/domain/usecases/get_event_by_id.dart
Normal file
24
lib/features/events/domain/usecases/get_event_by_id.dart
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
33
lib/features/events/domain/usecases/get_events.dart
Normal file
33
lib/features/events/domain/usecases/get_events.dart
Normal 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,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
27
lib/features/events/domain/usecases/register_for_event.dart
Normal file
27
lib/features/events/domain/usecases/register_for_event.dart
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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',
|
||||
);
|
||||
}
|
||||
}
|
||||
26
lib/features/events/domain/usecases/update_event.dart
Normal file
26
lib/features/events/domain/usecases/update_event.dart
Normal 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user