user_manager.py 1.98 KB
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from talos.services import (
    UserConvertService,
)
from social.models import SocialInfo
from utils.base_manager import BaseManager


class UserManager(BaseManager):

    def get_user_all_fans(self, user_id):
        """
        获取用户所有粉丝
        :param user_id:
        :return:
        """
        social_info = SocialInfo.social_info(user_id)

        fans_ids = []
        for fans_id in social_info.get_fans_iterator():
            fans_ids.append(fans_id)

        return fans_ids

    def _get_user_following_info(self, viewer_user_id, author_ids):
        """
        获取用户关注状态
        :param viewer_user_id: 查看的人
        :param author_ids: 作者id列表
        :return:
        """
        follow_rels = {}
        if viewer_user_id:
            social_info = SocialInfo(uid=viewer_user_id)
            follow_rels = social_info.is_following_users(author_ids)

        return follow_rels

    def _get_user_info_by_user_ids(self, user_ids, simple=True):
        """
        获取用户信息
        :param user_ids:
        :param simple:
        :return:
        """
        user_info_dic = UserConvertService.get_user_info_by_user_ids(user_ids, simple=simple)

        return user_info_dic

    def convert_user_info(self, viewer_user_id, author_ids, simple=True):
        """
        转化用户信息
        :param viewer_user_id:  查看者
        :param author_ids: 作者
        :param simple: 用户信息多or少的开关
        :return:
        """
        author_ids = self.filter_ids(author_ids)
        user_infos = self._get_user_info_by_user_ids(author_ids, simple=simple)
        follow_rels = self._get_user_following_info(viewer_user_id, author_ids)

        result = {}
        for k, _data in user_infos.items():
            _data.update({
                "is_following": follow_rels.get(k, False),
            })
            result[k] = _data

        return result


user_manager = UserManager()