import 'package:comunic/models/survey_choice.dart'; import 'package:comunic/utils/account_utils.dart' as account; 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 choices; bool allowNewChoicesCreation; 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, }) : 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); 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; 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++; } }