Initial commit

This commit is contained in:
Lorenzo Sanesi
2026-03-26 22:46:03 +01:00
commit 18e0e04700
80 changed files with 13114 additions and 0 deletions
+142
View File
@@ -0,0 +1,142 @@
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,
];
}