feat: Add User and UserBalance models with serialization methods

feat: Implement BalanceRepository for group balance calculations

feat: Create ExpenseRepository for managing expenses

feat: Add services for handling expenses and storage operations

fix: Update import paths for models in repositories and services

refactor: Rename CountContent to AccountContent in HomePage

chore: Add StorageService for image upload and management
This commit is contained in:
Dayron
2025-10-21 16:02:58 +02:00
parent 62eb434548
commit 4edbd1cf34
60 changed files with 1973 additions and 342 deletions

View File

@@ -0,0 +1,58 @@
import 'package:equatable/equatable.dart';
class ExpenseSplit extends Equatable {
final String userId;
final String userName;
final double amount;
final bool isPaid;
final DateTime? paidAt;
const ExpenseSplit({
required this.userId,
required this.userName,
required this.amount,
this.isPaid = false,
this.paidAt,
});
factory ExpenseSplit.fromMap(Map<String, dynamic> map) {
return ExpenseSplit(
userId: map['userId'] ?? '',
userName: map['userName'] ?? '',
amount: (map['amount'] as num?)?.toDouble() ?? 0.0,
isPaid: map['isPaid'] ?? false,
paidAt: map['paidAt'] != null
? DateTime.fromMillisecondsSinceEpoch(map['paidAt'])
: null,
);
}
Map<String, dynamic> toMap() {
return {
'userId': userId,
'userName': userName,
'amount': amount,
'isPaid': isPaid,
'paidAt': paidAt?.millisecondsSinceEpoch,
};
}
ExpenseSplit copyWith({
String? userId,
String? userName,
double? amount,
bool? isPaid,
DateTime? paidAt,
}) {
return ExpenseSplit(
userId: userId ?? this.userId,
userName: userName ?? this.userName,
amount: amount ?? this.amount,
isPaid: isPaid ?? this.isPaid,
paidAt: paidAt ?? this.paidAt,
);
}
@override
List<Object?> get props => [userId, userName, amount, isPaid];
}