feat: integrate ErrorService for consistent error display and standardize bloc error messages.

This commit is contained in:
Van Leemput Dayron
2025-12-02 13:59:40 +01:00
parent 1e70b9e09f
commit 6757cb013a
24 changed files with 927 additions and 608 deletions

View File

@@ -37,9 +37,13 @@ class BalanceRepository {
totalExpenses: totalExpenses,
calculatedAt: DateTime.now(),
);
} catch (e) {
_errorService.logError('BalanceRepository', 'Erreur calcul balance: $e');
rethrow;
} catch (e, stackTrace) {
_errorService.logError(
'BalanceRepository',
'Erreur calcul balance: $e',
stackTrace,
);
throw Exception('Impossible de calculer la balance');
}
}
@@ -50,9 +54,13 @@ class BalanceRepository {
.first;
return _calculateUserBalances(expenses);
} catch (e) {
_errorService.logError('BalanceRepository', 'Erreur calcul user balances: $e');
rethrow;
} catch (e, stackTrace) {
_errorService.logError(
'BalanceRepository',
'Erreur calcul user balances: $e',
stackTrace,
);
throw Exception('Impossible de calculer les balances utilisateurs');
}
}
@@ -65,19 +73,17 @@ class BalanceRepository {
if (expense.isArchived) continue;
// Ajouter le payeur
userBalanceMap.putIfAbsent(expense.paidById, () => {
'name': expense.paidByName,
'paid': 0.0,
'owed': 0.0,
});
userBalanceMap.putIfAbsent(
expense.paidById,
() => {'name': expense.paidByName, 'paid': 0.0, 'owed': 0.0},
);
// Ajouter les participants
for (final split in expense.splits) {
userBalanceMap.putIfAbsent(split.userId, () => {
'name': split.userName,
'paid': 0.0,
'owed': 0.0,
});
userBalanceMap.putIfAbsent(
split.userId,
() => {'name': split.userName, 'paid': 0.0, 'owed': 0.0},
);
}
}
@@ -100,7 +106,7 @@ class BalanceRepository {
final data = entry.value;
final paid = data['paid'] as double;
final owed = data['owed'] as double;
return UserBalance(
userId: userId,
userName: data['name'] as String,
@@ -114,7 +120,7 @@ class BalanceRepository {
// Algorithme d'optimisation des règlements
List<Settlement> _calculateOptimalSettlements(List<UserBalance> balances) {
final settlements = <Settlement>[];
// Séparer les créditeurs et débiteurs
final creditors = balances.where((b) => b.shouldReceive).toList();
final debtors = balances.where((b) => b.shouldPay).toList();
@@ -125,10 +131,10 @@ class BalanceRepository {
// Créer des copies mutables des montants
final creditorsRemaining = Map.fromEntries(
creditors.map((c) => MapEntry(c.userId, c.balance))
creditors.map((c) => MapEntry(c.userId, c.balance)),
);
final debtorsRemaining = Map.fromEntries(
debtors.map((d) => MapEntry(d.userId, -d.balance))
debtors.map((d) => MapEntry(d.userId, -d.balance)),
);
// Algorithme glouton pour minimiser le nombre de transactions
@@ -139,15 +145,20 @@ class BalanceRepository {
if (creditAmount <= 0.01 || debtAmount <= 0.01) continue;
final settlementAmount = [creditAmount, debtAmount].reduce((a, b) => a < b ? a : b);
final settlementAmount = [
creditAmount,
debtAmount,
].reduce((a, b) => a < b ? a : b);
settlements.add(Settlement(
fromUserId: debtor.userId,
fromUserName: debtor.userName,
toUserId: creditor.userId,
toUserName: creditor.userName,
amount: settlementAmount,
));
settlements.add(
Settlement(
fromUserId: debtor.userId,
fromUserName: debtor.userName,
toUserId: creditor.userId,
toUserName: creditor.userName,
amount: settlementAmount,
),
);
creditorsRemaining[creditor.userId] = creditAmount - settlementAmount;
debtorsRemaining[debtor.userId] = debtAmount - settlementAmount;
@@ -156,4 +167,4 @@ class BalanceRepository {
return settlements;
}
}
}