268 lines
7.5 KiB
Dart
268 lines
7.5 KiB
Dart
import 'dart:convert';
|
|
|
|
ChallengesResponseModel challengesResponseModelFromJson(String str) =>
|
|
ChallengesResponseModel.fromJson(json.decode(str));
|
|
|
|
String challengesResponseModelToJson(ChallengesResponseModel data) =>
|
|
json.encode(data.toJson());
|
|
|
|
// Helper function for safe integer conversion
|
|
int? _safeToInt(dynamic value) {
|
|
if (value == null) return null;
|
|
if (value is int) return value;
|
|
if (value is double) return value.toInt();
|
|
if (value is String) {
|
|
return int.tryParse(value);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
class ChallengesResponseModel {
|
|
bool? isSuccess;
|
|
int? statusCode;
|
|
String? message;
|
|
Data? data;
|
|
dynamic errors;
|
|
|
|
ChallengesResponseModel({
|
|
this.isSuccess,
|
|
this.statusCode,
|
|
this.message,
|
|
this.data,
|
|
this.errors,
|
|
});
|
|
|
|
factory ChallengesResponseModel.fromJson(Map<String, dynamic> json) =>
|
|
ChallengesResponseModel(
|
|
isSuccess: json["isSuccess"],
|
|
statusCode: _safeToInt(json["statusCode"]),
|
|
message: json["message"],
|
|
data: json["data"] == null ? null : Data.fromJson(json["data"]),
|
|
errors: json["errors"],
|
|
);
|
|
|
|
Map<String, dynamic> toJson() => {
|
|
"isSuccess": isSuccess,
|
|
"statusCode": statusCode,
|
|
"message": message,
|
|
"data": data?.toJson(),
|
|
"errors": errors,
|
|
};
|
|
}
|
|
|
|
class Data {
|
|
int? totalCount;
|
|
List<ChallengeItem>? items;
|
|
|
|
Data({this.totalCount, this.items});
|
|
|
|
factory Data.fromJson(Map<String, dynamic> json) => Data(
|
|
totalCount: _safeToInt(json["totalCount"]),
|
|
items:
|
|
json["items"] == null
|
|
? []
|
|
: List<ChallengeItem>.from(
|
|
json["items"]!.map((x) => ChallengeItem.fromJson(x)),
|
|
),
|
|
);
|
|
|
|
Map<String, dynamic> toJson() => {
|
|
"totalCount": totalCount,
|
|
"items":
|
|
items == null ? [] : List<dynamic>.from(items!.map((x) => x.toJson())),
|
|
};
|
|
}
|
|
|
|
class ChallengeItem {
|
|
int? challengeId;
|
|
String? challengeTitle;
|
|
String? challengeDescription;
|
|
DateTime? startDate;
|
|
DateTime? endDate;
|
|
String? challengeImageName;
|
|
String? challengeVideoName;
|
|
String? challengeThumbnailName;
|
|
int? fitnessGoalId;
|
|
int? challengeVisibilityID;
|
|
String? fitnessGoalTitle;
|
|
int? totalParticipants;
|
|
bool? isChallengeJoined;
|
|
bool? isChallengeStarted;
|
|
bool? isChallengeEnded;
|
|
List<ChallengeTask>? tasks;
|
|
List<Participant>? participants;
|
|
|
|
ChallengeItem({
|
|
this.challengeId,
|
|
this.challengeTitle,
|
|
this.challengeDescription,
|
|
this.startDate,
|
|
this.endDate,
|
|
this.challengeImageName,
|
|
this.challengeVideoName,
|
|
this.challengeThumbnailName,
|
|
this.fitnessGoalId,
|
|
this.challengeVisibilityID,
|
|
this.fitnessGoalTitle,
|
|
this.totalParticipants,
|
|
this.isChallengeJoined,
|
|
this.tasks,
|
|
this.participants,
|
|
this.isChallengeStarted,
|
|
this.isChallengeEnded,
|
|
});
|
|
|
|
factory ChallengeItem.fromJson(Map<String, dynamic> json) => ChallengeItem(
|
|
challengeId: _safeToInt(json["challengeID"]),
|
|
challengeTitle: json["challengeTitle"],
|
|
challengeDescription: json["challengeDescription"],
|
|
startDate:
|
|
json["startDate"] == null ? null : DateTime.tryParse(json["startDate"]),
|
|
endDate:
|
|
json["endDate"] == null ? null : DateTime.tryParse(json["endDate"]),
|
|
challengeImageName: json["challengeImageName"],
|
|
challengeVideoName: json["challengeVideoName"],
|
|
challengeThumbnailName: json["challengeThumbnailName"],
|
|
fitnessGoalId: _safeToInt(json["fitnessGoalID"]),
|
|
fitnessGoalTitle: json["fitnessGoalTitle"],
|
|
totalParticipants: _safeToInt(json["totalParticipants"]),
|
|
isChallengeJoined: json["isChallengeJoined"],
|
|
isChallengeEnded: json["isChallengeEnded"],
|
|
isChallengeStarted: json["isChallengeStarted"],
|
|
challengeVisibilityID: json["challengeVisibilityID"],
|
|
tasks:
|
|
json["tasks"] == null
|
|
? []
|
|
: List<ChallengeTask>.from(
|
|
json["tasks"]!.map((x) => ChallengeTask.fromJson(x)),
|
|
),
|
|
participants:
|
|
json["participants"] == null
|
|
? []
|
|
: List<Participant>.from(
|
|
json["participants"]!.map((x) => Participant.fromJson(x)),
|
|
),
|
|
);
|
|
|
|
Map<String, dynamic> toJson() => {
|
|
"challengeID": challengeId,
|
|
"challengeTitle": challengeTitle,
|
|
"challengeDescription": challengeDescription,
|
|
"startDate": startDate?.toIso8601String(),
|
|
"endDate": endDate?.toIso8601String(),
|
|
"challengeImageName": challengeImageName,
|
|
"challengeVideoName": challengeVideoName,
|
|
"challengeThumbnailName": challengeThumbnailName,
|
|
"fitnessGoalID": fitnessGoalId,
|
|
"fitnessGoalTitle": fitnessGoalTitle,
|
|
"totalParticipants": totalParticipants,
|
|
"isChallengeJoined": isChallengeJoined,
|
|
"isChallengeStarted": isChallengeStarted,
|
|
"isChallengeEnded": isChallengeEnded,
|
|
"challengeVisibilityID": challengeVisibilityID,
|
|
"tasks":
|
|
tasks == null ? [] : List<dynamic>.from(tasks!.map((x) => x.toJson())),
|
|
"participants":
|
|
participants == null
|
|
? []
|
|
: List<dynamic>.from(participants!.map((x) => x.toJson())),
|
|
};
|
|
}
|
|
|
|
class ChallengeTask {
|
|
int? challengeTaskId;
|
|
String? taskTitle;
|
|
int? taskMetricId;
|
|
String? taskUnit;
|
|
int? targetValue;
|
|
int? challengeId;
|
|
String? createdByUserId;
|
|
|
|
ChallengeTask({
|
|
this.challengeTaskId,
|
|
this.taskTitle,
|
|
this.taskMetricId,
|
|
this.taskUnit,
|
|
this.targetValue,
|
|
this.challengeId,
|
|
this.createdByUserId,
|
|
});
|
|
|
|
factory ChallengeTask.fromJson(Map<String, dynamic> json) => ChallengeTask(
|
|
challengeTaskId: _safeToInt(json["challengeTaskID"]),
|
|
taskTitle: json["taskTitle"],
|
|
taskMetricId: _safeToInt(json["taskMetricID"]),
|
|
taskUnit: json["taskUnit"],
|
|
targetValue: _safeToInt(json["targetValue"]),
|
|
challengeId: _safeToInt(json["challengeID"]),
|
|
createdByUserId: json["createdByUserID"],
|
|
);
|
|
|
|
Map<String, dynamic> toJson() => {
|
|
"challengeTaskID": challengeTaskId,
|
|
"taskTitle": taskTitle,
|
|
"taskMetricID": taskMetricId,
|
|
"taskUnit": taskUnit,
|
|
"targetValue": targetValue,
|
|
"challengeID": challengeId,
|
|
"createdByUserID": createdByUserId,
|
|
};
|
|
}
|
|
|
|
class Participant {
|
|
int? challengeParticipationId;
|
|
String? userId;
|
|
String? firstName;
|
|
String? lastName;
|
|
String? fullName;
|
|
int? userTypeId;
|
|
String? userTypeName;
|
|
String? profilePicture;
|
|
String? status;
|
|
DateTime? joinedAt;
|
|
DateTime? leftAt;
|
|
|
|
Participant({
|
|
this.challengeParticipationId,
|
|
this.userId,
|
|
this.firstName,
|
|
this.lastName,
|
|
this.fullName,
|
|
this.userTypeId,
|
|
this.userTypeName,
|
|
this.profilePicture,
|
|
this.status,
|
|
this.joinedAt,
|
|
this.leftAt,
|
|
});
|
|
|
|
factory Participant.fromJson(Map<String, dynamic> json) => Participant(
|
|
challengeParticipationId: _safeToInt(json["challengeParticipationID"]),
|
|
userId: json["userID"],
|
|
firstName: json["firstName"],
|
|
lastName: json["lastName"],
|
|
fullName: json["fullName"],
|
|
userTypeId: _safeToInt(json["userTypeId"]),
|
|
userTypeName: json["userTypeName"],
|
|
profilePicture: json["profilePicture"],
|
|
status: json["status"],
|
|
joinedAt:
|
|
json["joinedAt"] == null ? null : DateTime.tryParse(json["joinedAt"]),
|
|
leftAt: json["leftAt"] == null ? null : DateTime.tryParse(json["leftAt"]),
|
|
);
|
|
|
|
Map<String, dynamic> toJson() => {
|
|
"challengeParticipationID": challengeParticipationId,
|
|
"userID": userId,
|
|
"firstName": firstName,
|
|
"lastName": lastName,
|
|
"fullName": fullName,
|
|
"userTypeId": userTypeId,
|
|
"userTypeName": userTypeName,
|
|
"profilePicture": profilePicture,
|
|
"status": status,
|
|
"joinedAt": joinedAt?.toIso8601String(),
|
|
"leftAt": leftAt?.toIso8601String(),
|
|
};
|
|
}
|