Ejemplo n.º 1
0
def master_unset():
    """
    将某个用户的主播资格撤销
    """
    data = user_forms.user_id_schema(convert_dict(request.args))
    user_id = data['user_id']

    user_info = users_service.get_user_info(user_id)
    if 'user_type' not in user_info:
        raise errors.ErrUserNotExist
    if user_info['user_type'] != 2:
        raise errors.ErrUserNotMaster

    users_service.master_unset(user_id)

    room_id_data = room_client.list(user_id=user_id)
    if room_id_data == []:
        room_id = 0
    else:
        room_id = room_id_data[0]['id']

    if room_id == 0:
        return jsonify()
    room_client.modify(id=room_id, is_deleted=1)
    return jsonify()
Ejemplo n.º 2
0
def email_register():
    data = user_forms.email_register_schema(convert_dict(request.json))
    email = data['email']
    user_info = users_service.get_user_by_email(email)
    if user_info:
        raise errors.ErrEmailExist
    user_id = user_caches.incr_user_id()
    data['user_id'] = user_id
    data['user_ip'] = ip2int(data['user_ip'])
    data['password'] = encrypt_password(data['password'])

    user_fields = [
        'user_id', 'email', 'password', 'cover', 'avatar', 'user_ip',
        'platform', 'gender'
    ]
    user_data = filter_fields(data, user_fields)
    user_data['create_time'] = user_data['update_time'] = int(time.time())

    user_table = user_models.get_user_info_table(user_id)
    user_insert_sql = user_table.insert().values(**user_data)
    email_table = user_models.get_email_index_table(email)
    email_insert_sql = email_table.insert()\
        .values(email=email, user_id=user_id)
    user_models.exec_change(user_insert_sql, email_insert_sql)

    return jsonify({'user_id': user_id})
Ejemplo n.º 3
0
def unfollow():
    ''' 取消关注 '''
    data = user_forms.follow_schema(convert_dict(request.json))
    user_id = data['user_id']
    follow_user_id = data['follow_user_id']

    if user_id == follow_user_id:
        raise errors.ErrInvalidFollow

    if not users_service.get_user_info(user_id):
        raise errors.ErrUserNotExist
    if not users_service.get_user_info(follow_user_id):
        raise errors.ErrFollowUserNotExist

    is_follow = users_service.is_follow(user_id, follow_user_id)
    if not is_follow:
        raise errors.ErrNotFollowed

    users_service.unfollow_user(user_id=user_id, follow_user_id=follow_user_id)
    user_caches.decr_user_count(user_id, USER.USER_FOLLOW_COUNT)
    user_caches.decr_user_count(follow_user_id, USER.USER_FANS_COUNT)
    try:  # 移除虚拟粉丝
        vfans_users = users_service.get_vfans_users_by_parent_id(
            follow_user_id, user_id)
        print "remove vfans_users len : ", len(vfans_users)
        for vfans_user in vfans_users:
            users_service.unfollow_user(user_id=vfans_user["fans_user_id"],
                                        follow_user_id=follow_user_id)
            user_caches.decr_user_count(vfans_user["fans_user_id"],
                                        USER.USER_FOLLOW_COUNT)
            user_caches.decr_user_count(follow_user_id, USER.USER_FANS_COUNT)
    except Exception, ex:
        print "remove virtual fans user :", ex
Ejemplo n.º 4
0
def get_bank_info():
    """
    根据用户id查询用户的银行卡认证纪录
    """
    data = user_forms.get_bank_info_schema(convert_dict(request.args))
    user_id = data['user_id']
    return jsonify(users_service.get_bank_info(user_id))
Ejemplo n.º 5
0
def nickname_check():
    ''' 检查昵称的唯一性 '''
    data = user_forms.nickname_check_schema(convert_dict(request.json))
    nickname = data['nickname']

    ret = users_service.is_nickname_exists(nickname)
    return jsonify(dict(nickname_exists=ret))
Ejemplo n.º 6
0
def insert_contract():
    """
    根据user_id为某个用户插入新的合约纪录
    """
    data = user_forms.insert_contract_schema(convert_dict(request.json))
    users_service.insert_contract(**data)
    return jsonify()
