diff --git a/app/api/routes/cart_routes.py b/app/api/routes/cart_routes.py index 8625442..d388100 100644 --- a/app/api/routes/cart_routes.py +++ b/app/api/routes/cart_routes.py @@ -1,7 +1,7 @@ from flask import jsonify, abort, request from flask_jwt_extended import jwt_required, get_jwt_identity -from app.doc.cart_swag import show_cart_swagger, add_to_cart_swagger +from app.doc.cart_swag import show_cart_swagger, add_to_cart_swagger, remove_from_cart_swagger, update_count_in_cart_swagger, purchase_swagger from flasgger import swag_from @@ -35,6 +35,7 @@ def add_to_cart(product_id: int): @bp_cart.route('/remove/', methods=['DELETE']) @jwt_required() +@swag_from(remove_from_cart_swagger) def remove_from_cart(product_id: int): user_id = get_jwt_identity() @@ -44,6 +45,7 @@ def remove_from_cart(product_id: int): @bp_cart.route('/update/', methods=['PUT']) @jwt_required() +@swag_from(update_count_in_cart_swagger) def update_count_in_cart(product_id: int): user_id = get_jwt_identity() count = request.args.get('count', type=int) @@ -57,6 +59,7 @@ def update_count_in_cart(product_id: int): @bp_cart.route('/purchase', methods=['GET']) @jwt_required() +@swag_from(purchase_swagger) def purchase(): user_id = get_jwt_identity() diff --git a/app/api/routes/product_routes.py b/app/api/routes/product_routes.py index 086b0aa..a688e0f 100644 --- a/app/api/routes/product_routes.py +++ b/app/api/routes/product_routes.py @@ -1,7 +1,7 @@ from flask import jsonify, abort, request from flask_jwt_extended import jwt_required, get_jwt_identity -from app.doc.product_swag import get_products_swagger +from app.doc.product_swag import get_products_swagger, get_product_info_swagger from flasgger import swag_from @@ -22,6 +22,7 @@ def get_products(): return result, status_code @bp_product.route('/', methods=['GET']) +@swag_from(get_product_info_swagger) def get_product_info(id: int): fields = ['name', 'price', 'image', 'image_name', 'seller'] diff --git a/app/doc/cart_swag.py b/app/doc/cart_swag.py index e4e104e..557f5c8 100644 --- a/app/doc/cart_swag.py +++ b/app/doc/cart_swag.py @@ -1,25 +1,19 @@ show_cart_swagger = { "tags": ["Cart"], - "security": - [ + "security": [ {"JWT": []} ], - "responses": - { - "200": - { + "responses": { + "200": { "description": "Current content of user's shopping cart", - "schema": - { - "items": - { + "schema": { + "items": { "count": {"type": "int"}, "date_added": {"type": "string"}, "name": {"type": "string"}, "price_subtotal": {"type": "string"} }, - "example": - [ + "example": [ { "count": 5, "date_added": "Fri, 08 Mar 2024 08:43:09 GMT", @@ -40,12 +34,10 @@ show_cart_swagger = { add_to_cart_swagger ={ "tags": ["Cart"], - "security": - [ + "security": [ {"JWT": []} ], - "parameters": - [ + "parameters": [ { "name": "product_id", "description": "ID of product to add to cart.", @@ -62,15 +54,65 @@ add_to_cart_swagger ={ "required": False } ], - "responses": - { - "200": - { - "description": "Successfully added a product to cart" - }, - "400": - { - "description": "Causes:\n- Count is < 1" - } + "responses": { + "200": {"description": "Successfully added a product to cart"}, + "400": {"description": "Causes:\n- Count is < 1"} + } +} + +remove_from_cart_swagger = { + "tags": ["Cart"], + "security": [{"JWT": []}], + "parameters": [ + { + "name": "product_id", + "in": "path", + "type": "integer", + "description": "ID of the product to be removed from the cart", + "required": True + } + ], + "responses": { + "200": {"description": "Successfully removed item from the cart"}, + "400": {"description": "Bad Request - Invalid input"}, + "500": {"description": "Internal Server Error"} + } +} + +update_count_in_cart_swagger = { + "tags": ["Cart"], + "security": [{"JWT": []}], + "description": "Updates the count of products in the user's cart. If the count is less than or equal to 0, the product will be removed from the cart.", + "parameters": [ + { + "name": "product_id", + "in": "path", + "type": "integer", + "description": "ID of the product to update in the cart", + "required": True + }, + { + "name": "count", + "in": "query", + "type": "integer", + "description": "New count of the product in the cart", + "required": True + } + ], + "responses": { + "200": {"description": "Successfully updated item count in the cart"}, + "400": {"description": "Bad Request - Invalid input"}, + "500": {"description": "Internal Server Error"} + } +} + +purchase_swagger = { + "tags": ["Cart"], + "security": [{"JWT": []}], + "description": "Purchases the contents of the user's cart. This action creates a new purchase, moves items from the cart to the purchase history, and clears the cart.", + "responses": { + "200": {"description": "Successfully completed the purchase"}, + "400": {"description": "Bad Request - Invalid input or cart is empty"}, + "500": {"description": "Internal Server Error"} } } diff --git a/app/doc/product_swag.py b/app/doc/product_swag.py index b570d58..b6e720e 100644 --- a/app/doc/product_swag.py +++ b/app/doc/product_swag.py @@ -18,4 +18,29 @@ get_products_swagger = { } } } -} \ No newline at end of file +} + +get_product_info_swagger = { + "tags": ["Products"], + "parameters": [ + { + "name": "id", + "in": "path", + "type": "integer", + "description": "ID of the product to fetch information for", + "required": True + }, + { + "name": "fields", + "in": "query", + "type": "string", + "description": "Comma-separated list of fields to include in the response", + "required": False + } + ], + "responses": { + "200": {"description": "Successfully fetched product information"}, + "400": {"description": "Bad Request - Invalid input or product doesn't exist"}, + "500": {"description": "Internal Server Error"} + } +}