class Author(BaseEntity): first_name = String(required=True, max_length=25) last_name = String(max_length=25) posts = HasMany('tests.aggregate.elements.Post') account = Reference('tests.aggregate.elements.Account') class Meta: aggregate_cls = Account
class Post(BaseAggregate): title = String(required=True, max_length=1000) slug = String(required=True, max_length=1024) content = Text(required=True) posted_at = DateTime(required=True, default=datetime.now()) meta = HasOne('PostMeta') comments = HasMany('Comment')
class Post(BaseAggregate): title = String(required=True, max_length=1000) slug = String(required=True, max_length=1024) content = Text(required=True) posted_at = DateTime(required=True, default=datetime.now()) post_meta = HasOne("tests.repository.child_entities.PostMeta") comments = HasMany("tests.repository.child_entities.Comment")
class Post(BaseAggregate): title = String(required=True, max_length=1000) slug = String(required=True, max_length=1024) content = Text(required=True) posted_at = DateTime(required=True, default=datetime.now()) meta = HasOne("tests.unit_of_work.aggregate_elements.PostMeta") comments = HasMany("tests.unit_of_work.aggregate_elements.Comment")
class PostViaWithReference(BaseAggregate): content = Text(required=True) comments = HasMany('tests.aggregate.elements.CommentViaWithReference', via='posting_id') author = Reference('tests.aggregate.elements.Author')
class Post(BaseAggregate): content = Text(required=True) comments = HasMany('tests.aggregate.elements.Comment') author = Reference('tests.aggregate.elements.Author')
class User: email = String(required=True, max_length=250) username = String(required=True, max_length=50) password = String(required=True, max_length=255) bio = String(max_length=1024) token = String(max_length=1024) token_valid_until = DateTime() image = String(max_length=1024) follows = HasMany('realworld.model.user.Follower', via='user_id') followers = HasMany('realworld.model.user.Follower', via='following_id') favorites = HasMany('realworld.model.user.Favorite', via='user_id') @classmethod def register(self, user_dto: UserRegistrationDTO): return User(email=user_dto.email, username=user_dto.username, password=user_dto.password) def authenticate(self, password: str): return password == self.password def refresh_token(self): token = generate_token(self.id) self.token = token self.token_valid_until = datetime.now() + timedelta(days=1) def update(self, **kwargs): valid_fields = [ field for field in kwargs if field in ['email', 'username', 'password', 'image', 'bio']] for field in valid_fields: setattr(self, field, kwargs[field]) #################### # Follower methods # #################### def follow(self, user: '******'): if user not in [follow_object.following for follow_object in self.follows]: self.follows.add(Follower(following=user, user=self)) return self def unfollow(self, user: '******'): [follow_object] = [ follow_object for follow_object in self.follows if follow_object.following == user] self.follows.remove(follow_object) return self ###################### # Favoriting methods # ###################### def favorite(self, article): if article not in [favorite.article for favorite in self.favorites]: self.favorites.add(Favorite(article=article, user=self)) return self def unfavorite(self, article): try: [favorited_article] = [ favorite for favorite in self.favorites if favorite.article == article] except ValueError: favorited_article = None if favorited_article: self.favorites.remove(favorited_article) return self
class PostVia(BaseAggregate): content = Text(required=True) comments = HasMany("tests.aggregate.elements.CommentVia", via="posting_id") author = Reference("tests.aggregate.elements.Author")
class Article: slug = String(max_length=250) title = String(required=True, max_length=250) description = Text(required=True) body = Text(required=True) tag_list = List() created_at = DateTime(default=datetime.now()) updated_at = DateTime(default=datetime.now()) author = Reference(User, required=True) comments = HasMany('realworld.model.article.Comment') @classmethod def create(self, article_dto: CreateArticleDTO): article = Article(title=article_dto.title, slug=slugify(article_dto.title), description=article_dto.description, body=article_dto.body, tag_list=article_dto.tag_list, author=article_dto.author) current_domain.publish(TagsAdded(tag_list=article_dto.tag_list)) return article def update(self, **kwargs): valid_fields = [ field for field in kwargs if field in ['title', 'description', 'body'] ] for field in valid_fields: setattr(self, field, kwargs[field]) if 'title' in valid_fields: setattr(self, 'slug', slugify(self.title)) ################### # Comment methods # ################### def add_comment(self, body: String, logged_in_user: User): new_comment = Comment(body=body, article=self, author=logged_in_user) self.comments.add(new_comment) return self, new_comment def delete_comment(self, comment_identifier): [old_comment] = [ comment for comment in self.comments if comment.id == comment_identifier ] self.comments.remove(old_comment) return self, old_comment def get_comment_by_identifier(self, comment_identifier): [comment] = [ comment for comment in self.comments if comment.id == comment_identifier ] return comment