Ejemplo n.º 7
0
def verify():
    data = user_forms.user_verify_schema(convert_dict(request.json))
    user_id = data['user_id']
    verify_type = data['verify_type']

    # 前置条件检查
    user_info = users_service.get_user_info(user_id)
    if not user_info:
        raise errors.ErrUserNotExist
    if verify_type == 'email' and user_info.email_verified:
        raise errors.ErrEmailVerified
    if verify_type == 'mobile' and user_info.mobile_verified:
        raise errors.ErrMobileVerified

    # 更改认证信息
    update_data = dict()
    if verify_type == 'email':
        data['email_verified'] = True
    elif verify_type == 'mobile':
        data['mobile_verified'] = True

    user_table = user_models.get_user_info_table(user_id)
    update_sql = user_table.update()\
            .where(user_table.c.user_id == user_id)\
            .values(**update_data)
    user_models.exec_change(update_sql)

    return jsonify()
Ejemplo n.º 8
0
def auth():
    data = user_forms.user_auth_schema(convert_dict(request.json))
    user_id = data.get('user_id')
    email = data.get('email')
    mobile = data.get('mobile')
    username = data.get('username')
    if 'password' not in data and len(data.keys()) != 2:
        raise errors.ErrArgs
    if username:
        user = users_service.get_user_by_username(username)
    if email:
        user = users_service.get_user_by_email(email)
    if mobile:
        user = users_service.get_user_by_mobile(mobile)
    if not user_id and not user:
        raise errors.ErrUserNotExist
    user_id = user_id if user_id else user['user_id']

    user_info = users_service.get_user_info(user_id)
    if not user_info:
        raise errors.ErrUserNotExist
    if not user_info['password']:
        raise errors.ErrPasswordNotSet
    if not validate_password(user_info['password'], data['password']):
        raise errors.ErrPasswordWrong
    if user_info['user_type'] == 0:
        raise errors.ErrUserForbidden

    return jsonify(make_user_info(user_info))
Ejemplo n.º 9
0
def notification_check():
    """
    检查某用户当前是否接收某主播的开播通知
    """
    data = user_forms.notification_schema(convert_dict(request.args))
    user_id = data['user_id']
    master_user_id = data['master_user_id']

    if user_id == master_user_id:
        raise errors.ErrInvalidFollow

    if not users_service.get_user_info(user_id):
        raise errors.ErrUserNotExist
    if not users_service.get_user_info(master_user_id):
        raise errors.ErrFollowUserNotExist

    is_follow = users_service.is_follow(user_id, master_user_id)
    if not is_follow:
        raise errors.ErrNotFollowed

    resp = users_service.notification_check(user_id, master_user_id)
    if not resp:
        return json.jsonify(dict(notification=0))
    else:
        return json.jsonify(dict(notification=resp['notification']))
Ejemplo n.º 10
0
def fans_list():
    """ 粉丝列表 """
    data = convert_dict(request.args)
    data = user_forms.fans_list_schema(data)
    user_id = data["user_id"]
    offset, limit = data["offset"], data["limit"]
    fans_users = users_service.get_user_fans(user_id, offset, limit)
    return json.jsonify(fans_users)
Ejemplo n.º 11
0
def check_follow():
    """ 检测是否关注 """
    data = convert_dict(request.args)
    data = user_forms.check_follow_schema(data)
    user_id = data["user_id"]
    follow_user_id = data["follow_user_id"]
    is_followed = users_service.is_follow(user_id=user_id,
                                          follow_user_id=follow_user_id)
    return json.jsonify(dict(is_followed=is_followed))
Ejemplo n.º 12
0
def insert_bank_info():
    """
    插入或更新一条新的用户银行卡认证纪录
    针对单个用户银行卡认证记录只保留一条
    如果此用户已有银行卡认证记录则更新当前记录
    """
    data = user_forms.insert_bank_info_schema(convert_dict(request.json))
    users_service.insert_bank_info(**data)
    return jsonify()
Ejemplo n.º 13
0
def unforbid():
    ''' 解禁账号 '''
    data = user_forms.user_forbid_schema(convert_dict(request.json))
    user_id = data['user_id']

    ret = users_service.unforbid_user(user_id)
    if not ret:
        return jsonify({'ret': False})
    return jsonify({'ret': True})
