Swagger documentation progress

This commit is contained in:
Thastertyn 2024-03-13 21:40:55 +01:00
parent f259aa3993
commit b1fb6ee099
4 changed files with 100 additions and 29 deletions

View File

@ -1,7 +1,7 @@
from flask import jsonify, abort, request from flask import jsonify, abort, request
from flask_jwt_extended import jwt_required, get_jwt_identity 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 from flasgger import swag_from
@ -35,6 +35,7 @@ def add_to_cart(product_id: int):
@bp_cart.route('/remove/<int:product_id>', methods=['DELETE']) @bp_cart.route('/remove/<int:product_id>', methods=['DELETE'])
@jwt_required() @jwt_required()
@swag_from(remove_from_cart_swagger)
def remove_from_cart(product_id: int): def remove_from_cart(product_id: int):
user_id = get_jwt_identity() user_id = get_jwt_identity()
@ -44,6 +45,7 @@ def remove_from_cart(product_id: int):
@bp_cart.route('/update/<int:product_id>', methods=['PUT']) @bp_cart.route('/update/<int:product_id>', methods=['PUT'])
@jwt_required() @jwt_required()
@swag_from(update_count_in_cart_swagger)
def update_count_in_cart(product_id: int): def update_count_in_cart(product_id: int):
user_id = get_jwt_identity() user_id = get_jwt_identity()
count = request.args.get('count', type=int) 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']) @bp_cart.route('/purchase', methods=['GET'])
@jwt_required() @jwt_required()
@swag_from(purchase_swagger)
def purchase(): def purchase():
user_id = get_jwt_identity() user_id = get_jwt_identity()

View File

@ -1,7 +1,7 @@
from flask import jsonify, abort, request from flask import jsonify, abort, request
from flask_jwt_extended import jwt_required, get_jwt_identity 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 from flasgger import swag_from
@ -22,6 +22,7 @@ def get_products():
return result, status_code return result, status_code
@bp_product.route('/<int:id>', methods=['GET']) @bp_product.route('/<int:id>', methods=['GET'])
@swag_from(get_product_info_swagger)
def get_product_info(id: int): def get_product_info(id: int):
fields = ['name', 'price', 'image', 'image_name', 'seller'] fields = ['name', 'price', 'image', 'image_name', 'seller']

View File

@ -1,25 +1,19 @@
show_cart_swagger = { show_cart_swagger = {
"tags": ["Cart"], "tags": ["Cart"],
"security": "security": [
[
{"JWT": []} {"JWT": []}
], ],
"responses": "responses": {
{ "200": {
"200":
{
"description": "Current content of user's shopping cart", "description": "Current content of user's shopping cart",
"schema": "schema": {
{ "items": {
"items":
{
"count": {"type": "int"}, "count": {"type": "int"},
"date_added": {"type": "string"}, "date_added": {"type": "string"},
"name": {"type": "string"}, "name": {"type": "string"},
"price_subtotal": {"type": "string"} "price_subtotal": {"type": "string"}
}, },
"example": "example": [
[
{ {
"count": 5, "count": 5,
"date_added": "Fri, 08 Mar 2024 08:43:09 GMT", "date_added": "Fri, 08 Mar 2024 08:43:09 GMT",
@ -40,12 +34,10 @@ show_cart_swagger = {
add_to_cart_swagger ={ add_to_cart_swagger ={
"tags": ["Cart"], "tags": ["Cart"],
"security": "security": [
[
{"JWT": []} {"JWT": []}
], ],
"parameters": "parameters": [
[
{ {
"name": "product_id", "name": "product_id",
"description": "ID of product to add to cart.", "description": "ID of product to add to cart.",
@ -62,15 +54,65 @@ add_to_cart_swagger ={
"required": False "required": False
} }
], ],
"responses": "responses": {
{ "200": {"description": "Successfully added a product to cart"},
"200": "400": {"description": "Causes:\n- Count is < 1"}
{ }
"description": "Successfully added a product to cart" }
},
"400": remove_from_cart_swagger = {
{ "tags": ["Cart"],
"description": "Causes:\n- Count is < 1" "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"}
} }
} }

View File

@ -19,3 +19,28 @@ get_products_swagger = {
} }
} }
} }
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"}
}
}