init swagger.py

هذا الالتزام موجود في:
2025-10-05 16:35:25 +03:00
الأصل 369ebf8187
التزام d8f12591aa

224
swagger.py Normal file
عرض الملف

@@ -0,0 +1,224 @@
from flask import Flask
from flask_swagger_ui import get_swaggerui_blueprint
import json
# Swagger configuration
SWAGGER_URL = '/docs'
API_URL = '/swagger.json'
swagger_ui_blueprint = get_swaggerui_blueprint(
SWAGGER_URL,
API_URL,
config={
'app_name': "My First Store API"
}
)
# Swagger JSON specification
swagger_spec = {
"openapi": "3.0.0",
"info": {
"title": "Simple Store API",
"description": "My first API project - A simple store management system",
"version": "1.0.0"
},
"servers": [
{
"url": "http://localhost:5000",
"description": "Development server"
}
],
"paths": {
"/": {
"get": {
"summary": "Home page",
"description": "Welcome message",
"responses": {
"200": {
"description": "Welcome message",
"content": {
"application/json": {
"example": {"message": "Welcome to my first API!"}
}
}
}
}
}
},
"/products": {
"get": {
"summary": "Get all products",
"description": "Returns a list of all products in the store",
"responses": {
"200": {
"description": "List of products",
"content": {
"application/json": {
"example": {
"products": [
{"id": 1, "name": "Laptop", "price": 5000, "quantity": 10}
]
}
}
}
}
}
},
"post": {
"summary": "Add new product",
"description": "Create a new product in the store",
"requestBody": {
"required": True,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"name": {"type": "string", "example": "Keyboard"},
"price": {"type": "number", "example": 300},
"quantity": {"type": "integer", "example": 20}
},
"required": ["name", "price"]
}
}
}
},
"responses": {
"201": {
"description": "Product created successfully"
},
"400": {
"description": "Missing required fields"
}
}
}
},
"/products/{product_id}": {
"get": {
"summary": "Get single product",
"description": "Get details of a specific product by ID",
"parameters": [
{
"name": "product_id",
"in": "path",
"required": True,
"schema": {"type": "integer"},
"example": 1
}
],
"responses": {
"200": {
"description": "Product details"
},
"404": {
"description": "Product not found"
}
}
},
"put": {
"summary": "Update product",
"description": "Update an existing product",
"parameters": [
{
"name": "product_id",
"in": "path",
"required": True,
"schema": {"type": "integer"}
}
],
"requestBody": {
"required": True,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"name": {"type": "string"},
"price": {"type": "number"},
"quantity": {"type": "integer"}
}
}
}
}
},
"responses": {
"200": {
"description": "Product updated"
},
"404": {
"description": "Product not found"
}
}
},
"delete": {
"summary": "Delete product",
"description": "Remove a product from the store",
"parameters": [
{
"name": "product_id",
"in": "path",
"required": True,
"schema": {"type": "integer"}
}
],
"responses": {
"200": {
"description": "Product deleted"
},
"404": {
"description": "Product not found"
}
}
}
},
"/orders": {
"get": {
"summary": "Get all orders",
"description": "Returns a list of all orders",
"responses": {
"200": {
"description": "List of orders"
}
}
},
"post": {
"summary": "Create order",
"description": "Place a new order for a product",
"requestBody": {
"required": True,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"product_id": {"type": "integer", "example": 1},
"quantity": {"type": "integer", "example": 2}
},
"required": ["product_id", "quantity"]
}
}
}
},
"responses": {
"201": {
"description": "Order created successfully"
},
"400": {
"description": "Invalid order data or not enough stock"
},
"404": {
"description": "Product not found"
}
}
}
}
}
}
def setup_swagger(app):
"""Add Swagger UI to Flask app"""
app.register_blueprint(swagger_ui_blueprint, url_prefix=SWAGGER_URL)
@app.route('/swagger.json')
def swagger_json():
return swagger_spec