Ejemplo n.º 14
0
def get_current_contract():
    """
    根据user_id获取某个用户的当前激活合约
    """
    data = user_forms.get_all_contract_schema(convert_dict(request.args))
    user_id = data['user_id']
    resp = users_service.get_current_contract(user_id)
    resp['start_from'] = resp['start_from'].strftime("%Y-%m-%d %H:%M:%S")
    resp = json.dumps(resp)
    return resp
Ejemplo n.º 15
0
def user_id():
    ''' 获取用户 ID '''
    data = user_forms.user_id_query_schema(convert_dict(request.json))
    nickname = data.get('nickname')

    user_id = None
    if nickname:
        user_id = users_service.get_user_id_by_nickname(nickname)

    return jsonify(user_id=user_id)
Ejemplo n.º 16
0
def profile_bulk():
    data = user_forms.user_ids_schema(convert_dict(request.args))
    user_profiles = dict()
    for user_id in data['user_ids']:
        user_info = users_service.get_user_info(user_id)
        if not user_info:
            continue
        user_profiles[user_id] = make_user_info(user_info)

    return jsonify(user_profiles)
Ejemplo n.º 17
0
def get_next_contract():
    """
    根据user_id获取某个用户的下一个生效的合约
    """
    data = user_forms.get_all_contract_schema(convert_dict(request.args))
    user_id = data['user_id']
    now = datetime.now().strftime('%Y-%m-%d') + ' 00:00:00'
    resp = users_service.get_next_contract(user_id, now)
    resp['start_from'] = resp['start_from'].strftime("%Y-%m-%d %H:%M:%S")
    resp = json.dumps(resp)
    return resp
Ejemplo n.º 18
0
def report():
    '''举报用户'''
    data = convert_dict(request.json)
    data = user_forms.user_report_schema(data)
    rs = users_service.create_report_user(**data)
    if rs == -1:
        msg = "已举报过"
    elif rs == 0:
        msg = "举报失败"
    else:
        msg = "举报成功"
    return jsonify(dict(msg=msg))
Ejemplo n.º 19
0
def master_user_room_id_update():
    '''更新主播表的直播间ID
    用途:
        1. 创建直播间时
        2. 直播间ID统一变更时
    '''
    data = user_forms.room_id_update_schema(convert_dict(request.json))
    user_id = data.pop('user_id')
    room_id = data['room_id']

    users_service.update_master_user(user_id, **dict(room_id=room_id))
    return jsonify()
Ejemplo n.º 20
0
def search_master_users():
    ''' 搜索主播用户 '''
    data = user_forms.search_schema(convert_dict(request.args))
    keyword = data['keyword']

    master_users = users_service.search_master_users(keyword)
    for item in master_users:
        item.pop('is_deleted')
        item.pop('is_recommended')
        item.pop('sort')

    return jsonify(master_users=master_users)
Ejemplo n.º 21
0
def reset_password():
    data = user_forms.password_reset_schema(convert_dict(request.json))
    user_id = data['user_id']
    user_info = users_service.get_user_info(user_id)
    if not user_info:
        raise errors.ErrUserNotExist

    user_table = user_models.get_user_info_table(user_id)
    update_sql = user_table.update()\
            .where(user_table.c.user_id == user_id)\
            .values(password=encrypt_password(data['new_password']), update_time=int(time.time()))
    user_models.exec_change(update_sql)

    return jsonify()
Ejemplo n.º 22
0
def change_avatar():
    data = user_forms.avatar_change_schema(convert_dict(request.json))
    user_id = data['user_id']
    user_info = users_service.get_user_info(user_id)
    if not user_info:
        raise errors.ErrUserNotExist

    user_table = user_models.get_user_info_table(user_id)
    update_sql = user_table.update()\
            .where(user_table.c.user_id == user_id)\
            .values(avatar=data['new_avatar'], update_time=int(time.time()))
    user_models.exec_change(update_sql)

    return jsonify()
Ejemplo n.º 23
0
def follow_list():
    ''' 用户的关注列表 '''
    data = user_forms.follow_list_schema(convert_dict(request.args))

    user_follow_list = users_service.get_user_follow(data['user_id'],
                                                     offset=data['offset'],
                                                     limit=data['limit'])
    to_be_deleted = []
    for followed_user in user_follow_list:
        followed_user_info = users_service.get_user_info(
            followed_user['follow_user_id'])
        if followed_user_info['user_type'] != 2:
            to_be_deleted.append(followed_user)
    for element in to_be_deleted:
        user_follow_list.remove(element)
    return json.jsonify(user_follow_list)
