def follow(user, followee, is_user=True): if not user or not followee: log.err( "FollowHelper-->follow userId:%s, followeeId %s", user, followee) return if is_user: fieldname = "followee" else: fieldname = "backupFollowee" # 查找followee是否关注user, 如果关注则需要添加双向关注关系 followHelper = ClassHelper(FollowHelper.classame) effect=1 if is_user: result = followHelper.find_one({'user': followee, fieldname: user, 'effect': {'$gte': 1}}) if not result: effect = 1 else: effect = 2 # 添加feed记录,第一次关注才添加 # followRecord = followHelper.find_one({'user': user, fieldname: followee, 'effect': {'$ne': 0}}) # if not followRecord: # addFeedRecord(user, 'follow', followRecord['_id']) #TODO: 这里事务的管理不太严格,应该关注和粉丝统一起来 # 添加我的关注 followee_action = {'destClass':'StatCount', 'query': {'name': 'followees_'+user}, 'action':{'@inc':{'count':1}}} follower_action = {'destClass':'StatCount', 'query': {'name': 'followers_'+followee}, 'action':{'@inc':{'count': 1}} } actions = [follower_action, followee_action] followHelper.updateOne({'user': user, fieldname: followee}, {'$set': {'effect': effect}}, transactions=actions, upsert=True) # 添加followee也是user的粉丝,则需要处理followee的双向关注,否则只添加粉丝数量 if effect==2: followHelper.updateOne({'user': followee, fieldname: user}, {"$set": {'effect': effect,'updateAt':result['updateAt']}})
def unfollow(user, followee, is_user=True): if not user or not followee: log.err( "FollowHelper-->unfollow userId:%s, followeeId %s", user, followee) return; if is_user: fieldname = "followee" else: fieldname = "backupFollowee" followHelper = ClassHelper(FollowHelper.classame) result = followHelper.find_one({'user': followee, 'followee': user, 'effect': {'$gte': 2}}) if result: #双向关注,需要处理followee的双向关注effect和粉丝数量 followHelper.updateOne( {'user': followee, fieldname: user}, {"$set": {'effect': 1,'updateAt':result['updateAt']}} ) # 取消我的关注 followee_action = {'destClass': 'StatCount', 'query': {'name': 'followees_' + user}, 'action': {'@inc': {'count': -1}}} follower_action = {'destClass': 'StatCount', 'query': {'name': 'followers_' + followee}, 'action': {'@inc': {'count': -1}}} actions = [follower_action, followee_action] followHelper.updateOne( {'user': user, fieldname: followee}, {"$set": {'effect': 0}}, transactions=actions, upsert=True )