from . import PostingEndpoint, PostingMiddleware


class MentionsMiddleware(PostingMiddleware):
    def post_save(self, serializer):
        existing_mentions = []
        if self.mode == PostingEndpoint.EDIT:
            existing_mentions = self.get_existing_mentions()

        new_mentions = []
        for user in self.post.parsing_result['mentions']:
            if user.pk not in existing_mentions:
                new_mentions.append(user)

        if new_mentions:
            self.post.mentions.add(*new_mentions)

    def get_existing_mentions(self):
        return [u['id'] for u in self.post.mentions.values('id').iterator()]