Ejemplo n.º 24
0
def forbid():
    '''
    禁用账号
    主播账号不能直接禁用(先降级为普通用户,再禁用)
    '''
    data = user_forms.user_forbid_schema(convert_dict(request.json))
    user_id = data['user_id']

    # 主播用户不能直接禁用
    user_info = users_service.get_user_info(user_id)
    if not user_info or user_info['user_type'] == 2:
        return jsonify({'ret': False})

    ret = users_service.forbid_user(user_id)
    if not ret:
        return jsonify({'ret': False})
    return jsonify({'ret': True})
Ejemplo n.º 25
0
def device_hash_register():
    data = user_forms.device_register_schema(convert_dict(request.json))
    user_info = users_service.get_user_by_device(data['device_hash'])
    if user_info:
        if 'imei' in data:
            imei_info = users_service.get_user_by_imei(data['imei'])
            if not imei_info:
                imei_data = {}
                imei_data['imei'] = data['imei']
                imei_data['user_id'] = user_info['user_id']
                imei_data['device_hash'] = data['device_hash']
                imei_data['platform'] = data['platform']
                imei_table = user_models.get_imei_index_table(data['imei'])
                imei_insert_sql = imei_table.insert(imei_data)
                user_models.exec_change(imei_insert_sql)
        return jsonify({'user_id': user_info['user_id'], 'new': False})
    user_id = user_caches.incr_user_id()
    data['user_id'] = user_id
    data['user_ip'] = ip2int(data['user_ip'])

    user_fields = [
        'user_id', 'cover', 'avatar', 'user_ip', 'platform', 'gender'
    ]
    device_fields = ['user_id', 'device_hash', 'platform', 'device_info']
    user_data = filter_fields(data, user_fields)
    user_data['create_time'] = user_data['update_time'] = int(time.time())
    device_data = filter_fields(data, device_fields)

    sqls = []
    if 'imei' in data:
        imei_fields = ['user_id', 'imei', 'device_hash', 'platform']
        imei_data = filter_fields(data, imei_fields)
        imei_table = user_models.get_imei_index_table(data['imei'])
        imei_insert_sql = imei_table.insert(imei_data)
        sqls.append(imei_insert_sql)
    user_table = user_models.get_user_info_table(data['user_id'])
    user_insert_sql = user_table.insert(user_data)
    sqls.append(user_insert_sql)
    device_table = user_models.get_device_index_table(data['device_hash'])
    device_insert_sql = device_table.insert(device_data)
    sqls.append(device_insert_sql)
    user_models.exec_change(*sqls)

    return jsonify({'user_id': user_id, 'new': True})
Ejemplo n.º 26
0
def follow():
    ''' 关注 '''
    data = user_forms.follow_schema(convert_dict(request.json))
    user_id = data['user_id']
    follow_user_id = data['follow_user_id']
    notification = data['notification']

    if user_id == follow_user_id:
        raise errors.ErrInvalidFollow

    if not users_service.get_user_info(user_id):
        raise errors.ErrUserNotExist
    if not users_service.get_user_info(follow_user_id):
        raise errors.ErrFollowUserNotExist

    is_follow = users_service.is_follow(user_id, follow_user_id)
    if is_follow:
        raise errors.ErrHaveFollowed

    users_service.follow_user(user_id=user_id,
                              follow_user_id=follow_user_id,
                              notification=notification)
    user_caches.incr_user_count(user_id, USER.USER_FOLLOW_COUNT)
    user_caches.incr_user_count(follow_user_id, USER.USER_FANS_COUNT)
    try:  # 添加虚拟粉丝
        real_fans_users = users_service.get_user_real_fans(follow_user_id)
        vfans_count = gen_vfans_count(len(real_fans_users))
        print "vfans_count :", vfans_count
        if vfans_count:
            fans_users = users_service.get_user_fans(follow_user_id)
            vfans_users = users_service.get_vfans_users(
                user_id, fans_users, vfans_count)
            vfans_users = vfans_users or []
            for vfans_user in vfans_users:
                users_service.follow_user(user_id=vfans_user["user_id"],
                                          follow_user_id=follow_user_id,
                                          parent_id=user_id,
                                          notification=notification)
                user_caches.incr_user_count(vfans_user["user_id"],
                                            USER.USER_FOLLOW_COUNT)
                user_caches.incr_user_count(follow_user_id,
                                            USER.USER_FANS_COUNT)
    except Exception, ex:
        print "add virtual fans user :", ex
