feat: BLoC tests complets + sécurité production + freerasp 7.5.1 migration
## Tests BLoC (Task P2.4 Mobile) - 25 nouveaux fichiers *_bloc_test.dart + mocks générés (build_runner) - Features couvertes : authentication, admin_users, adhesions, backup, communication/messaging, contributions, dashboard, finance (approval/budget), events, explore/network, feed, logs_monitoring, notifications, onboarding, organizations (switcher/types/CRUD), profile, reports, settings, solidarity - ~380 tests, > 80% coverage BLoCs ## Sécurité Production (Task P2.2) - lib/core/security/app_integrity_service.dart (freerasp 7.5.1) - Migration API breaking changes freerasp 7.5.1 : - onRootDetected → onPrivilegedAccess - onDebuggerDetected → onDebug - onSignatureDetected → onAppIntegrity - onHookDetected → onHooks - onEmulatorDetected → onSimulator - onUntrustedInstallationSourceDetected → onUnofficialStore - onDeviceBindingDetected → onDeviceBinding - onObfuscationIssuesDetected → onObfuscationIssues - Talsec.start() split → start() + attachListener() - const AndroidConfig/IOSConfig → final (constructors call ConfigVerifier) - supportedAlternativeStores → supportedStores ## Pubspec - bloc_test: ^9.1.7 → ^10.0.0 (compat flutter_bloc ^9.0.0) - freerasp 7.5.1 ## Config - android/app/build.gradle : ajustements release - lib/core/config/environment.dart : URLs API actualisées - lib/main.dart + app_router : intégrations sécurité/BLoC ## Cleanup - Suppression docs intermédiaires (TACHES_*.md, TASK_*_COMPLETION_REPORT.md, TESTS_UNITAIRES_PROGRESS.md) - .g.dart régénérés (json_serializable) - .mocks.dart régénérés (mockito) ## Résultat - 142 fichiers, +27 596 insertions - Toutes les tâches P2 mobile complétées Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -7,26 +7,26 @@ part of 'backup_model.dart';
|
||||
// **************************************************************************
|
||||
|
||||
BackupModel _$BackupModelFromJson(Map<String, dynamic> json) => BackupModel(
|
||||
id: json['id'] as String?,
|
||||
name: json['name'] as String?,
|
||||
description: json['description'] as String?,
|
||||
type: json['type'] as String?,
|
||||
sizeBytes: (json['sizeBytes'] as num?)?.toInt(),
|
||||
sizeFormatted: json['sizeFormatted'] as String?,
|
||||
status: json['status'] as String?,
|
||||
createdAt: json['createdAt'] == null
|
||||
? null
|
||||
: DateTime.parse(json['createdAt'] as String),
|
||||
completedAt: json['completedAt'] == null
|
||||
? null
|
||||
: DateTime.parse(json['completedAt'] as String),
|
||||
createdBy: json['createdBy'] as String?,
|
||||
includesDatabase: json['includesDatabase'] as bool?,
|
||||
includesFiles: json['includesFiles'] as bool?,
|
||||
includesConfiguration: json['includesConfiguration'] as bool?,
|
||||
filePath: json['filePath'] as String?,
|
||||
errorMessage: json['errorMessage'] as String?,
|
||||
);
|
||||
id: json['id'] as String?,
|
||||
name: json['name'] as String?,
|
||||
description: json['description'] as String?,
|
||||
type: json['type'] as String?,
|
||||
sizeBytes: (json['sizeBytes'] as num?)?.toInt(),
|
||||
sizeFormatted: json['sizeFormatted'] as String?,
|
||||
status: json['status'] as String?,
|
||||
createdAt: json['createdAt'] == null
|
||||
? null
|
||||
: DateTime.parse(json['createdAt'] as String),
|
||||
completedAt: json['completedAt'] == null
|
||||
? null
|
||||
: DateTime.parse(json['completedAt'] as String),
|
||||
createdBy: json['createdBy'] as String?,
|
||||
includesDatabase: json['includesDatabase'] as bool?,
|
||||
includesFiles: json['includesFiles'] as bool?,
|
||||
includesConfiguration: json['includesConfiguration'] as bool?,
|
||||
filePath: json['filePath'] as String?,
|
||||
errorMessage: json['errorMessage'] as String?,
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$BackupModelToJson(BackupModel instance) =>
|
||||
<String, dynamic>{
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// Modèles v4 : désérialisation manuelle, code generation non utilisé.
|
||||
@@ -1,2 +0,0 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// Modèles v4 : désérialisation manuelle, code generation non utilisé.
|
||||
@@ -14,11 +14,12 @@ ContributionModel _$ContributionModelFromJson(Map<String, dynamic> json) =>
|
||||
membrePrenom: json['membrePrenom'] as String?,
|
||||
organisationId: json['organisationId'] as String?,
|
||||
organisationNom: json['organisationNom'] as String?,
|
||||
type: $enumDecodeNullable(_$ContributionTypeEnumMap, json['type']) ??
|
||||
type:
|
||||
$enumDecodeNullable(_$ContributionTypeEnumMap, json['type']) ??
|
||||
ContributionType.annuelle,
|
||||
statut:
|
||||
$enumDecodeNullable(_$ContributionStatusEnumMap, json['statut']) ??
|
||||
ContributionStatus.nonPayee,
|
||||
ContributionStatus.nonPayee,
|
||||
montant: (json['montant'] as num).toDouble(),
|
||||
montantPaye: (json['montantPaye'] as num?)?.toDouble(),
|
||||
devise: json['devise'] as String? ?? 'XOF',
|
||||
@@ -29,8 +30,10 @@ ContributionModel _$ContributionModelFromJson(Map<String, dynamic> json) =>
|
||||
dateRappel: json['dateRappel'] == null
|
||||
? null
|
||||
: DateTime.parse(json['dateRappel'] as String),
|
||||
methodePaiement:
|
||||
$enumDecodeNullable(_$PaymentMethodEnumMap, json['methodePaiement']),
|
||||
methodePaiement: $enumDecodeNullable(
|
||||
_$PaymentMethodEnumMap,
|
||||
json['methodePaiement'],
|
||||
),
|
||||
numeroPaiement: json['numeroPaiement'] as String?,
|
||||
referencePaiement: json['referencePaiement'] as String?,
|
||||
annee: (json['annee'] as num).toInt(),
|
||||
|
||||
@@ -13,8 +13,8 @@ DashboardStatsModel _$DashboardStatsModelFromJson(Map<String, dynamic> json) =>
|
||||
totalEvents: (json['totalEvents'] as num).toInt(),
|
||||
upcomingEvents: (json['upcomingEvents'] as num).toInt(),
|
||||
totalContributions: (json['totalContributions'] as num).toInt(),
|
||||
totalContributionAmount:
|
||||
(json['totalContributionAmount'] as num).toDouble(),
|
||||
totalContributionAmount: (json['totalContributionAmount'] as num)
|
||||
.toDouble(),
|
||||
pendingRequests: (json['pendingRequests'] as num).toInt(),
|
||||
completedProjects: (json['completedProjects'] as num).toInt(),
|
||||
monthlyGrowth: (json['monthlyGrowth'] as num).toDouble(),
|
||||
@@ -23,27 +23,27 @@ DashboardStatsModel _$DashboardStatsModelFromJson(Map<String, dynamic> json) =>
|
||||
totalOrganizations: (json['totalOrganizations'] as num?)?.toInt(),
|
||||
organizationTypeDistribution:
|
||||
(json['organizationTypeDistribution'] as Map<String, dynamic>?)?.map(
|
||||
(k, e) => MapEntry(k, (e as num).toInt()),
|
||||
),
|
||||
(k, e) => MapEntry(k, (e as num).toInt()),
|
||||
),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$DashboardStatsModelToJson(
|
||||
DashboardStatsModel instance) =>
|
||||
<String, dynamic>{
|
||||
'totalMembers': instance.totalMembers,
|
||||
'activeMembers': instance.activeMembers,
|
||||
'totalEvents': instance.totalEvents,
|
||||
'upcomingEvents': instance.upcomingEvents,
|
||||
'totalContributions': instance.totalContributions,
|
||||
'totalContributionAmount': instance.totalContributionAmount,
|
||||
'pendingRequests': instance.pendingRequests,
|
||||
'completedProjects': instance.completedProjects,
|
||||
'monthlyGrowth': instance.monthlyGrowth,
|
||||
'engagementRate': instance.engagementRate,
|
||||
'lastUpdated': instance.lastUpdated.toIso8601String(),
|
||||
'totalOrganizations': instance.totalOrganizations,
|
||||
'organizationTypeDistribution': instance.organizationTypeDistribution,
|
||||
};
|
||||
DashboardStatsModel instance,
|
||||
) => <String, dynamic>{
|
||||
'totalMembers': instance.totalMembers,
|
||||
'activeMembers': instance.activeMembers,
|
||||
'totalEvents': instance.totalEvents,
|
||||
'upcomingEvents': instance.upcomingEvents,
|
||||
'totalContributions': instance.totalContributions,
|
||||
'totalContributionAmount': instance.totalContributionAmount,
|
||||
'pendingRequests': instance.pendingRequests,
|
||||
'completedProjects': instance.completedProjects,
|
||||
'monthlyGrowth': instance.monthlyGrowth,
|
||||
'engagementRate': instance.engagementRate,
|
||||
'lastUpdated': instance.lastUpdated.toIso8601String(),
|
||||
'totalOrganizations': instance.totalOrganizations,
|
||||
'organizationTypeDistribution': instance.organizationTypeDistribution,
|
||||
};
|
||||
|
||||
RecentActivityModel _$RecentActivityModelFromJson(Map<String, dynamic> json) =>
|
||||
RecentActivityModel(
|
||||
@@ -59,18 +59,18 @@ RecentActivityModel _$RecentActivityModelFromJson(Map<String, dynamic> json) =>
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$RecentActivityModelToJson(
|
||||
RecentActivityModel instance) =>
|
||||
<String, dynamic>{
|
||||
'id': instance.id,
|
||||
'type': instance.type,
|
||||
'title': instance.title,
|
||||
'description': instance.description,
|
||||
'userAvatar': instance.userAvatar,
|
||||
'userName': instance.userName,
|
||||
'timestamp': instance.timestamp.toIso8601String(),
|
||||
'actionUrl': instance.actionUrl,
|
||||
'metadata': instance.metadata,
|
||||
};
|
||||
RecentActivityModel instance,
|
||||
) => <String, dynamic>{
|
||||
'id': instance.id,
|
||||
'type': instance.type,
|
||||
'title': instance.title,
|
||||
'description': instance.description,
|
||||
'userAvatar': instance.userAvatar,
|
||||
'userName': instance.userName,
|
||||
'timestamp': instance.timestamp.toIso8601String(),
|
||||
'actionUrl': instance.actionUrl,
|
||||
'metadata': instance.metadata,
|
||||
};
|
||||
|
||||
UpcomingEventModel _$UpcomingEventModelFromJson(Map<String, dynamic> json) =>
|
||||
UpcomingEventModel(
|
||||
@@ -106,8 +106,9 @@ Map<String, dynamic> _$UpcomingEventModelToJson(UpcomingEventModel instance) =>
|
||||
|
||||
DashboardDataModel _$DashboardDataModelFromJson(Map<String, dynamic> json) =>
|
||||
DashboardDataModel(
|
||||
stats:
|
||||
DashboardStatsModel.fromJson(json['stats'] as Map<String, dynamic>),
|
||||
stats: DashboardStatsModel.fromJson(
|
||||
json['stats'] as Map<String, dynamic>,
|
||||
),
|
||||
recentActivities: (json['recentActivities'] as List<dynamic>)
|
||||
.map((e) => RecentActivityModel.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
|
||||
@@ -14,6 +14,7 @@ import '../../../../settings/presentation/pages/system_settings_page.dart';
|
||||
import '../../../../backup/presentation/pages/backup_page.dart';
|
||||
import '../../../../help/presentation/pages/help_support_page.dart';
|
||||
import '../../widgets/dashboard_drawer.dart';
|
||||
import '../../../../notifications/presentation/pages/notifications_page_wrapper.dart';
|
||||
|
||||
/// Dashboard Super Admin — design harmonisé v2
|
||||
///
|
||||
@@ -390,6 +391,11 @@ class _SuperAdminDashboardState extends State<SuperAdminDashboard> {
|
||||
],
|
||||
),
|
||||
actions: [
|
||||
IconButton(
|
||||
icon: const Icon(Icons.notifications_outlined, color: Colors.white),
|
||||
onPressed: () => Navigator.of(context).push(MaterialPageRoute<void>(builder: (_) => const NotificationsPageWrapper())),
|
||||
tooltip: 'Notifications',
|
||||
),
|
||||
// Indicateur temps réel WebSocket
|
||||
BlocBuilder<DashboardBloc, DashboardState>(
|
||||
builder: (context, state) {
|
||||
|
||||
@@ -17,9 +17,11 @@ EvenementModel _$EvenementModelFromJson(Map<String, dynamic> json) =>
|
||||
adresse: json['adresse'] as String?,
|
||||
ville: json['ville'] as String?,
|
||||
codePostal: json['codePostal'] as String?,
|
||||
type: $enumDecodeNullable(_$TypeEvenementEnumMap, json['type']) ??
|
||||
type:
|
||||
$enumDecodeNullable(_$TypeEvenementEnumMap, json['type']) ??
|
||||
TypeEvenement.autre,
|
||||
statut: $enumDecodeNullable(_$StatutEvenementEnumMap, json['statut']) ??
|
||||
statut:
|
||||
$enumDecodeNullable(_$StatutEvenementEnumMap, json['statut']) ??
|
||||
StatutEvenement.planifie,
|
||||
maxParticipants: (json['maxParticipants'] as num?)?.toInt(),
|
||||
participantsActuels: (json['participantsActuels'] as num?)?.toInt() ?? 0,
|
||||
@@ -29,14 +31,14 @@ EvenementModel _$EvenementModelFromJson(Map<String, dynamic> json) =>
|
||||
organisationNom: json['organisationNom'] as String?,
|
||||
priorite:
|
||||
$enumDecodeNullable(_$PrioriteEvenementEnumMap, json['priorite']) ??
|
||||
PrioriteEvenement.moyenne,
|
||||
PrioriteEvenement.moyenne,
|
||||
estPublic: json['estPublic'] as bool? ?? true,
|
||||
inscriptionRequise: json['inscriptionRequise'] as bool? ?? false,
|
||||
cout: (json['cout'] as num?)?.toDouble(),
|
||||
devise: json['devise'] as String? ?? 'XOF',
|
||||
tags:
|
||||
(json['tags'] as List<dynamic>?)?.map((e) => e as String).toList() ??
|
||||
const [],
|
||||
const [],
|
||||
imageUrl: json['imageUrl'] as String?,
|
||||
documentUrl: json['documentUrl'] as String?,
|
||||
notes: json['notes'] as String?,
|
||||
|
||||
@@ -7,30 +7,30 @@ part of 'budget_model.dart';
|
||||
// **************************************************************************
|
||||
|
||||
BudgetModel _$BudgetModelFromJson(Map<String, dynamic> json) => BudgetModel(
|
||||
id: json['id'] as String,
|
||||
name: json['name'] as String,
|
||||
description: json['description'] as String?,
|
||||
organizationId: json['organizationId'] as String,
|
||||
period: $enumDecode(_$BudgetPeriodEnumMap, json['period']),
|
||||
year: (json['year'] as num).toInt(),
|
||||
month: (json['month'] as num?)?.toInt(),
|
||||
status: $enumDecode(_$BudgetStatusEnumMap, json['status']),
|
||||
lines: json['lines'] == null
|
||||
? const []
|
||||
: BudgetModel._linesFromJson(json['lines'] as List?),
|
||||
totalPlanned: (json['totalPlanned'] as num).toDouble(),
|
||||
totalRealized: (json['totalRealized'] as num?)?.toDouble() ?? 0,
|
||||
currency: json['currency'] as String? ?? 'XOF',
|
||||
createdBy: json['createdBy'] as String,
|
||||
createdAt: DateTime.parse(json['createdAt'] as String),
|
||||
approvedAt: json['approvedAt'] == null
|
||||
? null
|
||||
: DateTime.parse(json['approvedAt'] as String),
|
||||
approvedBy: json['approvedBy'] as String?,
|
||||
startDate: DateTime.parse(json['startDate'] as String),
|
||||
endDate: DateTime.parse(json['endDate'] as String),
|
||||
metadata: json['metadata'] as Map<String, dynamic>?,
|
||||
);
|
||||
id: json['id'] as String,
|
||||
name: json['name'] as String,
|
||||
description: json['description'] as String?,
|
||||
organizationId: json['organizationId'] as String,
|
||||
period: $enumDecode(_$BudgetPeriodEnumMap, json['period']),
|
||||
year: (json['year'] as num).toInt(),
|
||||
month: (json['month'] as num?)?.toInt(),
|
||||
status: $enumDecode(_$BudgetStatusEnumMap, json['status']),
|
||||
lines: json['lines'] == null
|
||||
? const []
|
||||
: BudgetModel._linesFromJson(json['lines'] as List?),
|
||||
totalPlanned: (json['totalPlanned'] as num).toDouble(),
|
||||
totalRealized: (json['totalRealized'] as num?)?.toDouble() ?? 0,
|
||||
currency: json['currency'] as String? ?? 'XOF',
|
||||
createdBy: json['createdBy'] as String,
|
||||
createdAt: DateTime.parse(json['createdAt'] as String),
|
||||
approvedAt: json['approvedAt'] == null
|
||||
? null
|
||||
: DateTime.parse(json['approvedAt'] as String),
|
||||
approvedBy: json['approvedBy'] as String?,
|
||||
startDate: DateTime.parse(json['startDate'] as String),
|
||||
endDate: DateTime.parse(json['endDate'] as String),
|
||||
metadata: json['metadata'] as Map<String, dynamic>?,
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$BudgetModelToJson(BudgetModel instance) =>
|
||||
<String, dynamic>{
|
||||
|
||||
@@ -7,55 +7,55 @@ part of 'transaction_approval_model.dart';
|
||||
// **************************************************************************
|
||||
|
||||
TransactionApprovalModel _$TransactionApprovalModelFromJson(
|
||||
Map<String, dynamic> json) =>
|
||||
TransactionApprovalModel(
|
||||
id: json['id'] as String,
|
||||
transactionId: json['transactionId'] as String,
|
||||
transactionType:
|
||||
$enumDecode(_$TransactionTypeEnumMap, json['transactionType']),
|
||||
amount: (json['amount'] as num).toDouble(),
|
||||
currency: json['currency'] as String? ?? 'XOF',
|
||||
requesterId: json['requesterId'] as String,
|
||||
requesterName: json['requesterName'] as String,
|
||||
organizationId: json['organizationId'] as String?,
|
||||
requiredLevel: $enumDecode(_$ApprovalLevelEnumMap, json['requiredLevel']),
|
||||
status: $enumDecode(_$ApprovalStatusEnumMap, json['status']),
|
||||
approvers: json['approvers'] == null
|
||||
? const []
|
||||
: TransactionApprovalModel._approversFromJson(
|
||||
json['approvers'] as List?),
|
||||
rejectionReason: json['rejectionReason'] as String?,
|
||||
createdAt: DateTime.parse(json['createdAt'] as String),
|
||||
expiresAt: json['expiresAt'] == null
|
||||
? null
|
||||
: DateTime.parse(json['expiresAt'] as String),
|
||||
completedAt: json['completedAt'] == null
|
||||
? null
|
||||
: DateTime.parse(json['completedAt'] as String),
|
||||
metadata: json['metadata'] as Map<String, dynamic>?,
|
||||
);
|
||||
Map<String, dynamic> json,
|
||||
) => TransactionApprovalModel(
|
||||
id: json['id'] as String,
|
||||
transactionId: json['transactionId'] as String,
|
||||
transactionType: $enumDecode(
|
||||
_$TransactionTypeEnumMap,
|
||||
json['transactionType'],
|
||||
),
|
||||
amount: (json['amount'] as num).toDouble(),
|
||||
currency: json['currency'] as String? ?? 'XOF',
|
||||
requesterId: json['requesterId'] as String,
|
||||
requesterName: json['requesterName'] as String,
|
||||
organizationId: json['organizationId'] as String?,
|
||||
requiredLevel: $enumDecode(_$ApprovalLevelEnumMap, json['requiredLevel']),
|
||||
status: $enumDecode(_$ApprovalStatusEnumMap, json['status']),
|
||||
approvers: json['approvers'] == null
|
||||
? const []
|
||||
: TransactionApprovalModel._approversFromJson(json['approvers'] as List?),
|
||||
rejectionReason: json['rejectionReason'] as String?,
|
||||
createdAt: DateTime.parse(json['createdAt'] as String),
|
||||
expiresAt: json['expiresAt'] == null
|
||||
? null
|
||||
: DateTime.parse(json['expiresAt'] as String),
|
||||
completedAt: json['completedAt'] == null
|
||||
? null
|
||||
: DateTime.parse(json['completedAt'] as String),
|
||||
metadata: json['metadata'] as Map<String, dynamic>?,
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$TransactionApprovalModelToJson(
|
||||
TransactionApprovalModel instance) =>
|
||||
<String, dynamic>{
|
||||
'id': instance.id,
|
||||
'transactionId': instance.transactionId,
|
||||
'transactionType': _$TransactionTypeEnumMap[instance.transactionType]!,
|
||||
'amount': instance.amount,
|
||||
'currency': instance.currency,
|
||||
'requesterId': instance.requesterId,
|
||||
'requesterName': instance.requesterName,
|
||||
'organizationId': instance.organizationId,
|
||||
'requiredLevel': _$ApprovalLevelEnumMap[instance.requiredLevel]!,
|
||||
'status': _$ApprovalStatusEnumMap[instance.status]!,
|
||||
'rejectionReason': instance.rejectionReason,
|
||||
'createdAt': instance.createdAt.toIso8601String(),
|
||||
'expiresAt': instance.expiresAt?.toIso8601String(),
|
||||
'completedAt': instance.completedAt?.toIso8601String(),
|
||||
'metadata': instance.metadata,
|
||||
'approvers':
|
||||
TransactionApprovalModel._approversToJson(instance.approvers),
|
||||
};
|
||||
TransactionApprovalModel instance,
|
||||
) => <String, dynamic>{
|
||||
'id': instance.id,
|
||||
'transactionId': instance.transactionId,
|
||||
'transactionType': _$TransactionTypeEnumMap[instance.transactionType]!,
|
||||
'amount': instance.amount,
|
||||
'currency': instance.currency,
|
||||
'requesterId': instance.requesterId,
|
||||
'requesterName': instance.requesterName,
|
||||
'organizationId': instance.organizationId,
|
||||
'requiredLevel': _$ApprovalLevelEnumMap[instance.requiredLevel]!,
|
||||
'status': _$ApprovalStatusEnumMap[instance.status]!,
|
||||
'rejectionReason': instance.rejectionReason,
|
||||
'createdAt': instance.createdAt.toIso8601String(),
|
||||
'expiresAt': instance.expiresAt?.toIso8601String(),
|
||||
'completedAt': instance.completedAt?.toIso8601String(),
|
||||
'metadata': instance.metadata,
|
||||
'approvers': TransactionApprovalModel._approversToJson(instance.approvers),
|
||||
};
|
||||
|
||||
const _$TransactionTypeEnumMap = {
|
||||
TransactionType.contribution: 'contribution',
|
||||
@@ -96,15 +96,15 @@ ApproverActionModel _$ApproverActionModelFromJson(Map<String, dynamic> json) =>
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$ApproverActionModelToJson(
|
||||
ApproverActionModel instance) =>
|
||||
<String, dynamic>{
|
||||
'approverId': instance.approverId,
|
||||
'approverName': instance.approverName,
|
||||
'approverRole': instance.approverRole,
|
||||
'decision': _$ApprovalDecisionEnumMap[instance.decision]!,
|
||||
'comment': instance.comment,
|
||||
'decidedAt': instance.decidedAt?.toIso8601String(),
|
||||
};
|
||||
ApproverActionModel instance,
|
||||
) => <String, dynamic>{
|
||||
'approverId': instance.approverId,
|
||||
'approverName': instance.approverName,
|
||||
'approverRole': instance.approverRole,
|
||||
'decision': _$ApprovalDecisionEnumMap[instance.decision]!,
|
||||
'comment': instance.comment,
|
||||
'decidedAt': instance.decidedAt?.toIso8601String(),
|
||||
};
|
||||
|
||||
const _$ApprovalDecisionEnumMap = {
|
||||
ApprovalDecision.pending: 'pending',
|
||||
|
||||
@@ -28,7 +28,7 @@ MembreCompletModel _$MembreCompletModelFromJson(Map<String, dynamic> json) =>
|
||||
photo: json['photo'] as String?,
|
||||
statut:
|
||||
$enumDecodeNullable(_$StatutMembreEnumMap, json['statutCompte']) ??
|
||||
StatutMembre.actif,
|
||||
StatutMembre.actif,
|
||||
role: json['role'] as String?,
|
||||
organisationId: json['organisationId'] as String?,
|
||||
organisationNom: json['organisationNom'] as String?,
|
||||
@@ -60,7 +60,9 @@ MembreCompletModel _$MembreCompletModelFromJson(Map<String, dynamic> json) =>
|
||||
: DateTime.parse(json['dateModification'] as String),
|
||||
actif: json['actif'] as bool? ?? true,
|
||||
niveauVigilanceKyc: $enumDecodeNullable(
|
||||
_$NiveauVigilanceKycEnumMap, json['niveauVigilanceKyc']),
|
||||
_$NiveauVigilanceKycEnumMap,
|
||||
json['niveauVigilanceKyc'],
|
||||
),
|
||||
statutKyc: $enumDecodeNullable(_$StatutKycEnumMap, json['statutKyc']),
|
||||
dateVerificationIdentite: json['dateVerificationIdentite'] == null
|
||||
? null
|
||||
@@ -109,8 +111,8 @@ Map<String, dynamic> _$MembreCompletModelToJson(MembreCompletModel instance) =>
|
||||
'niveauVigilanceKyc':
|
||||
_$NiveauVigilanceKycEnumMap[instance.niveauVigilanceKyc],
|
||||
'statutKyc': _$StatutKycEnumMap[instance.statutKyc],
|
||||
'dateVerificationIdentite':
|
||||
instance.dateVerificationIdentite?.toIso8601String(),
|
||||
'dateVerificationIdentite': instance.dateVerificationIdentite
|
||||
?.toIso8601String(),
|
||||
'motDePasseTemporaire': instance.motDePasseTemporaire,
|
||||
};
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ OrganizationModel _$OrganizationModelFromJson(Map<String, dynamic> json) =>
|
||||
typeOrganisation: json['typeOrganisation'] as String? ?? 'ASSOCIATION',
|
||||
statut:
|
||||
$enumDecodeNullable(_$StatutOrganizationEnumMap, json['statut']) ??
|
||||
StatutOrganization.active,
|
||||
StatutOrganization.active,
|
||||
description: json['description'] as String?,
|
||||
dateFondation: json['dateFondation'] == null
|
||||
? null
|
||||
@@ -39,8 +39,8 @@ OrganizationModel _$OrganizationModelFromJson(Map<String, dynamic> json) =>
|
||||
budgetAnnuel: (json['budgetAnnuel'] as num?)?.toDouble(),
|
||||
devise: json['devise'] as String? ?? 'XOF',
|
||||
cotisationObligatoire: json['cotisationObligatoire'] as bool? ?? false,
|
||||
montantCotisationAnnuelle:
|
||||
(json['montantCotisationAnnuelle'] as num?)?.toDouble(),
|
||||
montantCotisationAnnuelle: (json['montantCotisationAnnuelle'] as num?)
|
||||
?.toDouble(),
|
||||
objectifs: json['objectifs'] as String?,
|
||||
activitesPrincipales: json['activitesPrincipales'] as String?,
|
||||
certifications: json['certifications'] as String?,
|
||||
|
||||
@@ -157,8 +157,8 @@ class _ReportsPageState extends State<ReportsPage>
|
||||
|
||||
Widget _buildKPICards() {
|
||||
final totalMembres = _statsMembres['total']?.toString() ?? '--';
|
||||
final membresActifs = _statsMembres['actifs']?.toString() ?? '--';
|
||||
final totalCotisations = _statsCotisations['total']?.toString() ?? '--';
|
||||
final membresActifs = _statsMembres['membresActifs']?.toString() ?? '--';
|
||||
final totalCotisations = _statsCotisations['totalCotisations']?.toString() ?? '--';
|
||||
final totalEvenements = _statsEvenements['total']?.toString() ?? '--';
|
||||
|
||||
return Column(
|
||||
|
||||
@@ -37,8 +37,8 @@ SystemConfigModel _$SystemConfigModelFromJson(Map<String, dynamic> json) =>
|
||||
detailedLoggingEnabled: json['detailedLoggingEnabled'] as bool?,
|
||||
logCompressionEnabled: json['logCompressionEnabled'] as bool?,
|
||||
realTimeMonitoringEnabled: json['realTimeMonitoringEnabled'] as bool?,
|
||||
monitoringIntervalSeconds:
|
||||
(json['monitoringIntervalSeconds'] as num?)?.toInt(),
|
||||
monitoringIntervalSeconds: (json['monitoringIntervalSeconds'] as num?)
|
||||
?.toInt(),
|
||||
emailAlertsEnabled: json['emailAlertsEnabled'] as bool?,
|
||||
pushAlertsEnabled: json['pushAlertsEnabled'] as bool?,
|
||||
cpuHighAlertEnabled: json['cpuHighAlertEnabled'] as bool?,
|
||||
@@ -48,8 +48,8 @@ SystemConfigModel _$SystemConfigModelFromJson(Map<String, dynamic> json) =>
|
||||
criticalErrorAlertEnabled: json['criticalErrorAlertEnabled'] as bool?,
|
||||
connectionFailureAlertEnabled:
|
||||
json['connectionFailureAlertEnabled'] as bool?,
|
||||
connectionFailureThreshold:
|
||||
(json['connectionFailureThreshold'] as num?)?.toInt(),
|
||||
connectionFailureThreshold: (json['connectionFailureThreshold'] as num?)
|
||||
?.toInt(),
|
||||
systemStatus: json['systemStatus'] as String?,
|
||||
uptime: (json['uptime'] as num?)?.toInt(),
|
||||
);
|
||||
|
||||
@@ -6,68 +6,67 @@ part of 'system_metrics_model.dart';
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
SystemMetricsModel _$SystemMetricsModelFromJson(Map<String, dynamic> json) =>
|
||||
SystemMetricsModel(
|
||||
cpuUsagePercent: (json['cpuUsagePercent'] as num?)?.toDouble(),
|
||||
availableProcessors: (json['availableProcessors'] as num?)?.toInt(),
|
||||
systemLoadAverage: (json['systemLoadAverage'] as num?)?.toDouble(),
|
||||
totalMemoryBytes: (json['totalMemoryBytes'] as num?)?.toInt(),
|
||||
usedMemoryBytes: (json['usedMemoryBytes'] as num?)?.toInt(),
|
||||
freeMemoryBytes: (json['freeMemoryBytes'] as num?)?.toInt(),
|
||||
maxMemoryBytes: (json['maxMemoryBytes'] as num?)?.toInt(),
|
||||
memoryUsagePercent: (json['memoryUsagePercent'] as num?)?.toDouble(),
|
||||
totalMemoryFormatted: json['totalMemoryFormatted'] as String?,
|
||||
usedMemoryFormatted: json['usedMemoryFormatted'] as String?,
|
||||
freeMemoryFormatted: json['freeMemoryFormatted'] as String?,
|
||||
totalDiskBytes: (json['totalDiskBytes'] as num?)?.toInt(),
|
||||
usedDiskBytes: (json['usedDiskBytes'] as num?)?.toInt(),
|
||||
freeDiskBytes: (json['freeDiskBytes'] as num?)?.toInt(),
|
||||
diskUsagePercent: (json['diskUsagePercent'] as num?)?.toDouble(),
|
||||
totalDiskFormatted: json['totalDiskFormatted'] as String?,
|
||||
usedDiskFormatted: json['usedDiskFormatted'] as String?,
|
||||
freeDiskFormatted: json['freeDiskFormatted'] as String?,
|
||||
activeUsersCount: (json['activeUsersCount'] as num?)?.toInt(),
|
||||
totalUsersCount: (json['totalUsersCount'] as num?)?.toInt(),
|
||||
activeSessionsCount: (json['activeSessionsCount'] as num?)?.toInt(),
|
||||
failedLoginAttempts24h: (json['failedLoginAttempts24h'] as num?)?.toInt(),
|
||||
apiRequestsLastHour: (json['apiRequestsLastHour'] as num?)?.toInt(),
|
||||
apiRequestsToday: (json['apiRequestsToday'] as num?)?.toInt(),
|
||||
averageResponseTimeMs:
|
||||
(json['averageResponseTimeMs'] as num?)?.toDouble(),
|
||||
totalRequestsCount: (json['totalRequestsCount'] as num?)?.toInt(),
|
||||
dbConnectionPoolSize: (json['dbConnectionPoolSize'] as num?)?.toInt(),
|
||||
dbActiveConnections: (json['dbActiveConnections'] as num?)?.toInt(),
|
||||
dbIdleConnections: (json['dbIdleConnections'] as num?)?.toInt(),
|
||||
dbHealthy: json['dbHealthy'] as bool?,
|
||||
criticalErrorsCount: (json['criticalErrorsCount'] as num?)?.toInt(),
|
||||
warningsCount: (json['warningsCount'] as num?)?.toInt(),
|
||||
infoLogsCount: (json['infoLogsCount'] as num?)?.toInt(),
|
||||
debugLogsCount: (json['debugLogsCount'] as num?)?.toInt(),
|
||||
totalLogsCount: (json['totalLogsCount'] as num?)?.toInt(),
|
||||
networkBytesReceivedPerSec:
|
||||
(json['networkBytesReceivedPerSec'] as num?)?.toDouble(),
|
||||
networkBytesSentPerSec:
|
||||
(json['networkBytesSentPerSec'] as num?)?.toDouble(),
|
||||
networkInFormatted: json['networkInFormatted'] as String?,
|
||||
networkOutFormatted: json['networkOutFormatted'] as String?,
|
||||
systemStatus: json['systemStatus'] as String?,
|
||||
uptimeMillis: (json['uptimeMillis'] as num?)?.toInt(),
|
||||
uptimeFormatted: json['uptimeFormatted'] as String?,
|
||||
startTime: json['startTime'] as String?,
|
||||
currentTime: json['currentTime'] as String?,
|
||||
javaVersion: json['javaVersion'] as String?,
|
||||
quarkusVersion: json['quarkusVersion'] as String?,
|
||||
applicationVersion: json['applicationVersion'] as String?,
|
||||
lastBackup: json['lastBackup'] as String?,
|
||||
nextScheduledMaintenance: json['nextScheduledMaintenance'] as String?,
|
||||
lastMaintenance: json['lastMaintenance'] as String?,
|
||||
apiBaseUrl: json['apiBaseUrl'] as String?,
|
||||
authServerUrl: json['authServerUrl'] as String?,
|
||||
cdnUrl: json['cdnUrl'] as String?,
|
||||
totalCacheSizeBytes: (json['totalCacheSizeBytes'] as num?)?.toInt(),
|
||||
totalCacheSizeFormatted: json['totalCacheSizeFormatted'] as String?,
|
||||
totalCacheEntries: (json['totalCacheEntries'] as num?)?.toInt(),
|
||||
);
|
||||
SystemMetricsModel _$SystemMetricsModelFromJson(
|
||||
Map<String, dynamic> json,
|
||||
) => SystemMetricsModel(
|
||||
cpuUsagePercent: (json['cpuUsagePercent'] as num?)?.toDouble(),
|
||||
availableProcessors: (json['availableProcessors'] as num?)?.toInt(),
|
||||
systemLoadAverage: (json['systemLoadAverage'] as num?)?.toDouble(),
|
||||
totalMemoryBytes: (json['totalMemoryBytes'] as num?)?.toInt(),
|
||||
usedMemoryBytes: (json['usedMemoryBytes'] as num?)?.toInt(),
|
||||
freeMemoryBytes: (json['freeMemoryBytes'] as num?)?.toInt(),
|
||||
maxMemoryBytes: (json['maxMemoryBytes'] as num?)?.toInt(),
|
||||
memoryUsagePercent: (json['memoryUsagePercent'] as num?)?.toDouble(),
|
||||
totalMemoryFormatted: json['totalMemoryFormatted'] as String?,
|
||||
usedMemoryFormatted: json['usedMemoryFormatted'] as String?,
|
||||
freeMemoryFormatted: json['freeMemoryFormatted'] as String?,
|
||||
totalDiskBytes: (json['totalDiskBytes'] as num?)?.toInt(),
|
||||
usedDiskBytes: (json['usedDiskBytes'] as num?)?.toInt(),
|
||||
freeDiskBytes: (json['freeDiskBytes'] as num?)?.toInt(),
|
||||
diskUsagePercent: (json['diskUsagePercent'] as num?)?.toDouble(),
|
||||
totalDiskFormatted: json['totalDiskFormatted'] as String?,
|
||||
usedDiskFormatted: json['usedDiskFormatted'] as String?,
|
||||
freeDiskFormatted: json['freeDiskFormatted'] as String?,
|
||||
activeUsersCount: (json['activeUsersCount'] as num?)?.toInt(),
|
||||
totalUsersCount: (json['totalUsersCount'] as num?)?.toInt(),
|
||||
activeSessionsCount: (json['activeSessionsCount'] as num?)?.toInt(),
|
||||
failedLoginAttempts24h: (json['failedLoginAttempts24h'] as num?)?.toInt(),
|
||||
apiRequestsLastHour: (json['apiRequestsLastHour'] as num?)?.toInt(),
|
||||
apiRequestsToday: (json['apiRequestsToday'] as num?)?.toInt(),
|
||||
averageResponseTimeMs: (json['averageResponseTimeMs'] as num?)?.toDouble(),
|
||||
totalRequestsCount: (json['totalRequestsCount'] as num?)?.toInt(),
|
||||
dbConnectionPoolSize: (json['dbConnectionPoolSize'] as num?)?.toInt(),
|
||||
dbActiveConnections: (json['dbActiveConnections'] as num?)?.toInt(),
|
||||
dbIdleConnections: (json['dbIdleConnections'] as num?)?.toInt(),
|
||||
dbHealthy: json['dbHealthy'] as bool?,
|
||||
criticalErrorsCount: (json['criticalErrorsCount'] as num?)?.toInt(),
|
||||
warningsCount: (json['warningsCount'] as num?)?.toInt(),
|
||||
infoLogsCount: (json['infoLogsCount'] as num?)?.toInt(),
|
||||
debugLogsCount: (json['debugLogsCount'] as num?)?.toInt(),
|
||||
totalLogsCount: (json['totalLogsCount'] as num?)?.toInt(),
|
||||
networkBytesReceivedPerSec: (json['networkBytesReceivedPerSec'] as num?)
|
||||
?.toDouble(),
|
||||
networkBytesSentPerSec: (json['networkBytesSentPerSec'] as num?)?.toDouble(),
|
||||
networkInFormatted: json['networkInFormatted'] as String?,
|
||||
networkOutFormatted: json['networkOutFormatted'] as String?,
|
||||
systemStatus: json['systemStatus'] as String?,
|
||||
uptimeMillis: (json['uptimeMillis'] as num?)?.toInt(),
|
||||
uptimeFormatted: json['uptimeFormatted'] as String?,
|
||||
startTime: json['startTime'] as String?,
|
||||
currentTime: json['currentTime'] as String?,
|
||||
javaVersion: json['javaVersion'] as String?,
|
||||
quarkusVersion: json['quarkusVersion'] as String?,
|
||||
applicationVersion: json['applicationVersion'] as String?,
|
||||
lastBackup: json['lastBackup'] as String?,
|
||||
nextScheduledMaintenance: json['nextScheduledMaintenance'] as String?,
|
||||
lastMaintenance: json['lastMaintenance'] as String?,
|
||||
apiBaseUrl: json['apiBaseUrl'] as String?,
|
||||
authServerUrl: json['authServerUrl'] as String?,
|
||||
cdnUrl: json['cdnUrl'] as String?,
|
||||
totalCacheSizeBytes: (json['totalCacheSizeBytes'] as num?)?.toInt(),
|
||||
totalCacheSizeFormatted: json['totalCacheSizeFormatted'] as String?,
|
||||
totalCacheEntries: (json['totalCacheEntries'] as num?)?.toInt(),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$SystemMetricsModelToJson(SystemMetricsModel instance) =>
|
||||
<String, dynamic>{
|
||||
|
||||
Reference in New Issue
Block a user