1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-10-23 23:13:22 +00:00
comunicmobile/lib/models/survey.dart

63 lines
1.6 KiB
Dart
Raw Normal View History

2019-06-28 09:32:36 +00:00
import 'package:comunic/models/survey_choice.dart';
import 'package:comunic/utils/account_utils.dart' as account;
2019-06-28 09:32:36 +00:00
import 'package:meta/meta.dart';
/// Survey information
///
/// @author Pierre HUBERT
class Survey {
final int id;
final int userID;
final int postID;
final int creationTime;
final String question;
int userChoice;
final Set<SurveyChoice> choices;
bool allowNewChoicesCreation;
2019-06-28 09:32:36 +00:00
Survey({
@required this.id,
@required this.userID,
@required this.postID,
@required this.creationTime,
@required this.question,
@required this.userChoice,
@required this.choices,
@required this.allowNewChoicesCreation,
2019-06-28 09:32:36 +00:00
}) : assert(id != null),
assert(userID != null),
assert(postID != null),
assert(creationTime != null),
assert(question != null),
assert(userChoice != null),
assert(choices != null),
assert(choices.length > 0),
assert(allowNewChoicesCreation != null);
2019-06-28 09:32:36 +00:00
bool get hasResponded => this.userChoice != null && this.userChoice > 0;
bool get hasResponses =>
this.choices.where((f) => f.responses > 0).length > 0;
bool get canBlockNewChoicesCreation =>
allowNewChoicesCreation && account.userID() == this.userID;
2019-06-28 09:32:36 +00:00
SurveyChoice get userResponse {
if (!hasResponded) return null;
return choices.firstWhere((e) => e.id == userChoice);
}
void cancelUserResponse() {
if (hasResponded) userResponse.responses--;
userChoice = 0;
}
void setUserResponse(SurveyChoice choice) {
cancelUserResponse();
userChoice = choice.id;
choice.responses++;
}
}