Example #1
0
def rewind_swipered(user):
    '''反悔一次滑动记录'''

    # 获取今天的反悔次数
    rewind_times = rds.get(keys.REWIND_KEY % user.id, 0)
    # 检查今天返回是否达到了反悔上限
    if rewind_times >= cfg.DAILY_REWIND:
        raise stat.RewindLimit
    # 找到最近的一次滑动记录
    latest_swiped = Swiped.objects.filter(uid=user.id).latest('stime')
    # 检查反悔的记录是否是五分钟之内的
    now = datetime.datetime.now()
    if (now - latest_swiped.stime).total_seconds() >= cfg.REWIND_TIMEOUT:
        raise stat.RewindTimeout
    # 检查上一次滑动是否有可能匹配了好友关系
    if latest_swiped.stype in ['like', 'superlike']:
        # 删除好友关系
        Friend.break_off(user.id, latest_swiped.sid)

        # 如果上一次是超级喜欢 将自身的uid从对方的优先推荐队列里面删除
        if latest_swiped.stype == 'superlike':
            rds.zrem(keys.SUPERLIKED_KEY % latest_swiped.sid, user.id)

    # 删除滑动记录
    latest_swiped.delete()
    # 更新当天的滑动词数,同时设置过期时间到下一个凌晨
    next_zero = datetime.datetime(now.year, now.month,
                                  now.day) + datetime.timedelta(1)
    remain_seconds = (next_zero - now).total_seconds()
    rds.set(keys.REWIND_KEY % user.id, rewind_times + 1, int(remain_seconds))
Example #2
0
def like_someone(user, sid):
    '''喜欢某人'''
    Swiped.swipe(user.id, sid, 'like')  # 添加滑动记录

    # 检查对方是否喜欢过自己
    if Swiped.is_liked(sid, user.id):
        # 如果对方喜欢过自己,匹配成好友
        Friend.make_friends(user.id, sid)
        # 如果对方超级喜欢过你,将对方从你的超级喜欢列表中删除
        rds.zrem(keys.SUPERLIKED_KEY % user.id, sid)
        return True
    else:
        return False
Example #3
0
def superlike_someone(user, sid):
    '''    自己超级喜欢过对方,则一定会出现在对方的推荐列表里面 '''
    Swiped.swipe(user.id, sid, 'superlike')

    rds.sadd(keys.SUPERLIKED_KEY % sid,
             {user.id: time.time()})  # 把自己的id写入到对方的优先推荐队列

    # 检查对方是否喜欢过自己,如果喜欢过自己匹配成好友关系
    if Swiped.is_liked(sid, user.id):
        Friend.make_friends(user.id, sid)
        # 如果对方超级喜欢过你,把对方从你的超级喜欢列表中删除
        rds.zrem(keys.SUPERLIKED_KEY % user.id, sid)
        return True
    else:
        return False
Example #4
0
def superlike_someone(user, sid):
    '''超级喜欢
       自己超级喜欢过对方,则一定会出现在对方的推荐列表中
    '''
    # 使用有序集合存储[注意与列表,集合之间的区别]
    # 将自己的ID写入对方的优先推荐队列
    Swiper.swiper(user.id, sid, 'superlike')
    rds.zadd(keys.SUPERLIKED_KEY % sid, user.id, time.time())
    # 检查对方是否喜欢自己(对方喜欢自己,需要注意先后)
    if Swiper.is_liked(sid, user.id):
        # 如果对方超级喜欢自己,则匹配成好友
        Friend.make_friends(user.id, sid)
        rds.zrem(keys.SUPERLIKED_KEY % user.id, sid)
        return True
    else:
        return False
