Files
hossein-por-shop/frontend/swagger.yaml
2025-01-16 16:05:49 +03:30

1214 lines
30 KiB
YAML

openapi: 3.0.3
info:
title: ''
version: 1.0.0
paths:
/accounts/address/{id}:
get:
operationId: accounts_address_retrieve
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- accounts
security:
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/UserAddress'
description: ''
/accounts/address/create:
post:
operationId: accounts_address_create_create
tags:
- accounts
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UserAddressRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/UserAddressRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/UserAddressRequest'
required: true
security:
- jwtAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/UserAddress'
description: ''
/accounts/address/delete/{id}:
delete:
operationId: accounts_address_delete_destroy
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- accounts
security:
- jwtAuth: []
responses:
'204':
description: No response body
/accounts/address/edit/{id}:
put:
operationId: accounts_address_edit_update
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- accounts
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UserAddressRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/UserAddressRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/UserAddressRequest'
required: true
security:
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/UserAddress'
description: ''
patch:
operationId: accounts_address_edit_partial_update
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- accounts
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PatchedUserAddressRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PatchedUserAddressRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PatchedUserAddressRequest'
security:
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/UserAddress'
description: ''
/accounts/address/list:
get:
operationId: accounts_address_list_list
tags:
- accounts
security:
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/UserAddress'
description: ''
/accounts/profile:
get:
operationId: accounts_profile_retrieve
tags:
- accounts
security:
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Profile'
description: ''
patch:
operationId: accounts_profile_partial_update
tags:
- accounts
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PatchedProfileRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PatchedProfileRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PatchedProfileRequest'
security:
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Profile'
description: ''
/accounts/send_otp:
post:
operationId: accounts_send_otp_create
tags:
- Authentication
requestBody:
content:
application/json:
schema:
type: object
properties:
phone:
type: string
example: 09123456789
required:
- phone
security:
- jwtAuth: []
- {}
responses:
'200':
description: No response body
/accounts/verify:
post:
operationId: accounts_verify_create
description: |-
Takes a token and indicates if it is valid. This view provides no
information about a token's fitness for a particular use.
tags:
- accounts
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TokenVerifyRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/TokenVerifyRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/TokenVerifyRequest'
required: true
responses:
'200':
description: No response body
/chat/product/{id}:
get:
operationId: chat_product_retrieve
description: Retrieve all messages for a product chat.
summary: Retrieve messages for a product chat
parameters:
- in: path
name: id
schema:
type: integer
required: true
- in: query
name: limit
schema:
type: integer
default: 10
description: Number of results to return per page.
- in: query
name: offset
schema:
type: integer
default: 0
description: The starting position of the results.
tags:
- chat
security:
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: Unspecified response body
description: ''
post:
operationId: chat_product_create
description: Send a new message in the product chat.
summary: Send a new message in the product chat
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- chat
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/NewMessageRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/NewMessageRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/NewMessageRequest'
required: true
security:
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: Unspecified response body
description: ''
'400':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: Unspecified response body
description: ''
/products/:
get:
operationId: products_list
description: Retrieve products with optional filters and sorting. Provide a
list of category IDs to filter products by those categories and their subcategories.
parameters:
- in: query
name: category
schema:
type: array
items:
type: number
explode: false
style: form
- in: query
name: has_discount
schema:
type: boolean
description: Filter products that have a discount.
- in: query
name: in_stock
schema:
type: boolean
description: Filter products that are in stock (positive stock).
- in: query
name: limit
schema:
type: integer
description: Number of results to return per page (pagination).
- in: query
name: offset
schema:
type: integer
description: The starting position of the results (pagination).
- in: query
name: price_gte
schema:
type: number
format: float
description: Filter products with price greater than or equal to this value.
- in: query
name: price_lte
schema:
type: number
format: float
description: Filter products with price less than or equal to this value.
- in: query
name: search
schema:
type: string
description: Search by product name or description.
- in: query
name: sort
schema:
type: string
description: |-
Sort results by one of the following fields:
`name`, `-name`, `price`, `-price`, `discount`, `-discount`, `created_at`, `-created_at`.
Prefix with `-` for descending order.
tags:
- products
security:
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedProductList'
description: ''
'404':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/products/{id}:
get:
operationId: products_retrieve
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- products
security:
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Product'
description: ''
/products/{id}/comments:
get:
operationId: products_comments_retrieve_2
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- products
security:
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Comment'
description: ''
post:
operationId: products_comments_create_2
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- products
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CommentRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/CommentRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/CommentRequest'
required: true
security:
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Comment'
description: ''
delete:
operationId: products_comments_destroy_2
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- products
security:
- jwtAuth: []
responses:
'204':
description: No response body
/products/categories:
get:
operationId: products_categories_list
parameters:
- in: query
name: search
schema:
type: string
description: Search by category name or description.
tags:
- products
security:
- {}
responses:
'200':
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Category'
description: ''
'404':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/products/comments/{id}:
get:
operationId: products_comments_retrieve
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- products
security:
- jwtAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Comment'
description: ''
post:
operationId: products_comments_create
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- products
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CommentRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/CommentRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/CommentRequest'
required: true
security:
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Comment'
description: ''
delete:
operationId: products_comments_destroy
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- products
security:
- jwtAuth: []
responses:
'204':
description: No response body
/tickets/:
get:
operationId: tickets_list
tags:
- tickets
security:
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Ticket'
description: ''
/tickets/{id}:
get:
operationId: tickets_retrieve
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- tickets
security:
- jwtAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Ticket'
description: ''
/tickets/{id}/messages:
post:
operationId: tickets_messages_create
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- tickets
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/MessageRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/MessageRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/MessageRequest'
required: true
security:
- jwtAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/Message'
description: ''
/tickets/{id}/update-status:
post:
operationId: tickets_update_status_create
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- tickets
security:
- jwtAuth: []
responses:
'200':
description: No response body
/tickets/create:
post:
operationId: tickets_create_create
tags:
- tickets
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TicketRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/TicketRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/TicketRequest'
required: true
security:
- jwtAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/Ticket'
description: ''
/token/:
post:
operationId: token_create
description: |-
Takes a set of user credentials and returns an access and refresh JSON web
token pair to prove the authentication of those credentials.
tags:
- Authentication
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CustomTokenObtainPairRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/CustomTokenObtainPairRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/CustomTokenObtainPairRequest'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/CustomTokenObtainPair'
description: ''
/token/refresh/:
post:
operationId: token_refresh_create
description: |-
Takes a refresh type JSON web token and returns an access type JSON web
token if the refresh token is valid.
tags:
- token
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TokenRefreshRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/TokenRefreshRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/TokenRefreshRequest'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TokenRefresh'
description: ''
components:
schemas:
Category:
type: object
properties:
id:
type: integer
readOnly: true
name:
type: string
title: نام دسته‌بندی
maxLength: 50
slug:
type: string
description: اسم دسته را برای مسیر به انگلیسی و بدون فاصله وارد کنید
maxLength: 50
pattern: ^[-a-zA-Z0-9_]+$
icon:
type: string
nullable: true
title: آیکون دسته‌بندی
maxLength: 100
meta_title:
type: string
nullable: true
title: عنوان متا
description: عنوان متا برای SEO
maxLength: 60
meta_description:
type: string
nullable: true
title: توضیحات متا
description: توضیحات متا برای SEO
maxLength: 160
parent:
type: integer
nullable: true
title: دسته‌بندی والد
children:
type: string
readOnly: true
required:
- children
- id
- name
- slug
Comment:
type: object
properties:
id:
type: integer
readOnly: true
content:
type: string
title: محتوای نظر
timestamp:
type: string
format: date-time
readOnly: true
title: زمان ثبت کامنت
show:
type: boolean
readOnly: true
title: نشان دادن کامنت
product:
type: integer
readOnly: true
title: محصول
user:
type: integer
required:
- content
- id
- product
- show
- timestamp
- user
CommentRequest:
type: object
properties:
content:
type: string
minLength: 1
title: محتوای نظر
user:
type: integer
required:
- content
- user
CurrencyEnum:
enum:
- dollor
- toman
- derham
type: string
description: |-
* `dollor` - دلار
* `toman` - تومان
* `derham` - درهم
CustomTokenObtainPair:
type: object
properties:
otp:
type: string
CustomTokenObtainPairRequest:
type: object
properties:
otp:
type: string
minLength: 1
phone:
type: string
writeOnly: true
minLength: 1
required:
- phone
Message:
type: object
properties:
id:
type: integer
readOnly: true
content:
type: string
created_at:
type: string
format: date-time
readOnly: true
ticket:
type: integer
sender:
type: integer
required:
- content
- created_at
- id
- sender
- ticket
MessageRequest:
type: object
properties:
content:
type: string
minLength: 1
ticket:
type: integer
sender:
type: integer
required:
- content
- sender
- ticket
NewMessageRequest:
type: object
properties:
new_message:
type: string
minLength: 1
description: The message content to send to the chat.
required:
- new_message
PaginatedProductList:
type: object
required:
- count
- results
properties:
count:
type: integer
example: 123
next:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?offset=400&limit=100
previous:
type: string
nullable: true
format: uri
example: http://api.example.org/accounts/?offset=200&limit=100
results:
type: array
items:
$ref: '#/components/schemas/Product'
PatchedProfileRequest:
type: object
properties:
first_name:
type: string
title: نام
maxLength: 50
last_name:
type: string
title: نام خانوادگی
maxLength: 50
email:
type: string
format: email
nullable: true
title: ایمیل
maxLength: 255
profile_photo:
type: string
format: binary
nullable: true
title: عکس پروفایل
PatchedUserAddressRequest:
type: object
properties:
name:
type: string
minLength: 1
maxLength: 30
address:
type: string
minLength: 1
postal_code:
type: string
minLength: 1
maxLength: 10
phone:
type: string
minLength: 1
maxLength: 11
Product:
type: object
properties:
id:
type: integer
readOnly: true
price:
type: string
readOnly: true
is_new:
type: string
readOnly: true
name:
type: string
maxLength: 255
description:
type: string
currency:
allOf:
- $ref: '#/components/schemas/CurrencyEnum'
title: نوع ارز
image:
type: string
format: uri
rating:
type: integer
maximum: 2147483647
minimum: 0
view:
type: integer
maximum: 2147483647
minimum: -2147483648
title: بازدید
sell:
type: integer
maximum: 2147483647
minimum: -2147483648
title: فروش
in_stock:
type: integer
maximum: 2147483647
minimum: -2147483648
title: تعداد موجود
discount:
type: integer
maximum: 32767
minimum: -32768
title: تخفیف
slug:
type: string
nullable: true
title: نام یکتا
description: این فیلد را خالی بگذارید
pattern: ^[-\w]+$
maxLength: 50
meta_description:
type: string
nullable: true
description: این فیلد را حتما پر کنید
maxLength: 300
meta_keywords:
type: string
nullable: true
description: این فیلد را حتما پر کنید
maxLength: 300
meta_rating:
type: number
format: double
description: امتیاز محصول
created_at:
type: string
format: date-time
readOnly: true
title: زمان ثبت محصول
category:
type: integer
nullable: true
required:
- created_at
- currency
- description
- id
- image
- is_new
- name
- price
Profile:
type: object
properties:
first_name:
type: string
title: نام
maxLength: 50
last_name:
type: string
title: نام خانوادگی
maxLength: 50
email:
type: string
format: email
nullable: true
title: ایمیل
maxLength: 255
profile_photo:
type: string
format: uri
nullable: true
title: عکس پروفایل
phone:
type: string
readOnly: true
title: شماره تماس
required:
- phone
StatusEnum:
enum:
- open
- in_progress
- resolved
- closed
type: string
description: |-
* `open` - Open
* `in_progress` - In Progress
* `resolved` - Resolved
* `closed` - Closed
Ticket:
type: object
properties:
id:
type: integer
readOnly: true
messages:
type: array
items:
$ref: '#/components/schemas/Message'
readOnly: true
subject:
type: string
maxLength: 255
status:
$ref: '#/components/schemas/StatusEnum'
created_at:
type: string
format: date-time
readOnly: true
updated_at:
type: string
format: date-time
readOnly: true
customer:
type: integer
admin:
type: integer
nullable: true
required:
- created_at
- customer
- id
- messages
- subject
- updated_at
TicketRequest:
type: object
properties:
subject:
type: string
minLength: 1
maxLength: 255
status:
$ref: '#/components/schemas/StatusEnum'
customer:
type: integer
admin:
type: integer
nullable: true
required:
- customer
- subject
TokenRefresh:
type: object
properties:
access:
type: string
readOnly: true
refresh:
type: string
required:
- access
- refresh
TokenRefreshRequest:
type: object
properties:
refresh:
type: string
minLength: 1
required:
- refresh
TokenVerifyRequest:
type: object
properties:
token:
type: string
writeOnly: true
minLength: 1
required:
- token
UserAddress:
type: object
properties:
id:
type: integer
readOnly: true
name:
type: string
maxLength: 30
address:
type: string
postal_code:
type: string
maxLength: 10
phone:
type: string
maxLength: 11
required:
- address
- id
- name
- phone
- postal_code
UserAddressRequest:
type: object
properties:
name:
type: string
minLength: 1
maxLength: 30
address:
type: string
minLength: 1
postal_code:
type: string
minLength: 1
maxLength: 10
phone:
type: string
minLength: 1
maxLength: 11
required:
- address
- name
- phone
- postal_code
securitySchemes:
jwtAuth:
type: http
scheme: bearer
bearerFormat: JWT