Exemple #1
0
def login():
    data = request.json
    errors = login_request_schema.validate(data)
    if errors:
        raise ErrValidation(errors)
    email = data["email"]
    password = data["password"]
    user = UserService.get_by_email(email)
    if user is None:
        raise ErrUserNotFound()
    if user.role == UserRole.CUSTOMER and user.is_active is False:
        raise ErrUserIsBlocked()
    if user.check_password(password) is False:
        if user.role == UserRole.CUSTOMER:
            if user.last_failed_login_at == '':
                user.failed_login_attempts = 1
            elif parse_datetime(user.last_failed_login_at).timestamp() + 15 * 60 * 60 < datetime.now().timestamp():
                user.failed_login_attempts = 0
            else:
                user.failed_login_attempts += 1
                if user.failed_login_attempts == 3:
                    user.is_active = False
            user.last_failed_login_at = datetime_now()
            UserService.update(user)
        raise ErrInvalidLogin()
    if user.role == UserRole.CUSTOMER:
        user.failed_login_attempts = 0
        UserService.update(user)
    token = create_access_token(identity=user.dump())
    return send_ok(login_response_schema.dump({"data": {"token": token}}))
def check_out(pet_id):
    pet = PetService.get_by_id(pet_id)
    if pet is None:
        raise ErrPetNotFound()
    pet.free_room()
    PetService.update(pet)
    return send_ok()
def delete_pet(pet_id):
    curr_user = get_current_user()
    pet = PetService.get_by_id(pet_id)
    if pet is None:
        raise ErrPetNotFound()
    if curr_user.is_customer and pet.is_checked_in():
        raise ErrForbidden("You can not delete a pet that is checked-in")
    PetService.delete_by_id(pet_id)
    return send_ok()
def check_in(pet_id):
    data = request.json
    errors = check_in_request_schema.validate(data)
    if errors:
        raise ErrValidation(errors)
    room_id = int(data["room_id"])
    if not PetService.is_room_available(room_id):
        raise ErrRoomIsFull()
    pet = PetService.get_by_id(pet_id)
    pet.room_id = room_id
    PetService.update(pet)
    return send_ok()
Exemple #5
0
def update_status(customer_id):
    data = request.json
    errors = update_status_request_schema.validate(data)
    if errors:
        raise ErrValidation(errors)
    active = data["active"]
    user = UserService.get_by_id(customer_id)
    if user is None:
        raise ErrUserNotFound()
    if user.role == UserRole.CUSTOMER:
        user.is_active = active
        UserService.update(user)
    return send_ok()
Exemple #6
0
def create_staff():
    data = request.json
    errors = create_staff_request_schema.validate(data)
    if errors:
        raise ErrValidation(errors)
    fullname = data["fullname"]
    email = data["email"]
    password = data["password"]
    user = UserService.get_by_email(email)
    if user is not None:
        raise ErrEmailAlreadyExist()
    staff = StaffService.create(fullname, email, password)
    UserService.insert(staff)
    return send_ok(status_code=status.HTTP_201_CREATED, msg=create_staff_response_schema.dump({"data": staff}))
Exemple #7
0
def invite():
    data = request.json
    errors = invite_request_schema.validate(data)
    if errors:
        raise ErrValidation(errors)
    name = data["name"]
    email = data["email"]
    user = UserService.get_by_id(email)
    if user is not None:
        raise ErrEmailAlreadyExist()
    sent = UserService.invite(name, email)
    if sent is False:
        raise ErrServiceUnavailable()
    return send_ok()
def creat_pet():
    data = request.json
    errors = create_pet_request_schema.validate(data)
    if errors:
        raise ErrValidation(errors)
    curr_user = get_current_user()
    name = data["name"]
    pet_type = PetType(data["type"])
    if curr_user.is_customer:
        pet = PetService.create(name, pet_type, curr_user.identity)
    else:
        pet = PetService.create(name, pet_type)
    PetService.insert(pet)
    return send_ok(status_code=status.HTTP_201_CREATED, msg=create_pet_response_schema.dump({"data": pet}))
def move_pet(pet_id):
    data = request.json
    errors = move_pet_request_schema.validate(data)
    if errors:
        raise ErrValidation(errors)
    new_room_id = int(data["new_room_id"])
    pet = PetService.get_by_id(pet_id)
    if pet is None:
        raise ErrPetNotFound()
    if PetService.get_by_room_id(new_room_id) is not None:
        raise ErrRoomIsFull()
    pet.room_id = new_room_id
    PetService.update(pet)
    return send_ok()
Exemple #10
0
def get_pets():
    data = dict(request.args)
    errors = get_pets_request_schema.validate(data)
    if errors:
        raise ErrValidation(errors)
    curr_user = get_current_user()
    q = data["q"]
    page = int(data["page"])
    size = int(data["size"])
    skip = calc_skip(page, size)
    if curr_user.is_customer:
        pets = PetService.get_customer_pets(curr_user.identity, q, skip, size)
    else:
        pets = PetService.get_all(q, skip, size)
    for i, pet in enumerate(pets):
        owner = UserService.get_by_id(pet.owner_id)
        pet.owner = owner
    return send_ok(get_pets_response_schema.dump({"data": pets}))
Exemple #11
0
def edit_pet():
    data = request.json
    errors = edit_pet_request_schema.validate(data)
    if errors:
        raise ErrValidation(errors)
    curr_user = get_current_user()
    pet_id = data["pet_id"]
    pet = PetService.get_by_id(pet_id)
    if pet is None:
        raise ErrPetNotFound()
    if curr_user.is_customer and pet.owner_id != curr_user.identity:
        raise ErrForbidden()
    if curr_user.is_customer and pet.room_id is None:
        raise ErrForbidden("cannot update pet that is checked in")
    pet.name = data["name"]
    pet.type = PetType(data["type"])
    if curr_user.is_manager or curr_user.is_staff:
        pet.owner_id = data.get("owner", pet.owner_id)
    PetService.update(pet)
    return send_ok(edit_pet_response_schema.dump({"data": pet}))
Exemple #12
0
def get_user():
    curr_user = get_current_user()
    user = UserService.get_by_id(curr_user.identity)
    if user is None:
        raise ErrUserNotFound()
    return send_ok(get_user_response_schema.dump({"data": user}))