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:
dahoud
2026-04-21 12:42:35 +00:00
parent 33f5b5a707
commit 37db88672b
142 changed files with 27599 additions and 16068 deletions

View File

@@ -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>{

View File

@@ -1,2 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
// Modèles v4 : désérialisation manuelle, code generation non utilisé.

View File

@@ -1,2 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
// Modèles v4 : désérialisation manuelle, code generation non utilisé.

View File

@@ -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(),

View File

@@ -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(),

View File

@@ -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) {

View File

@@ -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?,

View File

@@ -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>{

View File

@@ -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',

View File

@@ -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,
};

View File

@@ -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?,

View File

@@ -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(

View File

@@ -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(),
);

View File

@@ -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>{