Files
datahub/backend/docs/openapi.yaml
T

4641 lines
136 KiB
YAML
Raw Normal View History

2026-03-13 13:50:56 +08:00
openapi: 3.0.0
info:
title: 'Datahub API'
description: 'Datahub API documentation'
version: 1.0.0
servers:
-
url: /api/v1
description: 'API v1'
paths:
2026-03-17 12:47:02 +08:00
/api/v1/dashboard/overview:
get:
tags:
- Dashboard
summary: 获取概览统计
description: 返回今日/本周/本月的成功和失败同步数,以及按数据类型的本月分组统计。
operationId: 867e0544fefdad33775c25bb6188d484
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { $ref: '#/components/schemas/DashboardOverview' }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/api/v1/dashboard/trend:
get:
tags:
- Dashboard
summary: 获取趋势数据
description: 返回指定时间范围内按日/周/月聚合的成功和失败同步趋势。
operationId: d3850b6a1ce1436c8ddf4b92fc0b7e44
parameters:
-
name: from
in: query
description: 起始日期(默认30天前)
required: false
schema:
type: string
format: date
example: '2026-02-15'
-
name: to
in: query
description: 结束日期(默认今天)
required: false
schema:
type: string
format: date
example: '2026-03-17'
-
name: group_by
in: query
description: 聚合粒度
required: false
schema:
type: string
default: day
enum:
- day
- week
- month
-
name: data_type
in: query
description: 数据类型筛选
required: false
schema:
type: string
enum:
- order
- product
- refund
- inventory
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { type: array, items: { $ref: '#/components/schemas/DashboardTrendItem' } }
type: object
'400':
description: 参数错误
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/api/v1/dashboard/breakdown:
get:
tags:
- Dashboard
summary: 获取分组统计
description: 按公司/平台/店铺维度统计成功和失败同步数。
operationId: 91349b224bcf13f440df27de0a198f54
parameters:
-
name: dimension
in: query
description: 分组维度
required: true
schema:
type: string
enum:
- company
- platform
- store
-
name: from
in: query
description: 起始日期(默认今天)
required: false
schema:
type: string
format: date
example: '2026-03-17'
-
name: to
in: query
description: 结束日期(默认今天)
required: false
schema:
type: string
format: date
example: '2026-03-17'
-
name: data_type
in: query
description: 数据类型筛选
required: false
schema:
type: string
enum:
- order
- product
- refund
- inventory
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { type: array, items: { $ref: '#/components/schemas/DashboardBreakdownItem' } }
type: object
'400':
description: 参数错误
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/api/v1/failed-messages:
get:
tags:
- 'Failed Messages'
summary: 失败消息列表
description: '获取 Consumer 处理失败的消息列表,支持分页、按数据类型/平台/时间筛选。仅 admin 可访问。'
operationId: 6dac9bdff8b35f75565ed5c6b8638937
parameters:
-
name: page
in: query
required: false
schema:
type: integer
default: 1
-
name: per_page
in: query
required: false
schema:
type: integer
default: 15
maximum: 100
-
name: data_type
in: query
description: 数据类型精确筛选(order/product/refund
required: false
schema:
type: string
enum:
- order
- product
- refund
-
name: platform_id
in: query
description: '平台 ID 精确筛选'
required: false
schema:
type: integer
-
name: error_type
in: query
description: 异常类名模糊搜索
required: false
schema:
type: string
-
name: failed_at_from
in: query
description: 失败时间起始(含)
required: false
schema:
type: string
format: date
example: '2026-01-01'
-
name: failed_at_to
in: query
description: 失败时间截止(含)
required: false
schema:
type: string
format: date
example: '2026-12-31'
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { properties: { items: { type: array, items: { $ref: '#/components/schemas/FailedMessageList' } }, total: { type: integer, example: 100 }, page: { type: integer, example: 1 }, per_page: { type: integer, example: 15 } }, type: object }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
'/api/v1/failed-messages/{id}':
get:
tags:
- 'Failed Messages'
summary: 失败消息详情
description: '获取失败消息详情,含完整错误堆栈和原始消息体。仅 admin 可访问。'
operationId: 4f6b7410222ebc0fa65afdc1d168c15a
parameters:
-
name: id
in: path
description: '失败消息 ID'
required: true
schema:
type: integer
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { $ref: '#/components/schemas/FailedMessageDetail' }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 数据不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/api/v1/mq/status:
get:
tags:
- 'MQ Status'
summary: 获取消息队列状态
description: '查询 RabbitMQ 各队列的消息数、消费者数和运行状态。支持按队列类型筛选。仅 admin 角色可访问。'
operationId: 3f5b041034fafc9738ecf65f166b6193
parameters:
-
name: queue
in: query
description: 队列类型筛选(orders/products/refunds/inventory
required: false
schema:
type: string
enum:
- orders
- products
- refunds
- inventory
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { $ref: '#/components/schemas/MqQueueStatus' }
type: object
'400':
description: 无效的队列类型参数
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: 'RabbitMQ 连接异常'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
2026-03-17 15:55:20 +08:00
/api/v1/logs/operations:
get:
tags:
- 'Operation Logs'
summary: 操作日志列表
description: '获取操作日志列表,支持分页、按用户/操作类型/目标类型/时间筛选。仅 admin 可访问。'
operationId: 36e862550729db3d302d110c8e10c58d
parameters:
-
name: page
in: query
required: false
schema:
type: integer
default: 1
-
name: per_page
in: query
required: false
schema:
type: integer
default: 15
maximum: 100
-
name: user_id
in: query
description: '用户 ID 精确筛选'
required: false
schema:
type: integer
-
name: action
in: query
description: 操作类型精确筛选
required: false
schema:
type: string
-
name: target_type
in: query
description: 目标类型精确筛选
required: false
schema:
type: string
-
name: created_at_from
in: query
description: 创建时间起始(含)
required: false
schema:
type: string
format: date
example: '2026-01-01'
-
name: created_at_to
in: query
description: 创建时间截止(含)
required: false
schema:
type: string
format: date
example: '2026-12-31'
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { properties: { items: { type: array, items: { $ref: '#/components/schemas/OperationLogList' } }, total: { type: integer, example: 100 }, page: { type: integer, example: 1 }, per_page: { type: integer, example: 15 } }, type: object }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
'/api/v1/logs/operations/{id}':
get:
tags:
- 'Operation Logs'
summary: 操作日志详情
description: '获取操作日志详情,含完整操作详情 JSON。仅 admin 可访问。'
operationId: d4b0ae03fd3ef2dec4c8d6d910013ef2
parameters:
-
name: id
in: path
description: '操作日志 ID'
required: true
schema:
type: integer
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { $ref: '#/components/schemas/OperationLogDetail' }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 数据不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
2026-03-13 13:50:56 +08:00
/orders:
get:
tags:
- Orders
summary: 订单列表
description: '获取订单列表,支持分页、多维度筛选和时间范围筛选。返回业务字段,不含 raw/hash。'
operationId: 7e493d0464138129e7e1f0e7ebee178b
parameters:
-
name: page
in: query
required: false
schema:
type: integer
default: 1
-
name: per_page
in: query
required: false
schema:
type: integer
default: 15
maximum: 100
-
name: company_id
in: query
description: '公司 ID 精确筛选'
required: false
schema:
type: integer
-
name: platform_id
in: query
description: '平台 ID 精确筛选'
required: false
schema:
type: integer
-
name: store_id
in: query
description: '店铺 ID 精确筛选'
required: false
schema:
type: integer
-
name: order_status_id
in: query
description: '订单状态 ID 精确筛选'
required: false
schema:
type: integer
-
name: platform_order_id
in: query
description: '平台订单 ID 精确搜索'
required: false
schema:
type: string
-
name: created_date_from
in: query
description: 创建时间起始(含)
required: false
schema:
type: string
format: date
example: '2026-01-01'
-
name: created_date_to
in: query
description: 创建时间截止(含)
required: false
schema:
type: string
format: date
example: '2026-12-31'
-
name: paid_date_from
in: query
description: 付款时间起始(含)
required: false
schema:
type: string
format: date
example: '2026-01-01'
-
name: paid_date_to
in: query
description: 付款时间截止(含)
required: false
schema:
type: string
format: date
example: '2026-12-31'
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { properties: { items: { type: array, items: { $ref: '#/components/schemas/Order' } }, total: { type: integer, example: 100 }, page: { type: integer, example: 1 }, per_page: { type: integer, example: 15 } }, type: object }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
'/orders/{id}':
get:
tags:
- Orders
summary: 订单详情
description: '获取订单详情,返回所有业务字段、ext 和关联的 order_items,不含 raw/hash。'
operationId: aff126ce9a5cef811fea88ceba395fdc
parameters:
-
name: id
in: path
description: '订单 ID'
required: true
schema:
type: integer
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { type: object, allOf: [{ $ref: '#/components/schemas/Order' }, { properties: { order_items: { description: 关联订单子项, type: array, items: { type: object } } }, type: object }] }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 数据不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/order-items:
get:
tags:
- 'Order Items'
summary: 订单项列表
description: '获取订单项列表,支持分页和多维度筛选。OrderItem 无 raw/hash 字段,仅提供 Normal 接口。'
operationId: 894b5ea5fad8ecc3159e628333252260
parameters:
-
name: page
in: query
required: false
schema:
type: integer
default: 1
-
name: per_page
in: query
required: false
schema:
type: integer
default: 15
maximum: 100
-
name: company_id
in: query
description: '公司 ID 精确筛选'
required: false
schema:
type: integer
-
name: platform_id
in: query
description: '平台 ID 精确筛选'
required: false
schema:
type: integer
-
name: store_id
in: query
description: '店铺 ID 精确筛选'
required: false
schema:
type: integer
-
name: order_id
in: query
description: '内部订单 ID 精确筛选'
required: false
schema:
type: integer
-
name: platform_order_id
in: query
description: '平台订单 ID 精确筛选'
required: false
schema:
type: string
-
name: platform_product_id
in: query
description: '平台商品 ID 精确筛选'
required: false
schema:
type: string
-
name: product_sku
in: query
description: 'SKU 编码精确筛选'
required: false
schema:
type: string
-
name: created_date_from
in: query
description: 创建时间起始(含)
required: false
schema:
type: string
format: date
example: '2026-01-01'
-
name: created_date_to
in: query
description: 创建时间截止(含)
required: false
schema:
type: string
format: date
example: '2026-12-31'
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { properties: { items: { type: array, items: { $ref: '#/components/schemas/OrderItem' } }, total: { type: integer, example: 100 }, page: { type: integer, example: 1 }, per_page: { type: integer, example: 15 } }, type: object }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
'/order-items/{id}':
get:
tags:
- 'Order Items'
summary: 订单项详情
description: 获取订单项详情,返回完整字段和关联的父订单摘要信息。
operationId: a808f2d76861f46925baef81c52da14f
parameters:
-
name: id
in: path
description: '订单项 ID'
required: true
schema:
type: integer
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { type: object, allOf: [{ $ref: '#/components/schemas/OrderItem' }, { properties: { parent_order: { description: 父订单摘要信息, type: object, nullable: true } }, type: object }] }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 数据不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/products:
get:
tags:
- Products
summary: 产品列表
description: '获取产品列表,支持分页、多维度筛选。返回业务字段,不含 raw/hash。'
operationId: 934e471439896276d2897b4b5132c077
parameters:
-
name: page
in: query
required: false
schema:
type: integer
default: 1
-
name: per_page
in: query
required: false
schema:
type: integer
default: 15
maximum: 100
-
name: company_id
in: query
description: '公司 ID 精确筛选'
required: false
schema:
type: integer
-
name: platform_id
in: query
description: '平台 ID 精确筛选'
required: false
schema:
type: integer
-
name: store_id
in: query
description: '店铺 ID 精确筛选'
required: false
schema:
type: integer
-
name: status_id
in: query
description: '产品状态 ID 精确筛选'
required: false
schema:
type: integer
-
name: platform_item_id
in: query
description: '平台商品 ID 精确搜索'
required: false
schema:
type: string
-
name: name
in: query
description: 商品名称模糊搜索
required: false
schema:
type: string
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { properties: { items: { type: array, items: { $ref: '#/components/schemas/Product' } }, total: { type: integer, example: 100 }, page: { type: integer, example: 1 }, per_page: { type: integer, example: 15 } }, type: object }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
'/products/{id}':
get:
tags:
- Products
summary: 产品详情
description: '获取产品详情,返回所有业务字段和 ext,不含 raw/hash。'
operationId: 7d7422e8293b23608368a4a9000f8096
parameters:
-
name: id
in: path
description: '产品 ID'
required: true
schema:
type: integer
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { $ref: '#/components/schemas/Product' }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 数据不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/raw/orders:
get:
tags:
- 'Orders (Raw)'
summary: 订单列表(Raw
description: '获取订单原始数据列表。返回关键标识 + hash,不含 raw 字段本身(太大)。筛选参数与 Normal 接口一致。'
operationId: 562f4be5afd7463d1c9c9c653bdd0c35
parameters:
-
name: page
in: query
required: false
schema:
type: integer
default: 1
-
name: per_page
in: query
required: false
schema:
type: integer
default: 15
maximum: 100
-
name: company_id
in: query
description: '公司 ID 精确筛选'
required: false
schema:
type: integer
-
name: platform_id
in: query
description: '平台 ID 精确筛选'
required: false
schema:
type: integer
-
name: store_id
in: query
description: '店铺 ID 精确筛选'
required: false
schema:
type: integer
-
name: order_status_id
in: query
description: '订单状态 ID 精确筛选'
required: false
schema:
type: integer
-
name: platform_order_id
in: query
description: '平台订单 ID 精确搜索'
required: false
schema:
type: string
-
name: created_date_from
in: query
description: 创建时间起始(含)
required: false
schema:
type: string
format: date
-
name: created_date_to
in: query
description: 创建时间截止(含)
required: false
schema:
type: string
format: date
-
name: paid_date_from
in: query
description: 付款时间起始(含)
required: false
schema:
type: string
format: date
-
name: paid_date_to
in: query
description: 付款时间截止(含)
required: false
schema:
type: string
format: date
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { properties: { items: { type: array, items: { properties: { id: { type: integer }, platform_order_id: { type: string }, store_id: { type: integer }, company_id: { type: integer }, platform_id: { type: integer }, order_status_id: { type: integer }, hash: { type: string }, created_date: { type: string, format: date-time }, updated_at: { type: string, format: date-time } }, type: object } }, total: { type: integer }, page: { type: integer }, per_page: { type: integer } }, type: object }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
'/raw/orders/{id}':
get:
tags:
- 'Orders (Raw)'
summary: 订单详情(Raw
description: '获取订单原始数据详情。返回关键标识 + 完整 raw + hash + ext。'
operationId: 6c9b613233d2ef2a708d51523149d84b
parameters:
-
name: id
in: path
description: '订单 ID'
required: true
schema:
type: integer
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { properties: { id: { type: integer }, platform_order_id: { type: string }, store_id: { type: integer }, company_id: { type: integer }, platform_id: { type: integer }, order_status_id: { type: integer }, raw: { description: 平台原始数据, type: object }, hash: { type: string }, ext: { type: object, nullable: true }, created_date: { type: string, format: date-time } }, type: object }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 数据不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/raw/products:
get:
tags:
- 'Products (Raw)'
summary: 产品列表(Raw
description: '获取产品原始数据列表。返回关键标识 + hash,不含 raw 字段本身(太大)。筛选参数与 Normal 接口一致。'
operationId: 770fd6e9caf314efbc05aa0277c7e811
parameters:
-
name: page
in: query
required: false
schema:
type: integer
default: 1
-
name: per_page
in: query
required: false
schema:
type: integer
default: 15
maximum: 100
-
name: company_id
in: query
description: '公司 ID 精确筛选'
required: false
schema:
type: integer
-
name: platform_id
in: query
description: '平台 ID 精确筛选'
required: false
schema:
type: integer
-
name: store_id
in: query
description: '店铺 ID 精确筛选'
required: false
schema:
type: integer
-
name: status_id
in: query
description: '产品状态 ID 精确筛选'
required: false
schema:
type: integer
-
name: platform_item_id
in: query
description: '平台商品 ID 精确搜索'
required: false
schema:
type: string
-
name: name
in: query
description: 商品名称模糊搜索
required: false
schema:
type: string
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { properties: { items: { type: array, items: { properties: { id: { type: integer }, platform_item_id: { type: string }, platform_model_id: { type: string, nullable: true }, name: { type: string, nullable: true }, store_id: { type: integer }, company_id: { type: integer }, platform_id: { type: integer }, hash: { type: string }, updated_date: { type: string, format: date-time, nullable: true }, updated_at: { type: string, format: date-time } }, type: object } }, total: { type: integer }, page: { type: integer }, per_page: { type: integer } }, type: object }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
'/raw/products/{id}':
get:
tags:
- 'Products (Raw)'
summary: 产品详情(Raw
description: '获取产品原始数据详情。返回关键标识 + 完整 raw + hash + ext。'
operationId: e0ba90775ff4ceb4fe459b8272a63624
parameters:
-
name: id
in: path
description: '产品 ID'
required: true
schema:
type: integer
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { properties: { id: { type: integer }, platform_item_id: { type: string }, platform_model_id: { type: string, nullable: true }, name: { type: string, nullable: true }, store_id: { type: integer }, company_id: { type: integer }, platform_id: { type: integer }, raw: { description: 平台原始数据, type: object }, hash: { type: string }, ext: { type: object, nullable: true }, created_date: { type: string, format: date-time, nullable: true }, updated_date: { type: string, format: date-time, nullable: true } }, type: object }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 数据不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/raw/refunds:
get:
tags:
- 'Refunds (Raw)'
summary: 退款列表(Raw
description: '获取退款原始数据列表。返回关键标识 + hash,不含 raw 字段本身(太大)。筛选参数与 Normal 接口一致。'
operationId: 04e3c7e28df6496b975c24618933c6dd
parameters:
-
name: page
in: query
required: false
schema:
type: integer
default: 1
-
name: per_page
in: query
required: false
schema:
type: integer
default: 15
maximum: 100
-
name: company_id
in: query
description: '公司 ID 精确筛选'
required: false
schema:
type: integer
-
name: platform_id
in: query
description: '平台 ID 精确筛选'
required: false
schema:
type: integer
-
name: store_id
in: query
description: '店铺 ID 精确筛选'
required: false
schema:
type: integer
-
name: refund_status_id
in: query
description: '退款状态 ID 精确筛选'
required: false
schema:
type: integer
-
name: refund_type_id
in: query
description: '退款类型 ID 精确筛选'
required: false
schema:
type: integer
-
name: platform_refund_id
in: query
description: '平台退款 ID 精确搜索'
required: false
schema:
type: string
-
name: platform_order_id
in: query
description: '关联平台订单 ID 筛选'
required: false
schema:
type: string
-
name: created_date_from
in: query
description: 创建时间起始(含)
required: false
schema:
type: string
format: date
-
name: created_date_to
in: query
description: 创建时间截止(含)
required: false
schema:
type: string
format: date
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { properties: { items: { type: array, items: { properties: { id: { type: integer }, platform_refund_id: { type: string }, platform_order_id: { type: string }, store_id: { type: integer }, company_id: { type: integer }, platform_id: { type: integer }, refund_status_id: { type: integer }, hash: { type: string }, created_date: { type: string, format: date-time }, updated_at: { type: string, format: date-time } }, type: object } }, total: { type: integer }, page: { type: integer }, per_page: { type: integer } }, type: object }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
'/raw/refunds/{id}':
get:
tags:
- 'Refunds (Raw)'
summary: 退款详情(Raw
description: '获取退款原始数据详情。返回关键标识 + 完整 raw + hash + ext。'
operationId: 884b7753642515815a193abb0cae88c9
parameters:
-
name: id
in: path
description: '退款 ID'
required: true
schema:
type: integer
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { properties: { id: { type: integer }, platform_refund_id: { type: string }, platform_order_id: { type: string }, store_id: { type: integer }, company_id: { type: integer }, platform_id: { type: integer }, refund_status_id: { type: integer }, raw: { description: 平台原始数据, type: object }, hash: { type: string }, ext: { type: object, nullable: true }, created_date: { type: string, format: date-time } }, type: object }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 数据不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/raw/refund-items:
get:
tags:
- 'Refund Items (Raw)'
summary: 退款项列表(Raw
description: '获取退款项原始数据列表。返回关键标识,不含 raw 字段本身(太大)。筛选参数与 Normal 接口一致。'
operationId: b1af2757230f49948c934063da9d627a
parameters:
-
name: page
in: query
required: false
schema:
type: integer
default: 1
-
name: per_page
in: query
required: false
schema:
type: integer
default: 15
maximum: 100
-
name: company_id
in: query
description: '公司 ID 精确筛选'
required: false
schema:
type: integer
-
name: platform_id
in: query
description: '平台 ID 精确筛选'
required: false
schema:
type: integer
-
name: store_id
in: query
description: '店铺 ID 精确筛选'
required: false
schema:
type: integer
-
name: refund_id
in: query
description: '父退款 ID 精确筛选'
required: false
schema:
type: integer
-
name: refund_status_id
in: query
description: '退款状态 ID 精确筛选'
required: false
schema:
type: integer
-
name: refund_type_id
in: query
description: '退款类型 ID 精确筛选'
required: false
schema:
type: integer
-
name: platform_refund_id
in: query
description: '平台退款子项 ID 精确搜索'
required: false
schema:
type: string
-
name: platform_order_id
in: query
description: '关联平台订单 ID 筛选'
required: false
schema:
type: string
2026-03-17 12:47:02 +08:00
-
name: platform_product_id
in: query
description: '平台商品 ID 精确筛选'
required: false
schema:
type: string
2026-03-13 13:50:56 +08:00
-
name: created_date_from
in: query
description: 创建时间起始(含)
required: false
schema:
type: string
format: date
-
name: created_date_to
in: query
description: 创建时间截止(含)
required: false
schema:
type: string
format: date
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { properties: { items: { type: array, items: { properties: { id: { type: integer }, platform_refund_id: { type: string }, platform_parent_refund_id: { type: string }, platform_order_id: { type: string }, store_id: { type: integer }, company_id: { type: integer }, platform_id: { type: integer }, refund_status_id: { type: integer }, created_date: { type: string, format: date-time }, updated_at: { type: string, format: date-time } }, type: object } }, total: { type: integer }, page: { type: integer }, per_page: { type: integer } }, type: object }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
'/raw/refund-items/{id}':
get:
tags:
- 'Refund Items (Raw)'
summary: 退款项详情(Raw
description: '获取退款项原始数据详情。返回关键标识 + 完整 raw + ext。'
operationId: 6a82a9938eef667456c5a8948b984eb3
parameters:
-
name: id
in: path
2026-03-17 12:47:02 +08:00
description: '退款项 ID'
required: true
schema:
type: integer
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { properties: { id: { type: integer }, platform_refund_id: { type: string }, platform_parent_refund_id: { type: string }, platform_order_id: { type: string }, store_id: { type: integer }, company_id: { type: integer }, platform_id: { type: integer }, refund_status_id: { type: integer }, raw: { description: 平台原始子项数据, type: object }, ext: { type: object, nullable: true }, created_date: { type: string, format: date-time } }, type: object }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 数据不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/refunds:
get:
tags:
- Refunds
summary: 退款列表
description: '获取退款列表,支持分页、按退款状态/类型/时间范围筛选。返回业务字段,不含 raw/hash。'
operationId: bd68a8b63be96fc4bc13a7f914db8e6f
parameters:
-
name: page
in: query
required: false
schema:
type: integer
default: 1
-
name: per_page
in: query
required: false
schema:
type: integer
default: 15
maximum: 100
-
name: company_id
in: query
description: '公司 ID 精确筛选'
required: false
schema:
type: integer
-
name: platform_id
in: query
description: '平台 ID 精确筛选'
required: false
schema:
type: integer
-
name: store_id
in: query
description: '店铺 ID 精确筛选'
required: false
schema:
type: integer
-
name: refund_status_id
in: query
description: '退款状态 ID 精确筛选'
required: false
schema:
type: integer
-
name: refund_type_id
in: query
description: '退款类型 ID 精确筛选(1=未发货前退款 2=退货退款 3=退货后部分退款 4=无须退货退款 5=闪电退款)'
required: false
schema:
type: integer
-
name: platform_refund_id
in: query
description: '平台退款 ID 精确搜索'
required: false
schema:
type: string
-
name: platform_order_id
in: query
description: '关联平台订单 ID 筛选'
required: false
schema:
type: string
-
name: created_date_from
in: query
description: 创建时间起始(含)
required: false
schema:
type: string
format: date
example: '2026-01-01'
-
name: created_date_to
in: query
description: 创建时间截止(含)
required: false
schema:
type: string
format: date
example: '2026-12-31'
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { properties: { items: { type: array, items: { $ref: '#/components/schemas/Refund' } }, total: { type: integer, example: 100 }, page: { type: integer, example: 1 }, per_page: { type: integer, example: 15 } }, type: object }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
'/refunds/{id}':
get:
tags:
- Refunds
summary: 退款详情
description: '获取退款详情,返回所有业务字段和 ext,不含 raw/hash。'
operationId: 6009f4876a61b01d12a288fcfe78444c
parameters:
-
name: id
in: path
description: '退款 ID'
2026-03-13 13:50:56 +08:00
required: true
schema:
type: integer
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
2026-03-17 12:47:02 +08:00
data: { $ref: '#/components/schemas/Refund' }
2026-03-13 13:50:56 +08:00
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 数据不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
2026-03-17 12:47:02 +08:00
/refund-items:
2026-03-13 13:50:56 +08:00
get:
tags:
2026-03-17 12:47:02 +08:00
- 'Refund Items'
summary: 退款项列表
description: '获取退款项列表,支持分页、按退款单/退款状态/类型/时间范围筛选。返回业务字段,不含 raw。'
operationId: ad798f6022c7e5b289827884ef582bc2
2026-03-13 13:50:56 +08:00
parameters:
-
name: page
in: query
required: false
schema:
type: integer
default: 1
-
name: per_page
in: query
required: false
schema:
type: integer
default: 15
maximum: 100
-
name: company_id
in: query
description: '公司 ID 精确筛选'
required: false
schema:
type: integer
-
name: platform_id
in: query
description: '平台 ID 精确筛选'
required: false
schema:
type: integer
-
name: store_id
in: query
description: '店铺 ID 精确筛选'
required: false
schema:
type: integer
2026-03-17 12:47:02 +08:00
-
name: refund_id
in: query
description: '父退款 ID 精确筛选'
required: false
schema:
type: integer
2026-03-13 13:50:56 +08:00
-
name: refund_status_id
in: query
description: '退款状态 ID 精确筛选'
required: false
schema:
type: integer
-
name: refund_type_id
in: query
2026-03-17 12:47:02 +08:00
description: '退款类型 ID 精确筛选(1=仅退款 2=退货退款 3=补偿退款)'
2026-03-13 13:50:56 +08:00
required: false
schema:
type: integer
-
name: platform_refund_id
in: query
2026-03-17 12:47:02 +08:00
description: '平台退款子项 ID 精确搜索'
2026-03-13 13:50:56 +08:00
required: false
schema:
type: string
-
name: platform_order_id
in: query
description: '关联平台订单 ID 筛选'
required: false
schema:
type: string
2026-03-17 12:47:02 +08:00
-
name: platform_product_id
in: query
description: '平台商品 ID 精确筛选'
required: false
schema:
type: string
2026-03-13 13:50:56 +08:00
-
name: created_date_from
in: query
description: 创建时间起始(含)
required: false
schema:
type: string
format: date
example: '2026-01-01'
-
name: created_date_to
in: query
description: 创建时间截止(含)
required: false
schema:
type: string
format: date
example: '2026-12-31'
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
2026-03-17 12:47:02 +08:00
data: { properties: { items: { type: array, items: { $ref: '#/components/schemas/RefundItem' } }, total: { type: integer, example: 100 }, page: { type: integer, example: 1 }, per_page: { type: integer, example: 15 } }, type: object }
2026-03-13 13:50:56 +08:00
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
2026-03-17 12:47:02 +08:00
'/refund-items/{id}':
2026-03-13 13:50:56 +08:00
get:
tags:
2026-03-17 12:47:02 +08:00
- 'Refund Items'
summary: 退款项详情
description: '获取退款项详情,返回所有业务字段和 ext,不含 raw。'
operationId: de6cf91ff904e528cba6f1b43f829a2c
2026-03-13 13:50:56 +08:00
parameters:
-
name: id
in: path
2026-03-17 12:47:02 +08:00
description: '退款项 ID'
2026-03-13 13:50:56 +08:00
required: true
schema:
type: integer
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
2026-03-17 12:47:02 +08:00
data: { $ref: '#/components/schemas/RefundItem' }
2026-03-13 13:50:56 +08:00
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 数据不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
2026-03-17 12:47:02 +08:00
/api/v1/logs/requests:
2026-03-13 13:50:56 +08:00
get:
tags:
2026-03-17 12:47:02 +08:00
- 'Request Logs'
summary: 请求日志列表
description: '获取 API 请求日志列表,支持分页、按用户/方法/路径/状态码/时间筛选。仅 admin 可访问。'
operationId: db0b73fd478b1f9dfacb819a397254ff
2026-03-13 13:50:56 +08:00
parameters:
-
name: page
in: query
required: false
schema:
type: integer
default: 1
-
name: per_page
in: query
required: false
schema:
type: integer
default: 15
maximum: 100
-
2026-03-17 12:47:02 +08:00
name: user_id
2026-03-13 13:50:56 +08:00
in: query
2026-03-17 12:47:02 +08:00
description: '用户 ID 精确筛选'
2026-03-13 13:50:56 +08:00
required: false
schema:
type: integer
-
2026-03-17 12:47:02 +08:00
name: method
2026-03-13 13:50:56 +08:00
in: query
2026-03-17 12:47:02 +08:00
description: 'HTTP 方法精确筛选'
2026-03-13 13:50:56 +08:00
required: false
schema:
2026-03-17 12:47:02 +08:00
type: string
enum:
- GET
- POST
- PUT
- PATCH
- DELETE
2026-03-13 13:50:56 +08:00
-
2026-03-17 12:47:02 +08:00
name: path
2026-03-13 13:50:56 +08:00
in: query
2026-03-17 12:47:02 +08:00
description: 请求路径模糊搜索
2026-03-13 13:50:56 +08:00
required: false
schema:
type: string
-
2026-03-17 12:47:02 +08:00
name: status_code
2026-03-13 13:50:56 +08:00
in: query
2026-03-17 12:47:02 +08:00
description: 'HTTP 状态码精确筛选'
2026-03-13 13:50:56 +08:00
required: false
schema:
2026-03-17 12:47:02 +08:00
type: integer
2026-03-13 13:50:56 +08:00
-
2026-03-17 12:47:02 +08:00
name: created_at_from
2026-03-13 13:50:56 +08:00
in: query
description: 创建时间起始(含)
required: false
schema:
type: string
format: date
example: '2026-01-01'
-
2026-03-17 12:47:02 +08:00
name: created_at_to
2026-03-13 13:50:56 +08:00
in: query
description: 创建时间截止(含)
required: false
schema:
type: string
format: date
example: '2026-12-31'
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
2026-03-17 12:47:02 +08:00
data: { properties: { items: { type: array, items: { $ref: '#/components/schemas/ApiRequestLogList' } }, total: { type: integer, example: 100 }, page: { type: integer, example: 1 }, per_page: { type: integer, example: 15 } }, type: object }
2026-03-13 13:50:56 +08:00
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
2026-03-17 12:47:02 +08:00
'/api/v1/logs/requests/{id}':
2026-03-13 13:50:56 +08:00
get:
tags:
2026-03-17 12:47:02 +08:00
- 'Request Logs'
summary: 请求日志详情
description: '获取请求日志详情,含完整请求体和 User-Agent。仅 admin 可访问。'
operationId: f730ba32caa6f4a153d5d394a1102912
2026-03-13 13:50:56 +08:00
parameters:
-
name: id
in: path
2026-03-17 12:47:02 +08:00
description: '请求日志 ID'
2026-03-13 13:50:56 +08:00
required: true
schema:
type: integer
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
2026-03-17 12:47:02 +08:00
data: { $ref: '#/components/schemas/ApiRequestLogDetail' }
2026-03-13 13:50:56 +08:00
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 无权限
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 数据不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/me/api-keys:
get:
tags:
- ApiKeys
summary: 'API Key 列表'
description: '列出当前用户的所有 API Keys'
operationId: c01c1650a1944005fe5b51f72bacbbd4
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { type: array, items: { properties: { id: { type: integer }, name: { type: string }, key_prefix: { type: string }, last_used_at: { type: string, format: date-time, nullable: true }, expires_at: { type: string, format: date-time, nullable: true }, enabled: { type: boolean }, created_at: { type: string, format: date-time } }, type: object } }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
post:
tags:
- ApiKeys
summary: '生成 API Key'
description: '生成新的 API Key,需用户已启用 api_key_enabled。明文仅在生成时返回一次'
operationId: 12fd3adae0626962960533c85569d1b1
requestBody:
required: true
content:
application/json:
schema:
required:
- name
properties:
name:
type: string
example: 'Production Key'
maxLength: 100
expires_at:
description: 过期时间,不传则永不过期
type: string
format: date-time
nullable: true
type: object
responses:
'200':
description: 生成成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 生成成功 }
data: { properties: { plain_key: { description: '明文 Key,仅此次可见', type: string }, api_key: { properties: { id: { type: integer }, name: { type: string }, key_prefix: { type: string }, expires_at: { type: string, format: date-time, nullable: true }, enabled: { type: boolean }, created_at: { type: string, format: date-time } }, type: object } }, type: object }
type: object
'400':
description: 参数校验失败
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: '未启用 API Key 功能'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
'/me/api-keys/{id}':
delete:
tags:
- ApiKeys
summary: '删除 API Key'
description: '删除 API Key'
operationId: 7356615676c0ac3874f8657b49154931
parameters:
-
name: id
in: path
description: 'API Key ID'
required: true
schema:
type: integer
responses:
'200':
description: 删除成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 删除成功 }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 'API Key 不存在'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/register:
post:
tags:
- Auth
summary: 用户注册
description: 注册新用户,需提供用户名、密码和邮箱
operationId: b099deca54ae9ddc3ee7e2261b6fc125
requestBody:
required: true
content:
application/json:
schema:
required:
- username
- password
- email
properties:
username:
type: string
example: new_user
maxLength: 20
minLength: 3
password:
type: string
example: Pass_1234
maxLength: 32
minLength: 6
email:
type: string
format: email
example: user@example.com
maxLength: 100
type: object
responses:
'200':
description: 注册成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 注册成功 }
data: { properties: { id: { type: integer, example: 1 }, username: { type: string, example: new_user }, email: { type: string, example: user@example.com } }, type: object }
type: object
'400':
description: 参数校验失败或唯一性冲突
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/login:
post:
tags:
- Auth
summary: 用户登录
description: '使用用户名和密码登录,返回 access_token 和 refresh_token'
operationId: 383bcb1269d6dcce4609dc1f5d3ef129
requestBody:
required: true
content:
application/json:
schema:
required:
- username
- password
properties:
username:
type: string
example: admin
password:
type: string
example: Pass_1234
type: object
responses:
'200':
description: 登录成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 登录成功 }
data: { properties: { access_token: { type: string }, refresh_token: { type: string }, token_type: { type: string, example: Bearer }, expires_in: { type: integer, example: 7200 }, user: { properties: { id: { type: integer }, username: { type: string }, email: { type: string } }, type: object } }, type: object }
type: object
'400':
description: 参数校验失败
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: 用户名或密码错误
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 账号已被禁用
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/refresh:
get:
tags:
- Auth
summary: '刷新 Access Token'
description: '使用 refresh_token 获取新的 access_token,同时轮换 refresh_token'
operationId: fc18486b361cc4791acbafd8a2f25fff
parameters:
-
name: refresh_token
in: query
description: 'Refresh Token'
required: true
schema:
type: string
responses:
'200':
description: 'Token 刷新成功'
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 'Token 刷新成功' }
data: { properties: { access_token: { type: string }, refresh_token: { type: string }, token_type: { type: string, example: Bearer }, expires_in: { type: integer, example: 7200 } }, type: object }
type: object
'400':
description: '缺少 refresh_token 参数'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: 'refresh_token 无效或已过期'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 账号已被禁用
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/me:
get:
tags:
- Auth
summary: 获取当前用户信息
description: 获取当前用户信息
operationId: f03c8d46af839b7dbd0b659647cab574
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { properties: { id: { type: integer, example: 1 }, username: { type: string, example: admin }, email: { type: string, example: admin@example.com }, status: { type: integer, example: 1 }, ext: { type: object, nullable: true }, created_at: { type: string, format: date-time } }, type: object }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/me/profile:
put:
tags:
- Auth
summary: 更新个人信息
description: '当前用户更新自己的 email 和 ext 字段'
operationId: 01c6d8f425109cd3dfff51d1d69cd55c
requestBody:
required: true
content:
application/json:
schema:
properties:
email:
type: string
format: email
example: new@example.com
maxLength: 100
ext:
type: object
example: { nickname: user }
nullable: true
type: object
responses:
'200':
description: 更新成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 个人信息更新成功 }
data: { properties: { id: { type: integer }, username: { type: string }, email: { type: string }, status: { type: integer }, ext: { type: object, nullable: true }, created_at: { type: string, format: date-time } }, type: object }
type: object
'400':
description: 参数校验失败或唯一性冲突
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/me/password:
put:
tags:
- Auth
summary: 修改密码
description: '修改当前用户密码,需验证旧密码。修改成功后清除 refresh_token,需重新登录'
operationId: c3ca37414997ba697e6c11173d9bc483
requestBody:
required: true
content:
application/json:
schema:
required:
- old_password
- new_password
properties:
old_password:
type: string
example: OldPass_1234
new_password:
type: string
example: NewPass_5678
maxLength: 32
minLength: 6
type: object
responses:
'200':
description: 密码修改成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 密码修改成功,请重新登录 }
type: object
'400':
description: 参数校验失败或旧密码不正确
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/logout:
get:
tags:
- Auth
summary: 退出登录
description: '退出登录,清除 refresh_token 并注销当前 JWT token'
operationId: dc5f3d60e870dd8b211f88cd97635158
responses:
'200':
description: 退出成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 退出成功 }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/companies:
get:
tags:
- Companies
summary: 公司列表
description: '获取公司列表,支持按 name/label 模糊搜索,受 scope 过滤'
operationId: e3e4d8f38acabbb4c061ba987d6e14dc
parameters:
-
name: name
in: query
description: '公司名称模糊搜索(匹配 name 或 label'
required: false
schema:
type: string
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { type: array, items: { properties: { id: { type: integer, example: 1 }, name: { type: string, example: acme }, label: { type: string, example: 阿克米公司 }, enabled: { type: boolean, example: true }, ext: { type: object, nullable: true }, created_at: { type: string, format: date-time }, updated_at: { type: string, format: date-time } }, type: object } }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
'/users/{id}/data-scope':
get:
tags:
- DataScope
summary: 查看用户数据权限
description: '返回用户的 scope 列表(含实体名称)和解析后的 store_ids'
operationId: 0215f552f5c2315b8b93d030ef72db76
parameters:
-
name: id
in: path
description: '用户 ID'
required: true
schema:
type: integer
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { properties: { user_id: { type: integer, example: 1 }, role: { type: string, example: admin }, scopes: { type: array, items: { properties: { scope_type: { type: string, example: company }, scope_id: { type: integer, example: 1 }, name: { type: string, example: 示例公司 } }, type: object } }, resolved_store_ids: { type: array, items: { type: integer }, example: [1, 2, 3] } }, type: object }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 用户不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
put:
tags:
- DataScope
summary: 设置用户数据权限
description: '全量替换用户的 scope 绑定,并重建 bitmap'
operationId: 4ff88235674fa406239c90406f051994
parameters:
-
name: id
in: path
description: '用户 ID'
required: true
schema:
type: integer
requestBody:
required: true
content:
application/json:
schema:
required:
- scopes
properties:
scopes:
type: array
items: { required: [scope_type, scope_id], properties: { scope_type: { type: string, example: company, enum: [company, platform, store] }, scope_id: { type: integer, example: 1 } }, type: object }
type: object
responses:
'200':
description: 数据权限更新成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 数据权限更新成功 }
type: object
'400':
description: '参数校验失败(无效 scope_type 等)'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 用户不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/platforms:
get:
tags:
- Platforms
summary: 平台列表
description: 获取全部平台列表(全局数据,不过滤)
operationId: 5ff5cb3822eee3a87c0387f6a5ad4637
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { type: array, items: { properties: { id: { type: integer, example: 1 }, developer_id: { type: integer, example: 1 }, created_at: { type: string, format: date-time }, updated_at: { type: string, format: date-time } }, type: object } }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/roles:
get:
tags:
- Roles
summary: 角色列表
description: 获取所有角色,包含每个角色的用户数
operationId: 9a543d6f94510bc9ca9208afc0b4715c
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { type: array, items: { properties: { id: { type: integer, example: 1 }, name: { type: string, example: editor }, users_count: { type: integer, example: 5 } }, type: object } }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
'/users/{id}/role':
put:
tags:
- Roles
summary: 分配用户角色
description: '为指定用户分配角色,administrator 不允许降级自己的角色'
operationId: 49884e2548d00ed9b195e873b2dd3934
parameters:
-
name: id
in: path
description: '用户 ID'
required: true
schema:
type: integer
requestBody:
required: true
content:
application/json:
schema:
required:
- role_id
properties:
role_id:
description: '角色 ID'
type: integer
example: 2
type: object
responses:
'200':
description: 角色分配成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 角色分配成功 }
data: { $ref: '#/components/schemas/User' }
type: object
'400':
description: 不允许降级自己的管理员角色
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 用户或角色不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
'/roles/{id}/route-groups':
get:
tags:
- Roles
summary: 查看角色已授权的路由组
description: 获取指定角色已授权的路由组列表
operationId: 25aba1fb2a9a4cc81e1bf06c716deda9
parameters:
-
name: id
in: path
description: '角色 ID'
required: true
schema:
type: integer
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { type: array, items: { type: object } }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 角色不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
put:
tags:
- Roles
summary: 设置角色的路由组授权
description: '全量替换指定角色的路由组授权,administrator 角色不允许修改'
operationId: 1e1f0c23e58bc994ea055407eb469a37
parameters:
-
name: id
in: path
description: '角色 ID'
required: true
schema:
type: integer
requestBody:
required: true
content:
application/json:
schema:
required:
- group_ids
properties:
group_ids:
type: array
items: { type: integer }
example: [1, 3, 5]
type: object
responses:
'200':
description: 路由组授权更新成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 路由组授权更新成功 }
data: { type: array, items: { type: object } }
type: object
'400':
description: 'administrator 角色不允许修改或参数错误'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 角色不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
'/roles/{id}/route-overrides':
get:
tags:
- Roles
summary: 查看角色的路由覆盖
description: 获取指定角色的路由覆盖列表,包含路由详情
operationId: 7766effa17b431f2bcd67b1f434ee042
parameters:
-
name: id
in: path
description: '角色 ID'
required: true
schema:
type: integer
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { type: array, items: { properties: { id: { type: integer }, role_id: { type: integer }, route_id: { type: integer }, allowed: { type: boolean }, route: { type: object } }, type: object } }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 角色不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
put:
tags:
- Roles
summary: 设置角色的路由覆盖
description: '全量替换指定角色的路由覆盖规则,administrator 角色不允许修改'
operationId: 7ab36e126b6eb4e7631cc7b51b5d2779
parameters:
-
name: id
in: path
description: '角色 ID'
required: true
schema:
type: integer
requestBody:
required: true
content:
application/json:
schema:
required:
- overrides
properties:
overrides:
type: array
items: { required: [route_id, allowed], properties: { route_id: { description: '路由 ID', type: integer, example: 12 }, allowed: { description: 是否允许, type: boolean, example: false } }, type: object }
type: object
responses:
'200':
description: 路由覆盖更新成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 路由覆盖更新成功 }
data: { type: array, items: { properties: { id: { type: integer }, role_id: { type: integer }, route_id: { type: integer }, allowed: { type: boolean }, route: { type: object } }, type: object } }
type: object
'400':
description: 'route_id 重复、不存在或 administrator 角色不允许修改'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 角色不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/route-groups:
get:
tags:
- RouteGroups
summary: 路由组列表
description: 返回所有路由组,包含每组的路由数量
operationId: dc2a90e0b1d08db3762003eac4f93598
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { type: array, items: { properties: { id: { type: integer, example: 1 }, name: { type: string, example: user-management }, label: { type: string, example: 用户管理, nullable: true }, description: { type: string, example: 用户相关路由, nullable: true }, sort_order: { type: integer, example: 0 }, routes_count: { type: integer, example: 5 }, created_at: { type: string, format: date-time } }, type: object } }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
post:
tags:
- RouteGroups
summary: 创建路由组
description: 创建路由组
operationId: 5796b5d8d366ca24bd7b850510fdc77d
requestBody:
required: true
content:
application/json:
schema:
required:
- name
properties:
name:
type: string
example: user-management
maxLength: 100
label:
type: string
example: 用户管理
nullable: true
maxLength: 200
description:
type: string
example: 用户相关路由
nullable: true
sort_order:
type: integer
example: 0
default: 0
type: object
responses:
'200':
description: 创建成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 创建成功 }
data: { properties: { id: { type: integer, example: 1 }, name: { type: string, example: user-management }, label: { type: string, example: 用户管理, nullable: true }, description: { type: string, nullable: true }, sort_order: { type: integer, example: 0 }, created_at: { type: string, format: date-time } }, type: object }
type: object
'400':
description: 参数校验失败或名称重复
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
'/route-groups/{id}':
put:
tags:
- RouteGroups
summary: 更新路由组
description: 更新路由组
operationId: 08ab6c0eb639ed8c3c7b2aa5151f3f8b
parameters:
-
name: id
in: path
description: '路由组 ID'
required: true
schema:
type: integer
requestBody:
required: true
content:
application/json:
schema:
properties:
name:
type: string
example: user-management
maxLength: 100
label:
type: string
example: 用户管理
nullable: true
maxLength: 200
description:
type: string
example: 用户相关路由
nullable: true
sort_order:
type: integer
example: 0
type: object
responses:
'200':
description: 更新成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 更新成功 }
data: { properties: { id: { type: integer, example: 1 }, name: { type: string, example: user-management }, label: { type: string, example: 用户管理, nullable: true }, description: { type: string, nullable: true }, sort_order: { type: integer, example: 0 }, created_at: { type: string, format: date-time } }, type: object }
type: object
'400':
description: 参数校验失败或名称重复
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 路由组不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
delete:
tags:
- RouteGroups
summary: 删除路由组
description: '删除路由组,组内路由 group_id 自动设为 NULLrole_route_groups 关联自动级联删除'
operationId: 2b870b541944a9318469fafc2ad83834
parameters:
-
name: id
in: path
description: '路由组 ID'
required: true
schema:
type: integer
responses:
'200':
description: 删除成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 删除成功 }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 路由组不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/routes:
get:
tags:
- RouteGroups
summary: 路由列表
description: '获取全部路由列表,含分组信息,支持按 group_id、method、path 筛选'
operationId: 06fcdb734181d39362a999d1599a5e66
parameters:
-
name: group_id
in: query
description: '路由组 ID,传 0 或 "ungrouped" 筛选未分组路由'
required: false
schema:
type: string
-
name: method
in: query
description: 'HTTP 方法筛选'
required: false
schema:
type: string
-
name: path
in: query
description: 路径模糊搜索
required: false
schema:
type: string
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { type: array, items: { properties: { id: { type: integer, example: 1 }, method: { type: string, example: GET }, path: { type: string, example: /api/v1/users }, group_id: { type: integer, example: 1, nullable: true }, group: { properties: { id: { type: integer, example: 1 }, name: { type: string, example: user-management }, label: { type: string, example: 用户管理, nullable: true } }, type: object, nullable: true } }, type: object } }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
'/routes/{id}/group':
put:
tags:
- RouteGroups
summary: 分配路由到路由组
description: '将路由分配到指定路由组,传 group_id=null 表示从分组中移出'
operationId: 10daee20cc95a281bc0bc3716df103aa
parameters:
-
name: id
in: path
description: '路由 ID'
required: true
schema:
type: integer
requestBody:
required: true
content:
application/json:
schema:
required:
- group_id
properties:
group_id:
description: '路由组 ID,传 null 移出分组'
type: integer
example: 1
nullable: true
type: object
responses:
'200':
description: 分配成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 分配成功 }
data: { properties: { id: { type: integer, example: 1 }, method: { type: string, example: GET }, path: { type: string, example: /api/v1/users }, group_id: { type: integer, example: 1, nullable: true }, group: { properties: { id: { type: integer, example: 1 }, name: { type: string, example: user-management }, label: { type: string, example: 用户管理, nullable: true } }, type: object, nullable: true } }, type: object }
type: object
'400':
description: 参数校验失败
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 路由或目标路由组不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/stores:
get:
tags:
- Stores
summary: 店铺列表
description: '获取店铺列表,受 scope 过滤,支持 company_id/platform_id 筛选及 name 模糊搜索'
operationId: 36279ef5f2735b2624e99a82ebc3dccc
parameters:
-
name: company_id
in: query
description: '按公司 ID 筛选'
required: false
schema:
type: integer
-
name: platform_id
in: query
description: '按平台 ID 筛选'
required: false
schema:
type: integer
-
name: name
in: query
description: 按店铺名称模糊搜索
required: false
schema:
type: string
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { type: array, items: { properties: { id: { type: integer, example: 1 }, company_id: { type: integer, example: 1 }, platform_id: { type: integer, example: 1 }, platform_store_id: { type: string, example: SHOP-001 }, name: { type: string, example: my-store }, label: { type: string, example: 我的店铺 }, enabled: { type: boolean, example: true }, warehouse_id: { type: integer, example: 1 }, currency_id: { type: integer, example: 1 }, timezone: { type: integer, example: 8 }, created_at: { type: string, format: date-time }, updated_at: { type: string, format: date-time } }, type: object } }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
/users:
get:
tags:
- Users
summary: 用户列表
description: '获取用户列表,支持分页、按 username/email 模糊搜索、按 status 精确筛选'
operationId: 4f028975120b69092c0eae73bb36bcac
parameters:
-
name: page
in: query
required: false
schema:
type: integer
default: 1
-
name: per_page
in: query
required: false
schema:
type: integer
default: 15
maximum: 100
-
name: username
in: query
description: 用户名模糊搜索
required: false
schema:
type: string
-
name: email
in: query
description: 邮箱模糊搜索
required: false
schema:
type: string
-
name: status
in: query
description: 状态筛选(0=禁用,1=启用)
required: false
schema:
type: integer
enum:
- 0
- 1
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { properties: { items: { type: array, items: { $ref: '#/components/schemas/User' } }, total: { type: integer, example: 100 }, page: { type: integer, example: 1 }, per_page: { type: integer, example: 15 } }, type: object }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
post:
tags:
- Users
summary: 创建用户
description: 创建用户
operationId: 0b5969ce7b77ccaa0b2e9b551e302980
requestBody:
required: true
content:
application/json:
schema:
required:
- username
- password
- email
properties:
username:
type: string
example: new_user
maxLength: 20
minLength: 3
password:
type: string
example: Pass_1234
maxLength: 32
minLength: 6
email:
type: string
format: email
example: new@example.com
maxLength: 100
status:
type: integer
default: 1
enum: [0, 1]
type: object
responses:
'200':
description: 创建成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 创建成功 }
data: { $ref: '#/components/schemas/User' }
type: object
'400':
description: 参数校验失败或唯一性冲突
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
'/users/{id}':
get:
tags:
- Users
summary: 用户详情
description: 用户详情
operationId: b0770c8ad8eb11c5493fe9643c657673
parameters:
-
name: id
in: path
description: '用户 ID'
required: true
schema:
type: integer
responses:
'200':
description: 获取成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 获取成功 }
data: { $ref: '#/components/schemas/User' }
type: object
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 用户不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
put:
tags:
- Users
summary: 更新用户信息
description: '更新用户的 username、email 或 ext 字段,不支持修改密码'
operationId: c5ee224e653aac218896c93ecc3f9b67
parameters:
-
name: id
in: path
description: '用户 ID'
required: true
schema:
type: integer
requestBody:
required: true
content:
application/json:
schema:
properties:
username:
type: string
example: updated_user
maxLength: 20
minLength: 3
email:
type: string
format: email
example: updated@example.com
maxLength: 100
ext:
type: object
example: { nickname: Tester }
nullable: true
type: object
responses:
'200':
description: 更新成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 更新成功 }
data: { $ref: '#/components/schemas/User' }
type: object
'400':
description: 参数校验失败或唯一性冲突
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 用户不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
'/users/{id}/status':
patch:
tags:
- Users
summary: 更新用户状态
description: 启用或禁用用户
operationId: c1ad72b12757d083cf0aebbf2f3787fd
parameters:
-
name: id
in: path
description: '用户 ID'
required: true
schema:
type: integer
requestBody:
required: true
content:
application/json:
schema:
required:
- status
properties:
status:
description: 0=禁用,1=启用
type: integer
enum: [0, 1]
type: object
responses:
'200':
description: 状态更新成功
content:
application/json:
schema:
properties:
code: { type: integer, example: 0 }
message: { type: string, example: 状态更新成功 }
data: { $ref: '#/components/schemas/User' }
type: object
'400':
description: 参数校验失败
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 用户不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
-
bearerAuth: []
components:
schemas:
Order:
properties:
id:
type: integer
example: 1
company_id:
type: integer
example: 1
platform_id:
type: integer
example: 2
store_id:
type: integer
example: 100
order_status_id:
type: integer
example: 1
platform_order_id:
type: string
example: ORD-20260101-001
buyer_user_id:
type: string
example: buyer_123
nullable: true
payment_method_id:
type: integer
example: 1
presale:
type: boolean
example: false
total_amount:
type: number
format: decimal
example: 199.99
total_paid:
type: number
format: decimal
example: 189.99
total_discount:
type: number
format: decimal
example: 10
total_received:
type: number
format: decimal
example: 189.99
freight_fee:
type: number
format: decimal
example: 0
tax_fee:
type: number
format: decimal
example: 0
discount_fee:
type: number
format: decimal
example: 10
commission_fee:
type: number
format: decimal
example: 5
coupon_amount:
type: number
format: decimal
example: 0
voucher_amount:
type: number
format: decimal
example: 0
order_type_id:
type: integer
example: 1
hash:
type: string
example: a1b2c3d4e5f6...
raw:
description: 平台原始数据
type: object
nullable: true
ext:
description: 扩展字段
type: object
nullable: true
created_date:
type: string
format: date-time
updated_date:
type: string
format: date-time
nullable: true
paid_date:
type: string
format: date-time
nullable: true
shipping_date:
type: string
format: date-time
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
type: object
OrderItem:
properties:
id:
type: integer
example: 1
company_id:
type: integer
example: 1
platform_id:
type: integer
example: 2
store_id:
type: integer
example: 100
order_id:
type: integer
example: 1000
platform_order_id:
type: string
example: ORD-20260101-001
sub_order_id:
type: string
example: SUB-001
nullable: true
sub_order_type_id:
type: integer
example: 1
product_id:
type: integer
example: 500
platform_product_id:
type: string
example: PROD-001
product_sku:
type: string
example: SKU-ABC-001
nullable: true
product_barcode:
type: string
example: '6901234567890'
nullable: true
unit_price:
type: number
format: decimal
example: 49.99
quantity:
type: integer
example: 2
discount:
type: number
format: decimal
example: 5
total:
type: number
format: decimal
example: 94.98
created_date:
type: string
format: date-time
ext:
description: 扩展字段
type: object
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
type: object
Product:
properties:
id:
type: integer
example: 1
company_id:
type: integer
example: 1
platform_id:
type: integer
example: 2
store_id:
type: integer
example: 100
status_id:
type: integer
example: 1
type_id:
type: integer
example: 1
platform_item_id:
type: string
example: ITEM-001
platform_model_id:
type: string
example: MODEL-A
nullable: true
name:
type: string
example: 'iPhone 16 Pro'
nullable: true
price:
type: number
format: decimal
example: 99.99
currency:
type: string
example: CNY
num:
type: integer
example: 100
hash:
type: string
example: a1b2c3d4e5f6...
raw:
description: 平台原始数据
type: object
nullable: true
ext:
description: 扩展字段
type: object
nullable: true
created_date:
type: string
format: date-time
nullable: true
updated_date:
type: string
format: date-time
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
type: object
Refund:
properties:
id:
type: integer
example: 1
company_id:
type: integer
example: 1
platform_id:
type: integer
example: 2
store_id:
type: integer
example: 100
order_id:
type: integer
example: 500
nullable: true
platform_order_id:
type: string
example: ORD-20260101-001
platform_refund_id:
type: string
example: RF-20260115-001
refund_status_id:
type: integer
example: 1
refund_type_id:
type: integer
example: 2
reason:
type: string
example: 商品质量问题
nullable: true
buyer_user_id:
type: string
example: buyer_123
nullable: true
refund_amount:
type: number
format: decimal
example: 99.99
freight_refund:
type: number
format: decimal
example: 10
refund_total:
type: number
format: decimal
example: 109.99
currency:
type: string
example: CNY
hash:
type: string
example: a1b2c3d4e5f6...
raw:
description: 平台原始数据
type: object
nullable: true
ext:
description: 扩展字段
type: object
nullable: true
order_created_date:
type: string
format: date-time
nullable: true
order_paid_date:
type: string
format: date-time
nullable: true
created_date:
type: string
format: date-time
updated_date:
type: string
format: date-time
nullable: true
completed_date:
type: string
format: date-time
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
type: object
RefundItem:
properties:
id:
type: integer
example: 1
company_id:
type: integer
example: 1
platform_id:
type: integer
example: 2
store_id:
type: integer
example: 100
refund_id:
type: integer
example: 50
platform_parent_refund_id:
type: string
example: PRF-001
nullable: true
platform_refund_id:
type: string
example: RF-ITEM-001
refund_status_id:
type: integer
example: 1
refund_type_id:
type: integer
example: 2
reason:
type: string
example: 商品质量问题
nullable: true
currency:
type: string
example: CNY
buyer_user_id:
type: string
example: buyer_123
nullable: true
platform_order_id:
type: string
example: ORD-20260101-001
platform_sub_order_id:
type: string
example: SUB-001
nullable: true
platform_product_id:
type: string
example: PROD-001
nullable: true
quantity:
type: integer
example: 1
refund_amount:
type: number
format: decimal
example: 99.99
raw:
description: 平台原始子项数据
type: object
nullable: true
ext:
description: 扩展字段
type: object
nullable: true
order_created_date:
type: string
format: date-time
nullable: true
order_paid_date:
type: string
format: date-time
nullable: true
created_date:
type: string
format: date-time
updated_date:
type: string
format: date-time
nullable: true
completed_date:
type: string
format: date-time
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
type: object
User:
properties:
id:
type: integer
example: 1
username:
type: string
example: user_1234
email:
type: string
example: user@example.com
status:
type: integer
example: 1
role_id:
type: integer
example: 1
nullable: true
api_key_enabled:
type: boolean
example: false
ext:
type: object
example:
nickname: user
nullable: true
refresh_token_expires_at:
type: string
format: date-time
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
type: object
ApiResponse:
properties:
code:
type: integer
example: 0
message:
type: string
example: success
data:
type: object
nullable: true
type: object
PaginatedData:
properties:
items:
type: array
items: { }
total:
type: integer
example: 0
page:
type: integer
example: 1
per_page:
type: integer
example: 15
type: object
ErrorResponse:
properties:
code:
type: integer
example: 400
message:
type: string
example: 'Bad request'
data:
type: object
nullable: true
type: object
2026-03-17 12:47:02 +08:00
MqQueueInfo:
description: 单个队列的状态信息
properties:
queue:
description: 队列名称
type: string
example: orders.queue
messages:
description: '消息数量(异常时为 N/A'
example: 5
oneOf:
-
type: integer
-
type: string
consumers:
description: '消费者数量(异常时为 N/A'
example: 1
oneOf:
-
type: integer
-
type: string
status:
description: 队列状态
type: string
example: active
enum:
- high_load
- processing
- active
- empty
- error
type: object
MqQueueStatus:
description: 消息队列全量状态
properties:
business_queues:
description: 业务队列列表
type: array
items:
$ref: '#/components/schemas/MqQueueInfo'
retry_queues:
description: 重试队列列表
type: array
items:
$ref: '#/components/schemas/MqQueueInfo'
error_queue:
$ref: '#/components/schemas/MqQueueInfo'
summary:
description: 汇总统计
properties:
total_messages:
description: 消息总数
type: integer
example: 7
total_consumers:
description: 消费者总数
type: integer
example: 1
type: object
fetched_at:
description: 数据获取时间
type: string
format: date-time
example: '2026-03-13 12:00:00'
type: object
FailedMessageList:
description: 失败消息列表项
properties:
id:
type: integer
example: 1
error_id:
type: string
example: err_67890abc
data_type:
type: string
example: order
enum:
- order
- product
- refund
platform:
type: string
example: Tmall
nullable: true
platform_id:
type: integer
example: 1
nullable: true
company_id:
type: integer
example: 1
nullable: true
store_id:
type: integer
example: 1
nullable: true
error_type:
type: string
example: RuntimeException
error_message:
type: string
example: 'Connection refused'
retry_count:
type: integer
example: 3
message_id:
type: string
example: msg_12345
nullable: true
failed_at:
type: string
format: date-time
created_at:
type: string
format: date-time
type: object
FailedMessageDetail:
description: 失败消息详情(含完整错误堆栈和原始消息体)
properties:
id:
type: integer
example: 1
error_id:
type: string
example: err_67890abc
data_type:
type: string
example: order
enum:
- order
- product
- refund
platform:
type: string
example: Tmall
nullable: true
platform_id:
type: integer
example: 1
nullable: true
company_id:
type: integer
example: 1
nullable: true
store_id:
type: integer
example: 1
nullable: true
error_type:
type: string
example: RuntimeException
error_message:
type: string
example: 'Connection refused'
error_code:
type: integer
example: 0
error_trace:
description: 完整异常堆栈
type: string
original_message:
description: '原始消息体 JSON'
type: object
retry_count:
type: integer
example: 3
message_id:
type: string
example: msg_12345
nullable: true
failed_at:
type: string
format: date-time
created_at:
type: string
format: date-time
type: object
DashboardOverview:
description: 'Dashboard 概览统计'
properties:
today:
description: 今日统计
properties:
success:
type: integer
example: 120
failed:
type: integer
example: 3
type: object
this_week:
description: 本周统计
properties:
success:
type: integer
example: 850
failed:
type: integer
example: 15
type: object
this_month:
description: 本月统计
properties:
success:
type: integer
example: 3200
failed:
type: integer
example: 42
type: object
by_type:
description: 按数据类型分组统计(本月窗口)
type: array
items:
properties:
data_type:
type: string
example: order
enum:
- order
- product
- refund
- inventory
success:
type: integer
example: 1000
failed:
type: integer
example: 10
type: object
type: object
DashboardTrendItem:
description: 趋势数据点
properties:
date:
type: string
format: date
example: '2026-03-17'
success:
type: integer
example: 120
failed:
type: integer
example: 3
type: object
DashboardBreakdownItem:
description: 分组统计项
properties:
id:
description: '维度 ID(公司/平台/店铺)'
type: integer
example: 1
name:
description: 维度名称
type: string
example: Tmall
success:
type: integer
example: 500
failed:
type: integer
example: 8
type: object
ApiRequestLogList:
description: 'API 请求日志列表项'
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
nullable: true
method:
type: string
example: GET
path:
type: string
example: /api/v1/users
status_code:
type: integer
example: 200
ip:
type: string
example: 127.0.0.1
nullable: true
response_code:
type: integer
example: 0
nullable: true
duration_ms:
type: integer
example: 42
created_at:
type: string
format: date-time
type: object
ApiRequestLogDetail:
description: 'API 请求日志详情(含完整请求体和 User-Agent'
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
nullable: true
method:
type: string
example: POST
path:
type: string
example: /api/v1/users
status_code:
type: integer
example: 200
ip:
type: string
example: 127.0.0.1
nullable: true
user_agent:
type: string
example: Mozilla/5.0
nullable: true
request_body:
description: 请求体(脱敏后)
type: object
nullable: true
response_code:
type: integer
example: 0
nullable: true
duration_ms:
type: integer
example: 42
created_at:
type: string
format: date-time
type: object
2026-03-17 15:55:20 +08:00
OperationLogList:
description: 操作日志列表项
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
action:
type: string
example: user.create
target_type:
type: string
example: user
target_id:
type: integer
example: 5
nullable: true
description:
type: string
example: '创建用户 test_user'
ip:
type: string
example: 127.0.0.1
nullable: true
created_at:
type: string
format: date-time
type: object
OperationLogDetail:
description: '操作日志详情(含完整操作详情 JSON)'
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
action:
type: string
example: user.create
target_type:
type: string
example: user
target_id:
type: integer
example: 5
nullable: true
description:
type: string
example: '创建用户 test_user'
detail:
description: '操作详情 JSON'
type: object
nullable: true
ip:
type: string
example: 127.0.0.1
nullable: true
created_at:
type: string
format: date-time
type: object
2026-03-13 13:50:56 +08:00
securitySchemes:
bearerAuth:
type: http
bearerFormat: JWT
scheme: bearer
apiKeyAuth:
type: apiKey
name: X-API-Key
in: header
tags:
2026-03-17 12:47:02 +08:00
-
name: Dashboard
description: 'Dashboard 数据同步统计'
-
name: 'Failed Messages'
description: 失败消息查看
-
name: 'MQ Status'
description: 消息队列状态监控
2026-03-17 15:55:20 +08:00
-
name: 'Operation Logs'
description: 操作日志查看
2026-03-13 13:50:56 +08:00
-
name: Orders
description: 订单管理
-
name: 'Order Items'
description: 订单项管理
-
name: Products
description: 产品管理
-
name: 'Orders (Raw)'
description: 订单原始数据
-
name: 'Products (Raw)'
description: 产品原始数据
-
name: 'Refunds (Raw)'
description: 退款原始数据
-
name: 'Refund Items (Raw)'
description: 退款项原始数据
-
name: Refunds
description: 退款管理
-
name: 'Refund Items'
description: 退款项管理
2026-03-17 12:47:02 +08:00
-
name: 'Request Logs'
description: 'API 请求日志查看'
2026-03-13 13:50:56 +08:00
-
name: ApiKeys
description: 'API Key 管理'
-
name: Auth
description: 认证与个人信息
-
name: Companies
description: 公司管理
-
name: DataScope
description: 用户数据范围管理
-
name: Platforms
description: 平台管理
-
name: Roles
description: 角色与授权管理
-
name: RouteGroups
description: 路由组管理
-
name: Stores
description: 店铺管理
-
name: Users
description: 用户管理