예제 #1
0
def handle_del_bookmark_user(db: DataBase, data: dict) -> bytes:
    uid = data['data']['uid']
    message = f'TYPE={data["type"]} uid={uid}'
    if not is_user_exist(db, uid):
        reason = 'user not exist'
        return get_error_reply(data, reason, message)
    db.del_bookmark_user(uid)
    return get_ok_reply(data, message)
예제 #2
0
def handle_del_bookmark_single(db: DataBase, data: dict) -> bytes:
    bm_id = data['data']['bookmark_id']
    message = f'TYPE={data["type"]} bookmark_id={bm_id}'
    if not is_bookmark_exist(db, bm_id):
        reason = 'bookmark not exist'
        return get_error_reply(data, reason, message)
    db.del_bookmark_single(bm_id)
    return get_ok_reply(data, message)
예제 #3
0
def handle_del_bookmark_user_book(db: DataBase, data: dict) -> bytes:
    uid, b_id = data['data']['uid'], data['data']['book_id']
    message = f'TYPE={data["type"]} (uid, book_id)=({uid}, {b_id})'
    if not is_user_exist(db, uid):
        reason = 'user not exist'
        return get_error_reply(data, reason, message)
    if not is_book_exist(db, b_id):
        reason = 'book not exist'
        return get_error_reply(data, reason, message)
    db.del_bookmark_user_book(uid, b_id)
    return get_ok_reply(data, message)
예제 #4
0
def handle_logout(db: DataBase, data: dict) -> bytes:
    uid = data['data']['uid']
    message = f'TYPE={data["type"]} uid={uid}'
    log_state = db.get_user_info(uid).get('log_state')
    if log_state is None:
        reason = 'user not exist'
        return get_error_reply(data, reason, message)
    if log_state == 0:
        reason = 'already logout'
        return get_error_reply(data, reason, message)
    db.toggle_user_log_state(uid)
    return get_ok_reply(data, message)
예제 #5
0
def handle_change_psw(db: DataBase, data: dict) -> bytes:
    uid, old_psw, new_psw = data['data']['uid'], data['data']['old_psw'], data['data']['new_psw']
    message = f'TYPE={data["type"]} (uid, old_psw, new_psw)=({uid}, {old_psw}, {new_psw})'
    if not is_user_exist(db, uid):
        reason = 'user not exist'
        return get_error_reply(data, reason, message)
    if not db.verify_user(uid, old_psw):
        reason = 'wrong password'
        return get_error_reply(data, reason, message)
    if old_psw == new_psw:
        reason = 'same password'
        return get_error_reply(data, reason, message)
    db.set_user_psw(uid, new_psw)
    return get_ok_reply(data, message)
예제 #6
0
def handle_login(db: DataBase, data: dict) -> bytes:
    uid, psw = data['data']['uid'], data['data']['psw']
    message = f'TYPE={data["type"]} (uid, psw)=({uid}, {psw})'
    log_state = db.get_user_info(uid).get('log_state')
    if log_state is None:
        reason = 'user not exist'
        return get_error_reply(data, reason, message)
    if log_state == 1:
        reason = 'already login'
        return get_error_reply(data, reason, message)
    if not db.verify_user(uid, psw):
        reason = 'wrong password'
        return get_error_reply(data, reason, message)
    db.toggle_user_log_state(uid)
    return get_ok_reply(data, message)
예제 #7
0
def handle_get_chapter_simple(db: DataBase, data: dict) -> bytes:
    b_id = data['data']['book_id']
    message = f'TYPE={data["type"]} book_id={b_id}'
    if not is_book_exist(db, b_id):
        reason = 'book not exist'
        return get_error_reply(data, reason, message, [])
    chap_list = db.get_chapter_simple(b_id)
    return get_ok_reply(data, message, chap_list)
예제 #8
0
def handle_get_book_single(db: DataBase, data: dict) -> bytes:
    b_id = data['data']['book_id']
    message = f'TYPE={data["type"]} book_id={b_id}'
    book = db.get_book_single(b_id)
    if book == {}:
        reason = 'book not exist'
        return get_error_reply(data, reason, message, {})
    return get_ok_reply(data, message, book)