Example #5
0
def rewind_swiped(user):
    '''
    1.获取反悔次数      ---存储位置
    2.返回一次滑动记录    ---              找到最近一次的滑动记录;[返回的记录只能为5min之内]
    3.每天允许反悔3次    ---               需要对当天返回次数进行记录;并作出检查确定哪一次是最近一次;
    4.返回记录只能是5min以内   ---          找到最近的滑动记录,检查反悔记录是否为5mins以内,判断当前时间与滑动时的时间操作;

    5.检查上一次滑动是否匹配为好友,如果是,则需要先删除好友记录;
    6.如果上一次是超级喜欢,将自身uid从对方的右滑推荐队列中删除

    7.删除滑动记录;     ---               需要更新滑动记录
    '''
    # 获取今天的反悔次数
    # 默认0次反悔次数,参数最好写入配置文件;
    rewind_times = rds.get(keys.REWWIND_KEY % user.id, 0)
    # 检查是否达到限制次数
    if rewind_times >= cfg.DAILY_REWIND:
        raise stat.RewindLimit
    # 根据时间找到最近的一次的滑动记录:filter的内容无顺序;
    # 取最近的一次滑动的方法:last(),latest()对比区别
    latest_swiped = Swiper.objects.filter(uid=user.id).latest('stime')
    # 检查返回记录在五分钟以内:当前时间与滑动时间的差值
    now = datetime.datetime.now()
    if (now - latest_swiped.stime).total_seconds() >= cfg.REWIND_TIMEOUT:
        raise stat.RewindTimeout

    # 检查上一次滑动是否匹配成好友
    if latest_swiped.stype in ['like', 'superlike']:
        # 如果是好友,删除好友关系
        Friend.break_off(user.id, latest_swiped.sid)
        # 如果上一次超级喜欢,将自身uid从对方的优先推荐队列中删除
        if latest_swiped.stype == 'superlike':
            rds.zrem(keys.SUPERLIKED_KEY % latest_swiped.sid, user.id)

    # 如果反悔的话,需要还原用户的滑动积分
    score = -cfg.SWIPE_SCORE[latest_swiped.stype]  # 查找反悔的滑动积分
    rds.zincrby(keys.HOT_RANK_KEY, score, latest_swiped.sid)
    # 删除滑动记录
    latest_swiped.delete()
    # 更新当天的滑动次数
    rds.set(keys.REWWIND_KEY % user.id, rewind_times + 1)
    # 更新过期过期时间(次日零点过期),需要计算过期时间,由于date在月末临界点,不够安全,采用timedelta()
    next_zero = datetime.datetime(now.year, now.month,
                                  now.day) + datetime.timedelta()
    remain_seconds = next_zero - now
    rds.set(keys.REWWIND_KEY % user.id, rewind_times + 1, remain_seconds)
Example #6
0
def superlike_someone(user, sid):
    '''
    超级喜欢某人

    自己超级喜欢过对方,则一定会出现在对方的推荐列表中
    '''
    Swiped.swipe(user.id, sid, 'superlike')  # 添加滑动记录

    # 将自己的 ID 写入到对方的优先推荐队列
    rds.zadd(keys.SUPERLIKED_KEY % sid, {user.id: time.time()})

    # 检查对方是否喜欢过自己
    if Swiped.is_liked(sid, user.id):
        # 如果对方喜欢过自己,匹配成好友
        Friend.make_friends(user.id, sid)
        # 如果对方超级喜欢过你,将对方从你的超级喜欢列表中删除
        rds.zrem(keys.SUPERLIKED_KEY % user.id, sid)
        return True
    else:
        return False
Example #7
0
def rewind_swiped(user):
    '''反悔一次滑动纪录'''
    # 获取今天的反悔次数
    rewind_times = rds.get(keys.REWIND_KEY % user.id, 0)

    # 检查今天反悔是否达到限制次数
    if rewind_times >= cfg.DAILY_REWIND:
        raise stat.RewindLimit

    # 找到最近一次的滑动记录
    latest_swiped = Swiped.objects.filter(uid=user.id).latest('stime')

    # 检查反悔的记录是否是五分钟之内的
    now = datetime.datetime.now()
    if (now - latest_swiped.stime).total_seconds() >= cfg.REWIND_TIMEOUT:
        raise stat.RewindTimeout

    # 检查上一次滑动是否有可能匹配成了好友
    if latest_swiped.stype in ['like', 'superlike']:
        # 删除好友关系
        Friend.break_off(user.id, latest_swiped.sid)

        # 如果上一次是超级喜欢,将自身uid从对方的优先推荐队列中删除
        if latest_swiped.stype == 'superlike':
            rds.zrem(keys.SUPERLIKED_KEY % latest_swiped.sid, user.id)

    # 还原用户的滑动积分
    score = -cfg.SWIPE_SCORE[latest_swiped.stype]
    rds.zincrby(keys.HOT_RANK_KEY, score, latest_swiped.sid)

    # 删除滑动记录
    latest_swiped.delete()

    # 更新当天的滑动次数, 同时设置过期时间到下一个凌晨
    next_zero = datetime.datetime(now.year, now.month,
                                  now.day) + datetime.timedelta(1)
    remain_seconds = (next_zero - now).total_seconds()
    rds.set(keys.REWIND_KEY % user.id, rewind_times + 1, int(remain_seconds))
Example #8
0
def dislike_someone(user, sid):
    '''不喜欢某人'''
    Swiper.swiper(user.id, sid, 'dislike')
    # 如果对方超级喜欢过你,将对方从你的超级喜欢列表中删除
    rds.zrem(keys.SUPERLIKED_KEY % user.id, sid)
Example #9
0
def dislike_someone(user, sid):
    '''不喜欢某人'''
    Swiped.swipe(user.id, sid, 'dislike')  #添加滑动记录
    # 无论对方是否超级喜欢过你,都直接删除掉
    rds.zrem(keys.SUPERLIKED_KEY % user.id, sid)