chitfund/luckychit/lib/core/models/group_member.dart

96 lines
2.9 KiB
Dart

import 'user.dart';
class GroupMember {
final String id;
final String groupId;
final String userId;
final int memberNumber; // Readable serial number (1, 2, 3...)
final DateTime joinedDate;
final String status;
final double totalPaid;
final double totalWon;
final DateTime createdAt;
final DateTime updatedAt;
final User? user;
GroupMember({
required this.id,
required this.groupId,
required this.userId,
required this.memberNumber,
required this.joinedDate,
required this.status,
required this.totalPaid,
required this.totalWon,
required this.createdAt,
required this.updatedAt,
this.user,
});
factory GroupMember.fromJson(Map<String, dynamic> json) {
return GroupMember(
id: json['id'] ?? '',
groupId: json['group_id'] ?? '',
userId: json['user_id'] ?? '',
memberNumber: _parseInt(json['member_number']),
joinedDate: json['joined_date'] != null ? DateTime.parse(json['joined_date']) : DateTime.now(),
status: json['status'] ?? 'active',
totalPaid: _parseDouble(json['total_paid']),
totalWon: _parseDouble(json['total_won']),
createdAt: json['created_at'] != null ? DateTime.parse(json['created_at']) : DateTime.now(),
updatedAt: json['updated_at'] != null ? DateTime.parse(json['updated_at']) : DateTime.now(),
user: json['User'] != null ? User.fromJson(json['User']) : null,
);
}
static int _parseInt(dynamic value) {
if (value == null) return 0;
if (value is int) return value;
if (value is String) {
try {
return int.parse(value);
} catch (e) {
print('Error parsing string to int: $value, error: $e');
return 0;
}
}
if (value is double) return value.toInt();
if (value is num) return value.toInt();
print('Warning: Cannot parse $value (${value.runtimeType}) to int, returning 0');
return 0;
}
static double _parseDouble(dynamic value) {
if (value == null) return 0.0;
if (value is double) return value;
if (value is int) return value.toDouble();
if (value is String) return double.parse(value);
throw ArgumentError('Cannot parse $value to double');
}
Map<String, dynamic> toJson() {
return {
'id': id,
'group_id': groupId,
'user_id': userId,
'member_number': memberNumber,
'joined_date': joinedDate.toIso8601String(),
'status': status,
'total_paid': totalPaid,
'total_won': totalWon,
'created_at': createdAt.toIso8601String(),
'updated_at': updatedAt.toIso8601String(),
'User': user?.toJson(),
};
}
// Helper methods
bool get isActive => status == 'active';
bool get isInactive => status == 'inactive';
bool get isRemoved => status == 'removed';
// Display formatted member number
String get displayNumber => '#$memberNumber';
String get fullDisplay => 'Member #$memberNumber';
}