143 lines
3.3 KiB
Dart
143 lines
3.3 KiB
Dart
import 'package:equatable/equatable.dart';
|
|
import 'user.dart';
|
|
|
|
enum BetStatus {
|
|
active('ACTIVE'),
|
|
awaitingValidation('AWAITING_VALIDATION'),
|
|
completed('COMPLETED'),
|
|
expired('EXPIRED');
|
|
|
|
final String value;
|
|
const BetStatus(this.value);
|
|
|
|
static BetStatus fromString(String value) {
|
|
return BetStatus.values.firstWhere(
|
|
(e) => e.value == value,
|
|
orElse: () => BetStatus.active,
|
|
);
|
|
}
|
|
}
|
|
|
|
enum BetRole {
|
|
participant('PARTICIPANT'),
|
|
observer('OBSERVER');
|
|
|
|
final String value;
|
|
const BetRole(this.value);
|
|
|
|
static BetRole fromString(String value) {
|
|
return BetRole.values.firstWhere(
|
|
(e) => e.value == value,
|
|
orElse: () => BetRole.observer,
|
|
);
|
|
}
|
|
}
|
|
|
|
class BetParticipant extends Equatable {
|
|
final User user;
|
|
final BetRole role;
|
|
|
|
const BetParticipant({
|
|
required this.user,
|
|
required this.role,
|
|
});
|
|
|
|
factory BetParticipant.fromJson(Map<String, dynamic> json) {
|
|
return BetParticipant(
|
|
user: User.fromJson(json['user'] as Map<String, dynamic>),
|
|
role: BetRole.fromString(json['role'] as String),
|
|
);
|
|
}
|
|
|
|
Map<String, dynamic> toJson() {
|
|
return {
|
|
'user': user.toJson(),
|
|
'role': role.value,
|
|
};
|
|
}
|
|
|
|
@override
|
|
List<Object?> get props => [user, role];
|
|
}
|
|
|
|
class Bet extends Equatable {
|
|
final String id;
|
|
final String title;
|
|
final String description;
|
|
final List<BetParticipant> participants;
|
|
final BetStatus status;
|
|
final DateTime startDate;
|
|
final DateTime? endDate;
|
|
final bool isPublic;
|
|
final String? groupId;
|
|
final String stake;
|
|
final User? winner;
|
|
|
|
const Bet({
|
|
required this.id,
|
|
required this.title,
|
|
required this.description,
|
|
required this.participants,
|
|
required this.status,
|
|
required this.startDate,
|
|
this.endDate,
|
|
required this.isPublic,
|
|
this.groupId,
|
|
required this.stake,
|
|
this.winner,
|
|
});
|
|
|
|
factory Bet.fromJson(Map<String, dynamic> json) {
|
|
return Bet(
|
|
id: json['id'] as String,
|
|
title: json['title'] as String,
|
|
description: json['description'] as String,
|
|
participants: (json['participants'] as List)
|
|
.map((p) => BetParticipant.fromJson(p as Map<String, dynamic>))
|
|
.toList(),
|
|
status: BetStatus.fromString(json['status'] as String),
|
|
startDate: DateTime.parse(json['startDate'] as String),
|
|
endDate: json['endDate'] != null
|
|
? DateTime.parse(json['endDate'] as String)
|
|
: null,
|
|
isPublic: json['isPublic'] as bool,
|
|
groupId: json['groupId'] as String?,
|
|
stake: json['stake'] as String,
|
|
winner: json['winner'] != null
|
|
? User.fromJson(json['winner'] as Map<String, dynamic>)
|
|
: null,
|
|
);
|
|
}
|
|
|
|
Map<String, dynamic> toJson() {
|
|
return {
|
|
'id': id,
|
|
'title': title,
|
|
'description': description,
|
|
'participants': participants.map((p) => p.toJson()).toList(),
|
|
'status': status.value,
|
|
'startDate': startDate.toIso8601String(),
|
|
'endDate': endDate?.toIso8601String(),
|
|
'isPublic': isPublic,
|
|
'groupId': groupId,
|
|
'stake': stake,
|
|
'winner': winner?.toJson(),
|
|
};
|
|
}
|
|
|
|
@override
|
|
List<Object?> get props => [
|
|
id,
|
|
title,
|
|
description,
|
|
participants,
|
|
status,
|
|
startDate,
|
|
endDate,
|
|
isPublic,
|
|
groupId,
|
|
stake,
|
|
winner,
|
|
];
|
|
}
|