async def delete_booking(booking_id: int, uuid: int = Depends(get_uuid_from_xtoken)): path = f"/bookings/{booking_id}" booking, _ = Requester.payment_fetch(method="GET", path=path, expected_statuses={HTTP_200_OK}) room_id = booking["roomId"] room_owner_id = booking["roomOwnerId"] if not AuthSender.has_permission_to_modify(uuid, room_owner_id): raise UnauthorizedRequestError("Can't reject other users bookings") path = f"/bookings/{booking_id}" book_deleted, _ = Requester.payment_fetch("DELETE", path, {HTTP_200_OK}) # Delete the rejected booking in post server, # if it is not found it is also OK! booking_path = f"/rooms/{room_id}/bookings/{booking_id}" booking, _ = Requester.room_srv_fetch("DELETE", booking_path, {HTTP_200_OK, HTTP_404_NOT_FOUND}) # TODO: Change BookingDB model to match camelcase in payment server booking_camel = payment_camel_to_snake(book_deleted) return booking_camel
async def add_room_picture( room_id: int, file: UploadFile = File(...), db: Session = Depends(get_db), uuid: int = Depends(get_uuid_from_xtoken), ): room_path = f"/rooms/{room_id}" room, _ = Requester.room_srv_fetch("GET", room_path, {HTTP_200_OK}) if not AuthSender.has_permission_to_modify(room["owner_uuid"], uuid): raise UnauthorizedRequestError( "You can't add photos to another user room!") image_url, firebase_id = photouploader.upload_room_photo(file, room_id) room_photo_path = f"/rooms/{room_id}/photos" new_photo_request = {"url": image_url, "firebase_id": firebase_id} photo_response, _ = Requester.room_srv_fetch("POST", room_photo_path, {HTTP_201_CREATED}, payload=new_photo_request) # photo_id = photo_response["id"] # RoomPhotoDAO.add_new_room_photo(db, firebase_id, photo_id) return photo_response
async def accept_booking(booking_id: int, uuid: int = Depends(get_uuid_from_xtoken)): path = f"/bookings/{booking_id}" booking, _ = Requester.payment_fetch(method="GET", path=path, expected_statuses={HTTP_200_OK}) room_owner_id = booking["roomOwnerId"] if not AuthSender.has_permission_to_modify(uuid, room_owner_id): raise UnauthorizedRequestError("Can't accept other users bookings") path = f"/bookings/{booking_id}/accept" payload_accept = {"roomOwnerId": room_owner_id} book_accepted, _ = Requester.payment_fetch("POST", path, {HTTP_200_OK}, payload=payload_accept) # TODO: Change BookingDB model to match camelcase in payment server booking_camel = payment_camel_to_snake(book_accepted) # Send notification sender, _ = Requester.user_srv_fetch( "GET", f"/users/{booking_camel['room_owner_id']}", {HTTP_200_OK}) sender_name = f"{sender['firstname']} {sender['lastname']}" room, _ = Requester.room_srv_fetch("GET", f"/rooms/{booking_camel['room_id']}", {HTTP_200_OK}) room_title = room["title"] notifier.send_booking_accepted_notification(sender_name, room_title, booking_camel["booker_id"]) return booking_camel
async def create_guest_rating( payload: UserRatingSchema, user_id: int, uuid: int = Depends(get_uuid_from_xtoken), ): if not AuthSender.has_permission_to_comment(uuid, user_id): raise UnauthorizedRequestError("You can't create a rating yourself") path = f"/users/{uuid}" me, _ = Requester.user_srv_fetch(method="GET", path=path, expected_statuses={HTTP_200_OK}) new_payload = { "rating": payload.dict()["rating"], "reviewer": f"{me['firstname']} {me['lastname']}", "reviewer_id": uuid, } path = f"/users/{user_id}/guest_ratings" rating, _ = Requester.user_srv_fetch( method="POST", path=path, expected_statuses={HTTP_201_CREATED}, payload=new_payload, ) # Send notification notifier.send_new_user_guest_rating_notification(new_payload["reviewer"], new_payload["rating"], user_id) return rating
async def delete_guest_rating( user_id: int, rating_id: int, uuid: int = Depends(get_uuid_from_xtoken), ): rating_path = f"/users/{user_id}/guest_ratings/{rating_id}" if not AuthSender.has_permission_to_modify(uuid, user_id): raise UnauthorizedRequestError( "You can't delete a rating of another user") review, _ = Requester.user_srv_fetch(method="DELETE", path=rating_path, expected_statuses={HTTP_200_OK}) return review
async def update_user( user_id: int, payload: UserUpdateSchema, uuid: int = Depends(get_uuid_from_xtoken), ): if not AuthSender.has_permission_to_modify(uuid, user_id): raise UnauthorizedRequestError( "You can't update info about other users") path = f"/users/{user_id}" new_user_info, _ = Requester.user_srv_fetch( method="PATCH", path=path, expected_statuses={HTTP_200_OK}, payload=payload.dict(exclude_unset=True), ) return new_user_info
async def delete_user(user_id: int, uuid: int = Depends(get_uuid_from_xtoken), x_access_token: Optional[str] = Header(None)): auth_header = {"x-access-token": x_access_token} if not AuthSender.has_permission_to_modify(uuid, user_id): raise UnauthorizedRequestError("You can't delete other users") path = f"/users/{user_id}" new_user_info, _ = Requester.user_srv_fetch( method="DELETE", path=path, expected_statuses={HTTP_200_OK}) auth_path = f"/user/registered/{uuid}" Requester.auth_srv_fetch("DELETE", path=auth_path, expected_statuses={HTTP_200_OK}, extra_headers=auth_header) return new_user_info
async def delete_room_photo( room_id: int, firebase_id: int, db: Session = Depends(get_db), uuid: int = Depends(get_uuid_from_xtoken), ): room_path = f"/rooms/{room_id}" room, _ = Requester.room_srv_fetch("GET", room_path, {HTTP_200_OK}) if not AuthSender.has_permission_to_modify(room["owner_uuid"], uuid): raise UnauthorizedRequestError( "You can't delete photos of another user room!") # photo = RoomPhotoDAO.delete_room_photo(db, firebase_id) # if photo is None: # raise NotFoundError("Photo id") # photo_id = photo["room_photo_id"] # room_photo_path = f"/rooms/{room_id}/photos/{photo_id}" room_photo_path = f"/rooms/{room_id}/photos/{firebase_id}" photo_response, _ = Requester.room_srv_fetch("DELETE", room_photo_path, {HTTP_200_OK}) return photo_response