def create_cart(): try: response = requests.post(config.endpoints.carts) except Exception: raise exceptions.StorageServerError() if response.status_code == 201: return response.json()['cart_id'] else: raise exceptions.StorageServerError()
def cancel_cart(cart_id): try: response = requests.delete(config.endpoints.cart + cart_id) except Exception: raise exceptions.StorageServerError() if response.status_code == 404: raise exceptions.CartNotFoundException elif response.status_code == 200: return response.json() else: raise exceptions.StorageServerError()
def add_item_to_cart(cart_id, item_id): try: response = requests.post(config.endpoints.cart + cart_id + '/items/' + item_id) except Exception: raise exceptions.StorageServerError() if response.status_code == 404: raise exceptions.CartOrItemNotFoundException(response.json['message']) elif response.status_code == 200: return response.json() else: raise exceptions.StorageServerError()
def checkout(self): to_charge = self.apply_discount() try: response = requests.put(config.endpoints.cart + self._cart_id, json={'status': 'Checked out', 'payment_method': self._payment_method, 'total_amount': to_charge, 'username': self._cart_db['username']}) except Exception: raise exceptions.StorageServerError() # Esto también podría ejecutarse en un thread separado ya que ya se le cobró al cliente... if response.status_code == 200: email_service.send_email("You sold!", "A new " + self._payment_method + " transaction was made.") return response.json() else: # Haría rollback del cobro con la pasarela raise exceptions.StorageServerError()
def create_item(**params): try: response = requests.post(config.endpoints.items, json=params) except Exception: raise exceptions.StorageServerError if response.status_code == 400: raise exceptions.ItemAlreadyExists elif response.status_code == 201: email_service.send_email("New Item created", "A new Item has been created") return response.json()['item_id'] raise exceptions.StorageServerError()
def update_item(item_id, token, **params): if user_service.valid_admin(token): previous_item = get_item(item_id) try: response = requests.put(config.endpoints.item + item_id, json=params) except Exception: raise exceptions.StorageServerError if response.status_code == 404: raise exceptions.ItemNotFoundException() elif response.status_code == 400: raise exceptions.BadRequest(response.text) elif response.status_code == 200: item_updated = response.json() if item_updated['price'] != previous_item['price']: email_service.send_email("New Price!", "The new price for " + item_updated['name'] + " is " + str(item_updated['price'])) return item_updated else: raise exceptions.StorageServerError() else: raise exceptions.NotAnAdmin()