def put(self, id): """ PUT method Modifies a motos Param: id Return: dict (moto updated) """ data = parser.parse_args() if not data['available']: return {'message': {"available": "Specify true or false"}}, 400 moto = MotosModel.find_by_id(id=id) try: moto.available = str_to_bool(data['available']) except ValueError: return { 'message': { "available": "Specify a boolean value, true or false" } }, 400 try: moto.save_to_db() return {'user': MotosModel.find_by_id(id).json()}, 200 except: return {"message": "Error Description"}, 500
def post(self): """ POST method Adds a new rental. This method is used for initialize a rental. Return: dict (rental created / message) """ data = parser.parse_args() if not data['moto_id']: return {'message': { "moto_id": "Moto_id cant be empty" }}, 400 if not data['user_id']: return {'message': { "user_id": "User_id cant be empty" }}, 400 activerental = RentalsModel.find_active_rental_by_user_id(user_id=data['user_id']) if activerental: return {'message': "User with id [{}] already has an ongoing rental".format(data['user_id'])}, 409 rental = RentalsModel(moto_id=data['moto_id'], user_id=data['user_id'], book_hour=datetime.now().isoformat()) moto = MotosModel.find_by_id(data['moto_id']) try: rental.save_to_db() moto.set_available(False) return {'rental': RentalsModel.find_by_id(rental.id).json()}, 201 except: return {'message': 'Internal server error'}, 500
def get(self, id): """ GET method Return: dict (moto, rentals and users) """ data = parser.parse_args() if not data['num_rentals']: return { 'message': { "num_rentals": "Specify the number of rentals you want" } }, 400 moto = MotosModel.find_by_id(id) associated_rentals = RentalsModel.find_by_moto_id(id) if not associated_rentals: return { 'message': 'Moto with id [{}] has no associated rentals'.format(id) }, 404 if moto: return { 'last_rentals': MotosModel.find_last_rentals_info(moto, data['num_rentals'], associated_rentals) }, 200 else: return {'message': 'Moto with id [{}] not found'.format(id)}, 404
def get(self, id): """ GET method Gets an moto by id Param: int id Return: dict (moto ok / message) """ moto = MotosModel.find_by_id(id=id) if moto: return {'moto': moto.json()}, 200 else: return {'message': "Moto with id [{}] Not found.".format(id)}, 404
def delete(self, id): """ DELETE method Removes a moto Param: int id Return: dict (message ok / message) """ moto = MotosModel.find_by_id(id=id) if moto: try: moto.delete_from_db() return { 'message': "Moto with id [{}] deleted.".format(id) }, 200 except: return {"message": "Something went wrong."}, 500 else: return {'message': "Moto with id [{}] Not found".format(id)}, 404
def put(self, id): """ PUT method Updates a rental. This method is used for finish a rental. :param id: :return: dict (rental updated / message) """ data = parser.parse_args() rental = RentalsModel.find_by_id(id) moto = MotosModel.find_by_id(rental.moto_id) if rental is None: return {'message': 'This rental doesn t exist'}, 404 if data['end_rental'] is not None: if str_to_bool(data['end_rental']): if rental.finish_rental_hour is not None: return {'message': 'The rental is already finsished.'}, 409 if not data['latitude'] or not data['longitude']: return {'message': 'latitude and longitude parameters needed for updating moto coordinates'}, 409 try: rental.update_finish_rent_hour(datetime.now().isoformat()) moto.set_available(True) moto.update_coords(data['latitude'], data['longitude']) new_rental = RentalsModel.find_by_id(rental.id) return {'rental': new_rental.json()}, 200 except: return {'message': 'Internal server error'}, 500 else: if rental.finish_book_hour is not None: return {'message': 'The book is already finsished.'}, 409 try: max_finish_book_hour = datetime.strptime(rental.book_hour, '%Y-%m-%dT%H:%M:%S.%f') + timedelta(minutes=15) if max_finish_book_hour > datetime.now(): rental.update_finish_book_hour(datetime.now().isoformat()) new_rental = RentalsModel.find_by_id(rental.id) return {'rental': new_rental.json()}, 200 else: rental.update_finish_book_hour(max_finish_book_hour.isoformat()) new_rental = RentalsModel.find_by_id(rental.id) return {'rental': new_rental.json()}, 200 except: return {'message': 'Internal server error'}, 500 else: return {'message': 'Bad request, you must pass end_rental param'}, 400
def post(self): """ POST method Adds a new account Return: dict (account created / message) """ data = parser.parse_args() if not data['license_number']: return {'message': {"license_number": "Name cant be empty"}}, 400 if not data['battery']: return {'message': {"battery": "Battery cant be empty"}}, 400 if not data['longitude']: return {'message': {"longitude": "Longitude cant be empty"}}, 400 if not data['latitude']: return {'message': {"latitude": "Latitude cant be empty"}}, 400 if MotosModel.find_by_license_number( license_number=data['license_number']): return { 'message': "Account with license number [{}] already exists".format( data['license_number']) }, 409 moto = MotosModel(license_number=data['license_number'], battery=data['battery'], latitude=data['latitude'], longitude=data['longitude']) try: moto.save_to_db() return {'moto': MotosModel.find_by_id(moto.id).json()}, 201 except: return {"message": "Something went wrong"}, 500