Initial commit: unionflow-mobile-apps
Application Flutter complète (sans build artifacts). Signed-off-by: lions dev Team
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
/// Interface du repository des rapports (Clean Architecture - Domain Layer)
|
||||
library reports_repository;
|
||||
|
||||
import '../../data/models/analytics_model.dart';
|
||||
|
||||
/// Interface du repository pour la gestion des rapports et analytics
|
||||
/// Contrat défini dans la couche Domain, implémenté dans la couche Data
|
||||
abstract class IReportsRepository {
|
||||
/// Récupère les métriques d'analyse
|
||||
Future<List<AnalyticsModel>> getMetriques(String typeMetrique, String periode);
|
||||
|
||||
/// Récupère la performance globale
|
||||
Future<Map<String, dynamic>> getPerformanceGlobale();
|
||||
|
||||
/// Récupère les évolutions d'une métrique
|
||||
Future<List<AnalyticsModel>> getEvolutions(String typeMetrique);
|
||||
|
||||
/// Récupère les statistiques des membres
|
||||
Future<Map<String, dynamic>> getStatistiquesMembres();
|
||||
|
||||
/// Récupère les statistiques des cotisations pour une année
|
||||
Future<Map<String, dynamic>> getStatistiquesCotisations(int annee);
|
||||
|
||||
/// Récupère les statistiques des événements
|
||||
Future<Map<String, dynamic>> getStatistiquesEvenements();
|
||||
|
||||
/// Liste les rapports disponibles (types de rapports générables)
|
||||
/// Endpoint: GET /api/v1/analytics/reports/available
|
||||
Future<List<Map<String, dynamic>>> getAvailableReports();
|
||||
|
||||
/// Génère un rapport (générique, sans format spécifique)
|
||||
/// Endpoint: POST /api/v1/analytics/reports/generate
|
||||
Future<void> generateReport(String type, {String? format});
|
||||
|
||||
/// Exporte un rapport au format PDF
|
||||
/// Wrapper de generateReport avec format='pdf'
|
||||
Future<String> exportReportPdf(String type);
|
||||
|
||||
/// Exporte un rapport au format Excel/CSV
|
||||
/// Wrapper de generateReport avec format='excel' ou 'csv'
|
||||
Future<String> exportReportExcel(String type, {String format = 'excel'});
|
||||
|
||||
/// Programme un rapport automatique (avec expression cron)
|
||||
/// Endpoint: POST /api/v1/analytics/reports/schedule
|
||||
Future<void> scheduleReport({String? cronExpression});
|
||||
|
||||
/// Récupère la liste des rapports programmés
|
||||
/// Endpoint: GET /api/v1/analytics/reports/scheduled
|
||||
Future<List<Map<String, dynamic>>> getScheduledReports();
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
/// Use Case: Exporter un rapport au format Excel/CSV
|
||||
library export_report_excel;
|
||||
|
||||
import 'package:injectable/injectable.dart';
|
||||
import '../repositories/reports_repository.dart';
|
||||
|
||||
/// Exporte un rapport au format Excel ou CSV
|
||||
@injectable
|
||||
class ExportReportExcel {
|
||||
final IReportsRepository _repository;
|
||||
|
||||
ExportReportExcel(this._repository);
|
||||
|
||||
/// Exécute le use case
|
||||
/// [type] : Type de rapport à exporter
|
||||
/// [format] : Format d'export ('excel' ou 'csv', défaut: 'excel')
|
||||
/// Retourne l'URL ou le chemin du fichier Excel/CSV généré
|
||||
/// Wrapper de generateReport avec format='excel' ou 'csv'
|
||||
Future<String> call(String type, {String format = 'excel'}) async {
|
||||
return _repository.exportReportExcel(type, format: format);
|
||||
}
|
||||
}
|
||||
21
lib/features/reports/domain/usecases/export_report_pdf.dart
Normal file
21
lib/features/reports/domain/usecases/export_report_pdf.dart
Normal file
@@ -0,0 +1,21 @@
|
||||
/// Use Case: Exporter un rapport au format PDF
|
||||
library export_report_pdf;
|
||||
|
||||
import 'package:injectable/injectable.dart';
|
||||
import '../repositories/reports_repository.dart';
|
||||
|
||||
/// Exporte un rapport au format PDF
|
||||
@injectable
|
||||
class ExportReportPdf {
|
||||
final IReportsRepository _repository;
|
||||
|
||||
ExportReportPdf(this._repository);
|
||||
|
||||
/// Exécute le use case
|
||||
/// [type] : Type de rapport à exporter
|
||||
/// Retourne l'URL ou le chemin du fichier PDF généré
|
||||
/// Wrapper de generateReport avec format='pdf'
|
||||
Future<String> call(String type) async {
|
||||
return _repository.exportReportPdf(type);
|
||||
}
|
||||
}
|
||||
21
lib/features/reports/domain/usecases/generate_report.dart
Normal file
21
lib/features/reports/domain/usecases/generate_report.dart
Normal file
@@ -0,0 +1,21 @@
|
||||
/// Use Case: Générer un rapport
|
||||
library generate_report;
|
||||
|
||||
import 'package:injectable/injectable.dart';
|
||||
import '../repositories/reports_repository.dart';
|
||||
|
||||
/// Génère un rapport pour un type donné
|
||||
@injectable
|
||||
class GenerateReport {
|
||||
final IReportsRepository _repository;
|
||||
|
||||
GenerateReport(this._repository);
|
||||
|
||||
/// Exécute le use case
|
||||
/// [type] : Type de rapport (membres, cotisations, evenements, etc.)
|
||||
/// [format] : Format optionnel (pdf, excel, csv)
|
||||
/// Endpoint: POST /api/v1/analytics/reports/generate
|
||||
Future<void> call(String type, {String? format}) async {
|
||||
return _repository.generateReport(type, format: format);
|
||||
}
|
||||
}
|
||||
21
lib/features/reports/domain/usecases/get_reports.dart
Normal file
21
lib/features/reports/domain/usecases/get_reports.dart
Normal file
@@ -0,0 +1,21 @@
|
||||
/// Use Case: Récupérer les rapports disponibles
|
||||
library get_reports;
|
||||
|
||||
import 'package:injectable/injectable.dart';
|
||||
import '../repositories/reports_repository.dart';
|
||||
|
||||
/// Récupère la liste des rapports disponibles (types générables)
|
||||
@injectable
|
||||
class GetReports {
|
||||
final IReportsRepository _repository;
|
||||
|
||||
GetReports(this._repository);
|
||||
|
||||
/// Exécute le use case
|
||||
/// Retourne une liste de rapports disponibles avec leurs métadonnées
|
||||
/// Exemple: [{ "type": "membres", "nom": "Rapport Membres", "description": "..." }]
|
||||
/// Endpoint: GET /api/v1/analytics/reports/available
|
||||
Future<List<Map<String, dynamic>>> call() async {
|
||||
return _repository.getAvailableReports();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
/// Use Case: Récupérer les rapports programmés
|
||||
library get_scheduled_reports;
|
||||
|
||||
import 'package:injectable/injectable.dart';
|
||||
import '../repositories/reports_repository.dart';
|
||||
|
||||
/// Récupère la liste des rapports programmés pour l'utilisateur
|
||||
@injectable
|
||||
class GetScheduledReports {
|
||||
final IReportsRepository _repository;
|
||||
|
||||
GetScheduledReports(this._repository);
|
||||
|
||||
/// Exécute le use case
|
||||
/// Retourne une liste de rapports programmés avec leur configuration
|
||||
/// Exemple: [{ "id": "1", "type": "membres", "cronExpression": "0 0 1 * *", "active": true }]
|
||||
/// Endpoint: GET /api/v1/analytics/reports/scheduled
|
||||
Future<List<Map<String, dynamic>>> call() async {
|
||||
return _repository.getScheduledReports();
|
||||
}
|
||||
}
|
||||
22
lib/features/reports/domain/usecases/schedule_report.dart
Normal file
22
lib/features/reports/domain/usecases/schedule_report.dart
Normal file
@@ -0,0 +1,22 @@
|
||||
/// Use Case: Programmer un rapport automatique
|
||||
library schedule_report;
|
||||
|
||||
import 'package:injectable/injectable.dart';
|
||||
import '../repositories/reports_repository.dart';
|
||||
|
||||
/// Programme un rapport pour génération automatique récurrente
|
||||
@injectable
|
||||
class ScheduleReport {
|
||||
final IReportsRepository _repository;
|
||||
|
||||
ScheduleReport(this._repository);
|
||||
|
||||
/// Exécute le use case
|
||||
/// [cronExpression] : Expression cron optionnelle pour la récurrence
|
||||
/// Exemples: "0 0 1 * *" (1er de chaque mois à minuit)
|
||||
/// "0 9 * * 1" (tous les lundis à 9h)
|
||||
/// Endpoint: POST /api/v1/analytics/reports/schedule
|
||||
Future<void> call({String? cronExpression}) async {
|
||||
return _repository.scheduleReport(cronExpression: cronExpression);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user