Ejemplo n.º 27
0
def query():
    data = user_forms.user_query_schema(convert_dict(request.json))
    value = data['value']
    type = data['type']
    if type == 'username':
        if re.match(u'^\u73a9\u5bb6', value):
            user_id = int(value[2:])
            return jsonify({'user_id': user_id})
        else:
            user_info = users_service.get_user_by_username(value)
    elif type == 'email':
        user_info = users_service.get_user_by_email(value)
    elif type == 'mobile':
        user_info = users_service.get_user_by_mobile(value)
    elif type == 'device_hash':
        user_info = users_service.get_user_by_device_hash(value)
    elif type == 'imei':
        user_info = users_service.get_user_by_imei(value)
    if not user_info:
        raise errors.ErrUserNotExist
    return jsonify({'user_id': user_info['user_id']})
Ejemplo n.º 28
0
def mobile_register():
    data = user_forms.mobile_register_schema(convert_dict(request.json))
    mobile = data['mobile']
    nickname = data['nickname']
    user_info = users_service.get_user_by_mobile(mobile)
    if user_info:
        raise errors.ErrMobileExist
    user_id = user_caches.incr_user_id()
    data['user_id'] = user_id
    data['user_ip'] = ip2int(data['user_ip'])
    data['password'] = encrypt_password(data['password'])

    # 判断昵称是否已经存在
    if users_service.is_nickname_exists(nickname):
        data['nickname'] = '%s%s' % (data['nickname'][:12], user_id)
        nickname = data['nickname']

    user_fields = [
        'user_id', 'nickname', 'mobile', 'password', 'cover', 'avatar',
        'user_ip', 'gender', 'platform', 'channel'
    ]
    user_data = filter_fields(data, user_fields)
    user_data['mobile_verified'] = True
    user_data['create_time'] = user_data['update_time'] = int(time.time())

    user_table = user_models.get_user_info_table(user_id)
    user_insert_sql = user_table.insert().values(**user_data)
    mobile_table = user_models.get_mobile_index_table(mobile)
    mobile_insert_sql = mobile_table.insert()\
        .values(mobile=mobile, user_id=user_id)
    nickname_index_table = user_models.get_nickname_index_table(
        nickname.lower())
    nickname_index_sql = nickname_index_table.insert().values(
        nickname=nickname.lower(), user_id=user_id)
    user_models.exec_change(user_insert_sql, mobile_insert_sql,
                            nickname_index_sql)

    return jsonify({'user_id': user_id})
Ejemplo n.º 29
0
def notification_on():
    """
    某用户打开接收某主播的开播通知
    """
    data = user_forms.notification_schema(convert_dict(request.args))
    user_id = data['user_id']
    master_user_id = data['master_user_id']

    if user_id == master_user_id:
        raise errors.ErrInvalidFollow

    if not users_service.get_user_info(user_id):
        raise errors.ErrUserNotExist
    if not users_service.get_user_info(master_user_id):
        raise errors.ErrFollowUserNotExist

    is_follow = users_service.is_follow(user_id, master_user_id)
    if not is_follow:
        raise errors.ErrNotFollowed

    modify = data['modify']
    users_service.notification_modify(user_id, master_user_id, modify)
    return jsonify()
Ejemplo n.º 30
0
def fans_new():
    '''
    用户新增粉丝数,用于当红主播排行榜
    查询用户近 7 天内的新增加粉丝数(不含今天)
    '''
    if request.method == 'POST':
        request.args = request.json
    data = user_forms.user_ids_schema(convert_dict(request.args))
    user_ids = data['user_ids']
    days = 7

    fans_new_counts = dict()
    for user_id in user_ids:
        today_date_str = datetime.now().strftime('%Y-%m-%d')
        start_time = (datetime.now() -
                      timedelta(days)).strftime('%Y-%m-%d') + ' 00:00:00'
        end_time = today_date_str + ' 00:00:00'

        fans_list = users_service.get_user_recent_fans(user_id, start_time,
                                                       end_time)
        count = len(fans_list)
        fans_new_counts[user_id] = count

    return jsonify(fans_new_counts)