111 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:freezed_annotation/freezed_annotation.dart';
 | |
| import 'package:island/models/account.dart';
 | |
| import 'package:island/models/publisher.dart';
 | |
| 
 | |
| part 'poll.freezed.dart';
 | |
| part 'poll.g.dart';
 | |
| 
 | |
| @freezed
 | |
| sealed class SnPollWithStats with _$SnPollWithStats {
 | |
|   const factory SnPollWithStats({
 | |
|     required Map<String, dynamic>? userAnswer,
 | |
|     @Default({}) Map<String, dynamic> stats,
 | |
|     required String id,
 | |
|     required List<SnPollQuestion> questions,
 | |
|     String? title,
 | |
|     String? description,
 | |
|     DateTime? endedAt,
 | |
|     required String publisherId,
 | |
|     required DateTime createdAt,
 | |
|     required DateTime updatedAt,
 | |
|     DateTime? deletedAt,
 | |
|   }) = _SnPollWithStats;
 | |
| 
 | |
|   factory SnPollWithStats.fromJson(Map<String, dynamic> json) =>
 | |
|       _$SnPollWithStatsFromJson(json);
 | |
| }
 | |
| 
 | |
| @freezed
 | |
| sealed class SnPoll with _$SnPoll {
 | |
|   const factory SnPoll({
 | |
|     required String id,
 | |
|     required List<SnPollQuestion> questions,
 | |
| 
 | |
|     String? title,
 | |
|     String? description,
 | |
| 
 | |
|     DateTime? endedAt,
 | |
| 
 | |
|     required String publisherId,
 | |
|     SnPublisher? publisher,
 | |
| 
 | |
|     // ModelBase fields
 | |
|     required DateTime createdAt,
 | |
|     required DateTime updatedAt,
 | |
|     DateTime? deletedAt,
 | |
|   }) = _SnPoll;
 | |
| 
 | |
|   factory SnPoll.fromJson(Map<String, dynamic> json) => _$SnPollFromJson(json);
 | |
| }
 | |
| 
 | |
| @freezed
 | |
| sealed class SnPollQuestion with _$SnPollQuestion {
 | |
|   const factory SnPollQuestion({
 | |
|     required String id,
 | |
| 
 | |
|     required SnPollQuestionType type,
 | |
|     List<SnPollOption>? options,
 | |
| 
 | |
|     required String title,
 | |
|     String? description,
 | |
|     required int order,
 | |
|     required bool isRequired,
 | |
|   }) = _SnPollQuestion;
 | |
| 
 | |
|   factory SnPollQuestion.fromJson(Map<String, dynamic> json) =>
 | |
|       _$SnPollQuestionFromJson(json);
 | |
| }
 | |
| 
 | |
| @freezed
 | |
| sealed class SnPollOption with _$SnPollOption {
 | |
|   const factory SnPollOption({
 | |
|     required String id,
 | |
|     required String label,
 | |
|     String? description,
 | |
|     required int order,
 | |
|   }) = _SnPollOption;
 | |
| 
 | |
|   factory SnPollOption.fromJson(Map<String, dynamic> json) =>
 | |
|       _$SnPollOptionFromJson(json);
 | |
| }
 | |
| 
 | |
| enum SnPollQuestionType {
 | |
|   @JsonValue(0)
 | |
|   singleChoice,
 | |
|   @JsonValue(1)
 | |
|   multipleChoice,
 | |
|   @JsonValue(2)
 | |
|   yesNo,
 | |
|   @JsonValue(3)
 | |
|   rating,
 | |
|   @JsonValue(4)
 | |
|   freeText,
 | |
| }
 | |
| 
 | |
| @freezed
 | |
| sealed class SnPollAnswer with _$SnPollAnswer {
 | |
|   const factory SnPollAnswer({
 | |
|     required String id,
 | |
|     required Map<String, dynamic> answer,
 | |
|     required String accountId,
 | |
|     required String pollId,
 | |
|     required DateTime createdAt,
 | |
|     required DateTime updatedAt,
 | |
|     required DateTime? deletedAt,
 | |
|     SnAccount? account,
 | |
|   }) = _SnPollAnswer;
 | |
| 
 | |
|   factory SnPollAnswer.fromJson(Map<String, dynamic> json) =>
 | |
|       _$SnPollAnswerFromJson(json);
 | |
| }
 |