예제 #9
0
def handle_register(db: DataBase, data: dict) -> bytes:
    uid, psw, email = data['data']['uid'], data['data']['psw'], data['data']['email']
    message = f'TYPE={data["type"]} (uid, psw, email)=({uid}, {psw}, {email})'
    if psw in {None, ''}:
        reason = 'password cannot be null'
        return get_error_reply(data, reason, message)
    flag = db.add_user(uid, psw, email)
    if not flag:
        reason = 'user exist'
        return get_error_reply(data, reason, message)
    return get_ok_reply(data, message)
예제 #10
0
def handle_get_bookmark_id(db: DataBase, data: dict) -> bytes:
    message = f'TYPE={data["type"]}'
    bookmark_id_set = set(db.get_bookmark_simple())
    total_set = {i for i in range(1, 65536)}
    ans_list = list(total_set - bookmark_id_set)
    if ans_list == []:
        reason = 'Bookmark ID number full'
        return get_error_reply(data, reason, message)
    else:
        content = random.choice(ans_list)
        return get_ok_reply(data, message, content)
예제 #11
0
def handle_add_bookmark(db: DataBase, data: dict) -> bytes:
    uid, b_id = data['data']['uid'], data['data']['book_id']
    bm_id, name = data['data']['bookmark_id'], data['data']['name']
    chap_id, page_num = data['data']['chapter_id'], data['data']['page_num']
    message = f'TYPE={data["type"]} (uid, book_id, bookmark_id, name, chapter_id, page_num)' \
              f'=({uid}, {b_id}, {bm_id}, {name}, {chap_id}, {page_num})'
    if not is_user_exist(db, uid):
        reason = 'user not exist'
        return get_error_reply(data, reason, message)
    if not is_book_exist(db, b_id):
        reason = 'book not exist'
        return get_error_reply(data, reason, message)
    if not is_chapter_exist(db, b_id, chap_id):
        reason = 'chapter not exist'
        return get_error_reply(data, reason, message)
    if is_bookmark_exist(db, bm_id):
        reason = 'bookmark exist'
        return get_error_reply(data, reason, message)
    db.add_bookmark(uid, b_id, bm_id, chap_id, page_num, name)
    return get_ok_reply(data, message)
예제 #12
0
def handle_get_chapter_single(db: DataBase, data: dict) -> bytes:
    b_id, chap_id = data['data']['book_id'], data['data']['chapter_id']
    message = f'TYPE={data["type"]} (book_id, chapter_id)=({b_id}, {chap_id})'
    if not is_book_exist(db, b_id):
        reason = 'book not exist'
        return get_error_reply(data, reason, message, [-1, ''])
    chap_str = db.get_chapter_single(b_id, chap_id)
    if chap_str is None:
        reason = 'chapter not exist'
        return get_error_reply(data, reason, message, [-1, ''])
    return get_ok_reply(data, message, [chap_id, chap_str])
예제 #13
0
def handle_request(conn_socket: socket) -> None:
    recv_data = str(conn_socket.recv(1024), encoding='utf-8')

    data = json.loads(recv_data)
    if 'type' not in data:
        reply = handle_type_not_exist(data)
    elif data['type'] not in switch:
        reply = handle_type_illegal(data)
    else:
        db = DataBase()
        reply = switch[data['type']](db, data)

    conn_socket.send(reply)
    conn_socket.close()
예제 #14
0
def is_chapter_exist(db: DataBase, b_id: int, chap_id: int) -> bool:
    return db.get_chapter_single(b_id, chap_id) is not None
예제 #15
0
def is_bookmark_exist(db: DataBase, bm_id: int) -> bool:
    return db.get_bookmark_single(bm_id) != {}
예제 #16
0
def is_user_exist(db: DataBase, uid: str) -> bool:
    return db.get_user_info(uid) != {}
예제 #17
0
def handle_get_book_all(db: DataBase, data: dict) -> bytes:
    message = f'TYPE={data["type"]}'
    book_list = db.get_book_all()
    return get_ok_reply(data, message, book_list)