diff --git a/app/services/cart_service.py b/app/services/cart_service.py index 0d101d2..834353b 100644 --- a/app/services/cart_service.py +++ b/app/services/cart_service.py @@ -7,6 +7,17 @@ class CartService: @staticmethod def add_to_cart(user_id: str, product_id: int, count: int) -> Tuple[Union[dict, str], int]: + """ + Adds a product to a user's cart. + + :param user_id: User ID. + :type user_id: str + :param product_id: ID of product to be added. + :type product_id: int + :return: Tuple containing a dictionary with a token and an HTTP status code. + :rtype: Tuple[Union[dict, str], int] + """ + try: with db_connection.cursor(dictionary=True) as cursor: cursor.execute("select count from cart_item where cart_id = %s and product_id = %s", (user_id, product_id)) @@ -26,6 +37,19 @@ class CartService: @staticmethod def update_count(user_id: str, product_id: int, count: int) -> Tuple[Union[dict, str], int]: + """ + Updates count of products in user's cart + + :param user_id: User ID. + :type user_id: str + :param product_id: ID of product to be updated. + :type product_id: int + :param count: New count of products + :type count: int + :return: Tuple containing a dictionary with a token and an HTTP status code. + :rtype: Tuple[Union[dict, str], int] + """ + try: if count <= 0: return CartService.delete_from_cart(user_id, product_id) @@ -41,6 +65,18 @@ class CartService: @staticmethod def delete_from_cart(user_id: str, product_id: int) -> Tuple[Union[dict, str], int]: + """ + Completely deletes an item from a user's cart + + :param user_id: User ID. + :type user_id: str + :param product_id: ID of product to be updated. + :type product_id: int + :return: Tuple containing a dictionary with a token and an HTTP status code. + :rtype: Tuple[Union[dict, str], int] + """ + + try: with db_connection.cursor() as cursor: cursor.execute("delete from cart_item where cart_id = %s and product_id = %s", (user_id, product_id)) @@ -53,6 +89,15 @@ class CartService: @staticmethod def show_cart(user_id: str) -> Tuple[Union[dict, str], int]: + """ + Gives the user the content of their cart + + :param user_id: User ID. + :type user_id: str + :return: Tuple containing a dictionary with a token and an HTTP status code. + :rtype: Tuple[Union[dict, str], int] + """ + try: with db_connection.cursor(dictionary=True) as cursor: cursor.execute("select product.name as product_name, count, price_subtotal, date_added from cart_item inner join product on cart_item.product_id = product.id where cart_item.cart_id = %s", (user_id,)) @@ -78,6 +123,15 @@ class CartService: @staticmethod def purchase(user_id: str) -> Tuple[Union[dict, str], int]: + """ + "Purchases" the contents of user's cart + + :param user_id: User ID. + :type user_id: str + :return: Tuple containing a dictionary with a token and an HTTP status code. + :rtype: Tuple[Union[dict, str], int] + """ + try: with db_connection.cursor(dictionary=True) as cursor: # get all cart items diff --git a/app/services/product_service.py b/app/services/product_service.py index 3ff42ed..ad5b4ab 100644 --- a/app/services/product_service.py +++ b/app/services/product_service.py @@ -11,6 +11,13 @@ class ProductService: @staticmethod def get_products(page: int): + """ + Fetches 10 products + + :param page: Page, aka offset of fetching + :type page: int + """ + try: with db_connection.cursor(dictionary=True) as cursor: @@ -39,6 +46,15 @@ class ProductService: @staticmethod def get_product_info(fields: list[str], product_id: int): + """ + Fetches specific product info + + :param fields: array of fields that can be fetched + :type fields: list[str] + :param product_id: ID of product to be updated. + :type product_id: int + """ + try: with db_connection.cursor(dictionary=True) as cursor: fields_to_sql = { @@ -79,6 +95,17 @@ class ProductService: @staticmethod def create_listing(seller_id: str, name: str, price: float): + """ + Creates a new product listing + + :param seller_id: User ID + :type seller_id: str + :param name: New product's name + :type name: str + :param price: New product's price + :type price: float + """ + try: with db_connection.cursor() as cursor: rounded_price = round(price, 2)