コード例 #1
0
ファイル: elements.py プロジェクト: advishnuprasad/protean
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
コード例 #2
0
ファイル: elements.py プロジェクト: advishnuprasad/protean
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')
コード例 #3
0
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")
コード例 #4
0
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")
コード例 #5
0
ファイル: elements.py プロジェクト: advishnuprasad/protean
class PostViaWithReference(BaseAggregate):
    content = Text(required=True)
    comments = HasMany('tests.aggregate.elements.CommentViaWithReference',
                       via='posting_id')
    author = Reference('tests.aggregate.elements.Author')
コード例 #6
0
ファイル: elements.py プロジェクト: advishnuprasad/protean
class Post(BaseAggregate):
    content = Text(required=True)
    comments = HasMany('tests.aggregate.elements.Comment')
    author = Reference('tests.aggregate.elements.Author')
コード例 #7
0
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
コード例 #8
0
ファイル: elements.py プロジェクト: nadirhamid/protean
class PostVia(BaseAggregate):
    content = Text(required=True)
    comments = HasMany("tests.aggregate.elements.CommentVia", via="posting_id")
    author = Reference("tests.aggregate.elements.Author")
コード例 #9
0
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