def delete_user(id):
    user_service = UserService()
    result = user_service.delete(id)
    if not(result is None):
        return response_with_status({'message': result}, 404)
    else:
        return response_with_status({'message': 'User deleted'}, 204)
def get_user(id):
    user_service = UserService()
    user = user_service.get(id)
    if user is None:
        return response_with_status({'message': 'user not found'}, 404)
    else:
        return response_with_status(user.serialize)
def delete_user(id):
    user_service = UserService()
    result = user_service.delete(id)
    if not (result is None):
        return response_with_status({'message': result}, 404)
    else:
        return response_with_status({'message': 'User deleted'}, 204)
def get_user(id):
    user_service = UserService()
    user = user_service.get(id)
    if user is None:
        return response_with_status({'message': 'user not found'}, 404)
    else:
        return response_with_status(user.serialize)
def login():
    json_data = request.json
    service = UserService()
    try:
        auth = service.login(json_data.get('user'), json_data.get('password'))
    except Exception as e:
        logger.exception(e)
    if auth is None:
        return response_with_status({'message': 'invalid username or password'}, 403)
    else:
        session['user'] = json.dumps(auth.to_dict())
        return response_with_status({'message': 'you are logged in'}, 200)
def get_account():
    try:
        user_service = UserService()
        logger.info('session[user] = %s ' % str(session['user']))
        sess_user = json.loads('{}' if session['user'] is None else str(session['user']))
        user = user_service.get(int(sess_user.get('id')))
        if user is None:
            return response_with_status({'message': 'user not found'}, 404)
        else:
            return response_with_status(user.to_dict())
    except Exception as e:
        logger.exception(e)
        raise e
def login():
    json_data = request.json
    service = UserService()
    try:
        auth = service.login(json_data.get('user'), json_data.get('password'))
    except Exception as e:
        logger.exception(e)
    if auth is None:
        return response_with_status(
            {'message': 'invalid username or password'}, 403)
    else:
        session['user'] = json.dumps(auth.to_dict())
        return response_with_status({'message': 'you are logged in'}, 200)
def get_account():
    try:
        user_service = UserService()
        logger.info('session[user] = %s ' % str(session['user']))
        sess_user = json.loads(
            '{}' if session['user'] is None else str(session['user']))
        user = user_service.get(int(sess_user.get('id')))
        if user is None:
            return response_with_status({'message': 'user not found'}, 404)
        else:
            return response_with_status(user.to_dict())
    except Exception as e:
        logger.exception(e)
        raise e
def change_password(id):
    data = request.get_json()
    user_service = UserService()
    user_service.change_password(id, data)
    return response_with_status({'message':
                                'account.changepassword.messages.success'}, 201)
def register():
    data = request.get_json()
    user_service = UserService()
    op = user_service.create(data)
    return response_with_status({'message': 'registered successfully'}, 201)
def update_user(id):
    data = request.get_json()
    user_service = UserService()
    op = user_service.update(id, data)
    return response_with_status(op.to_dict(), 200)
def get_users():
    user_service = UserService()
    _list = user_service.get_collection()
    return response_with_status(_list)
def register():
    data = request.get_json()
    user_service = UserService()
    op = user_service.create(data)
    return response_with_status({'message': 'registered successfully'}, 201)
def update_user(id):
    data = request.get_json()
    user_service = UserService()
    op = user_service.update(id, data)
    return response_with_status(op.to_dict(), 200)
def get_users():
    user_service = UserService()
    _list = user_service.get_collection()
    return response_with_status(_list)
def change_password(id):
    data = request.get_json()
    user_service = UserService()
    user_service.change_password(id, data)
    return response_with_status(
        {'message': 'account.changepassword.messages.success'}, 201)