import 'package:comunic/enums/likes_type.dart'; import 'package:comunic/enums/post_kind.dart'; import 'package:comunic/enums/post_visibility_level.dart'; import 'package:comunic/enums/user_access_levels.dart'; import 'package:comunic/lists/comments_list.dart'; import 'package:comunic/models/displayed_content.dart'; import 'package:comunic/models/like_element.dart'; import 'package:comunic/models/survey.dart'; /// Single post information /// /// @author Pierre HUBERT class Post implements LikeElement { final int id; final int userID; final int? userPageID; final int? groupID; final int timeSent; DisplayedString content; PostVisibilityLevel visibilityLevel; final PostKind kind; final int? fileSize; final String? fileType; final String? filePath; final String? fileURL; final int? timeEnd; final String? linkURL; final String? linkTitle; final String? linkDescription; final String? linkImage; int likes; bool userLike; final UserAccessLevels access; final CommentsList? comments; Survey? survey; Post( {required this.id, required this.userID, required this.userPageID, required this.groupID, required this.timeSent, required this.content, required this.visibilityLevel, required this.kind, required this.fileSize, required this.fileType, required this.filePath, required this.fileURL, required this.timeEnd, required this.linkURL, required this.linkTitle, required this.linkDescription, required this.linkImage, required this.likes, required this.userLike, required this.access, required this.comments, required this.survey}) : assert(id != null), assert(userID != null), assert(userPageID != 0 || groupID != 0), assert(timeSent != null), assert(kind != PostKind.TEXT || content != null), assert(visibilityLevel != null), assert(kind != null), assert(kind != PostKind.COUNTDOWN || timeEnd != null), assert(kind != PostKind.SURVEY || survey != null), assert(likes != null), assert(userLike != null), assert(access != null); bool get isGroupPost => groupID != null && groupID! > 0; bool get hasContent => content != null && !content.isNull; bool get hasComments => comments != null; bool get canUpdate => access == UserAccessLevels.FULL; bool get hasLinkImage => linkImage != null; bool get canDelete => access == UserAccessLevels.FULL || access == UserAccessLevels.INTERMEDIATE; @override LikesType get likeType => LikesType.POST; }