mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-29 14:06:36 +08:00
ae3b792e16
- add util.Go with panic recovery for background goroutines - add util.EscapeLike and explicit ESCAPE clause for SQL LIKE queries - add DummyCheckPassword and subtle.ConstantTimeCompare against timing attacks - enforce session ID rotation upon login/oauth callback to prevent session fixation - add sliding window login failure rate limiting and oauth state rate limiting - fix redis client capture race in pubsub listeners and wait on stop channel - adjust global --primary to oklch(51.1% 0.262 276.966) for WCAG AA contrast - fix semantic heading levels and missing aria-labels across UI components - document security, concurrency, and a11y standards in AGENTS.md
5226 lines
134 KiB
YAML
5226 lines
134 KiB
YAML
basePath: /
|
||
definitions:
|
||
auth_source.AuthSourceRequest:
|
||
properties:
|
||
client_id:
|
||
type: string
|
||
client_secret:
|
||
type: string
|
||
display_name:
|
||
type: string
|
||
icon_url:
|
||
type: string
|
||
is_active:
|
||
type: boolean
|
||
name:
|
||
type: string
|
||
openid_discovery_url:
|
||
type: string
|
||
scopes:
|
||
type: string
|
||
type:
|
||
type: string
|
||
type: object
|
||
auth_source.ToggleAuthSourceRequest:
|
||
properties:
|
||
is_active:
|
||
type: boolean
|
||
type: object
|
||
cache.updateCacheConfigRequest:
|
||
properties:
|
||
lru_enabled:
|
||
type: boolean
|
||
max_size_mb:
|
||
minimum: 1
|
||
type: integer
|
||
ttl_minutes:
|
||
minimum: 0
|
||
type: integer
|
||
required:
|
||
- max_size_mb
|
||
- ttl_minutes
|
||
type: object
|
||
cap.challengeRequest:
|
||
properties:
|
||
scope:
|
||
type: string
|
||
type: object
|
||
cap.redeemRequest:
|
||
properties:
|
||
scope:
|
||
type: string
|
||
solutions:
|
||
items:
|
||
type: integer
|
||
type: array
|
||
token:
|
||
type: string
|
||
required:
|
||
- solutions
|
||
- token
|
||
type: object
|
||
db_manage.DBOverviewResponse:
|
||
properties:
|
||
connections:
|
||
type: integer
|
||
name:
|
||
type: string
|
||
size:
|
||
type: string
|
||
table_count:
|
||
type: integer
|
||
type:
|
||
type: string
|
||
version:
|
||
type: string
|
||
type: object
|
||
db_manage.ExecuteSQLRequest:
|
||
properties:
|
||
sql:
|
||
type: string
|
||
required:
|
||
- sql
|
||
type: object
|
||
db_manage.ExecuteSQLResponse:
|
||
properties:
|
||
affected_rows:
|
||
type: integer
|
||
columns:
|
||
items:
|
||
type: string
|
||
type: array
|
||
execution_time_ms:
|
||
type: integer
|
||
results:
|
||
items:
|
||
additionalProperties: true
|
||
type: object
|
||
type: array
|
||
type:
|
||
description: '"select" 或 "exec"'
|
||
type: string
|
||
type: object
|
||
diskcache.Status:
|
||
properties:
|
||
base_path:
|
||
type: string
|
||
keys_count:
|
||
type: integer
|
||
lru_enabled:
|
||
type: boolean
|
||
max_size_mb:
|
||
type: integer
|
||
total_size:
|
||
type: integer
|
||
ttl_minutes:
|
||
type: integer
|
||
type: object
|
||
github_com_Rain-kl_Wavelet_internal_apps_cap.ChallengeResponse:
|
||
properties:
|
||
challenge:
|
||
properties:
|
||
c:
|
||
type: integer
|
||
d:
|
||
type: integer
|
||
s:
|
||
type: integer
|
||
type: object
|
||
expires:
|
||
description: ms timestamp
|
||
type: integer
|
||
token:
|
||
type: string
|
||
type: object
|
||
github_com_Rain-kl_Wavelet_internal_apps_cap.RedeemResponse:
|
||
properties:
|
||
error:
|
||
type: string
|
||
expires:
|
||
type: integer
|
||
success:
|
||
type: boolean
|
||
token:
|
||
type: string
|
||
type: object
|
||
handler.batchDownloadRequest:
|
||
properties:
|
||
ids:
|
||
items:
|
||
type: string
|
||
minItems: 1
|
||
type: array
|
||
required:
|
||
- ids
|
||
type: object
|
||
handler.distributionItem:
|
||
properties:
|
||
count:
|
||
type: integer
|
||
name:
|
||
type: string
|
||
size:
|
||
type: integer
|
||
type: object
|
||
handler.fileStatsResponse:
|
||
properties:
|
||
categories:
|
||
items:
|
||
$ref: '#/definitions/handler.distributionItem'
|
||
type: array
|
||
total_count:
|
||
type: integer
|
||
total_size:
|
||
type: integer
|
||
trend:
|
||
items:
|
||
$ref: '#/definitions/handler.trendItem'
|
||
type: array
|
||
types:
|
||
items:
|
||
$ref: '#/definitions/handler.distributionItem'
|
||
type: array
|
||
type: object
|
||
handler.listFilesResponse:
|
||
properties:
|
||
items:
|
||
items:
|
||
$ref: '#/definitions/model.Upload'
|
||
type: array
|
||
page:
|
||
type: integer
|
||
page_size:
|
||
type: integer
|
||
total:
|
||
type: integer
|
||
type: object
|
||
handler.listMyFilesResponse:
|
||
properties:
|
||
items:
|
||
items:
|
||
$ref: '#/definitions/model.Upload'
|
||
type: array
|
||
page:
|
||
type: integer
|
||
page_size:
|
||
type: integer
|
||
total:
|
||
type: integer
|
||
type: object
|
||
handler.trendItem:
|
||
properties:
|
||
count:
|
||
type: integer
|
||
date:
|
||
type: string
|
||
size:
|
||
type: integer
|
||
type: object
|
||
handler.updateMyFileRequest:
|
||
properties:
|
||
access_mode:
|
||
enum:
|
||
- 0
|
||
- 1
|
||
type: integer
|
||
file_name:
|
||
maxLength: 255
|
||
type: string
|
||
type: object
|
||
logger.LogEntry:
|
||
properties:
|
||
data:
|
||
description: 一行日志原文(含换行符)
|
||
type: string
|
||
index:
|
||
description: 全局递增序号
|
||
type: integer
|
||
type: object
|
||
logs.accessLogItem:
|
||
properties:
|
||
created_at:
|
||
type: string
|
||
headers:
|
||
type: string
|
||
id:
|
||
example: "0"
|
||
type: string
|
||
ip:
|
||
type: string
|
||
latency:
|
||
type: integer
|
||
method:
|
||
type: string
|
||
nickname:
|
||
type: string
|
||
path:
|
||
type: string
|
||
status:
|
||
type: integer
|
||
user_agent:
|
||
type: string
|
||
user_id:
|
||
example: "0"
|
||
type: string
|
||
username:
|
||
type: string
|
||
type: object
|
||
logs.accessLogsResponse:
|
||
properties:
|
||
list:
|
||
items:
|
||
$ref: '#/definitions/logs.accessLogItem'
|
||
type: array
|
||
total:
|
||
type: integer
|
||
type: object
|
||
logs.browserItem:
|
||
properties:
|
||
browser:
|
||
type: string
|
||
count:
|
||
type: integer
|
||
type: object
|
||
logs.logsAnalyticsResponse:
|
||
properties:
|
||
browsers:
|
||
items:
|
||
$ref: '#/definitions/logs.browserItem'
|
||
type: array
|
||
top_users:
|
||
items:
|
||
$ref: '#/definitions/logs.topUserItem'
|
||
type: array
|
||
trend:
|
||
items:
|
||
$ref: '#/definitions/logs.trendItem'
|
||
type: array
|
||
type: object
|
||
logs.logsResponse:
|
||
properties:
|
||
has_more:
|
||
type: boolean
|
||
lines:
|
||
items:
|
||
$ref: '#/definitions/logger.LogEntry'
|
||
type: array
|
||
next_cursor:
|
||
description: 用于加载更早日志的 cursor
|
||
type: integer
|
||
type: object
|
||
logs.topUserItem:
|
||
properties:
|
||
count:
|
||
type: integer
|
||
nickname:
|
||
type: string
|
||
user_id:
|
||
example: "0"
|
||
type: string
|
||
username:
|
||
type: string
|
||
type: object
|
||
logs.trendItem:
|
||
properties:
|
||
count:
|
||
type: integer
|
||
date:
|
||
type: string
|
||
type: object
|
||
message_gateway.BindRequest:
|
||
properties:
|
||
channel_id:
|
||
type: string
|
||
code:
|
||
type: string
|
||
type: object
|
||
message_gateway.BindingDTO:
|
||
properties:
|
||
channel_id:
|
||
example: "0"
|
||
type: string
|
||
channel_name:
|
||
type: string
|
||
channel_type:
|
||
type: string
|
||
created_at:
|
||
type: string
|
||
id:
|
||
example: "0"
|
||
type: string
|
||
platform_user_id:
|
||
type: string
|
||
user_id:
|
||
example: "0"
|
||
type: string
|
||
type: object
|
||
message_gateway.ChannelDTO:
|
||
properties:
|
||
app_id:
|
||
type: string
|
||
app_secret:
|
||
type: string
|
||
base_url:
|
||
type: string
|
||
bot_token:
|
||
type: string
|
||
created_at:
|
||
type: string
|
||
enabled:
|
||
type: boolean
|
||
id:
|
||
example: "0"
|
||
type: string
|
||
name:
|
||
type: string
|
||
owner_scope:
|
||
type: string
|
||
portal_host:
|
||
type: string
|
||
type:
|
||
type: string
|
||
updated_at:
|
||
type: string
|
||
type: object
|
||
message_gateway.CreateChannelRequest:
|
||
properties:
|
||
app_id:
|
||
type: string
|
||
app_secret:
|
||
type: string
|
||
base_url:
|
||
type: string
|
||
bot_token:
|
||
type: string
|
||
enabled:
|
||
type: boolean
|
||
name:
|
||
type: string
|
||
portal_host:
|
||
type: string
|
||
sandbox:
|
||
type: string
|
||
type:
|
||
type: string
|
||
type: object
|
||
message_gateway.Definition:
|
||
properties:
|
||
fields:
|
||
items:
|
||
$ref: '#/definitions/message_gateway.Field'
|
||
type: array
|
||
name:
|
||
type: string
|
||
type:
|
||
type: string
|
||
type: object
|
||
message_gateway.Field:
|
||
properties:
|
||
key:
|
||
type: string
|
||
required:
|
||
type: boolean
|
||
type:
|
||
type: string
|
||
type: object
|
||
message_gateway.PublicChannelDTO:
|
||
properties:
|
||
id:
|
||
example: "0"
|
||
type: string
|
||
name:
|
||
type: string
|
||
type:
|
||
type: string
|
||
type: object
|
||
message_gateway.UpdateChannelRequest:
|
||
properties:
|
||
app_id:
|
||
type: string
|
||
app_secret:
|
||
type: string
|
||
base_url:
|
||
type: string
|
||
bot_token:
|
||
type: string
|
||
enabled:
|
||
type: boolean
|
||
name:
|
||
type: string
|
||
portal_host:
|
||
type: string
|
||
sandbox:
|
||
type: string
|
||
type: object
|
||
model.AccessToken:
|
||
properties:
|
||
created_at:
|
||
type: string
|
||
id:
|
||
type: integer
|
||
is_admin:
|
||
type: boolean
|
||
masked_token:
|
||
type: string
|
||
name:
|
||
type: string
|
||
updated_at:
|
||
type: string
|
||
user_id:
|
||
type: integer
|
||
type: object
|
||
model.AuthSource:
|
||
properties:
|
||
client_id:
|
||
type: string
|
||
client_secret_configured:
|
||
type: boolean
|
||
created_at:
|
||
type: string
|
||
display_name:
|
||
type: string
|
||
icon_url:
|
||
type: string
|
||
id:
|
||
type: integer
|
||
is_active:
|
||
type: boolean
|
||
name:
|
||
type: string
|
||
openid_discovery_url:
|
||
type: string
|
||
scopes:
|
||
type: string
|
||
type:
|
||
type: string
|
||
updated_at:
|
||
type: string
|
||
type: object
|
||
model.ExternalAccountView:
|
||
properties:
|
||
auth_source_id:
|
||
type: integer
|
||
auth_source_label:
|
||
type: string
|
||
auth_source_name:
|
||
type: string
|
||
auth_source_type:
|
||
type: string
|
||
created_at:
|
||
type: string
|
||
email:
|
||
type: string
|
||
external_username:
|
||
type: string
|
||
id:
|
||
type: integer
|
||
type: object
|
||
model.PushChannel:
|
||
properties:
|
||
created_at:
|
||
type: string
|
||
description:
|
||
description: 备注
|
||
type: string
|
||
enabled:
|
||
description: 通道是否启用
|
||
type: boolean
|
||
id:
|
||
type: integer
|
||
name:
|
||
description: 通道名称,仅英文字母和下划线,唯一
|
||
type: string
|
||
other:
|
||
description: 请求体/SMTP 密码等
|
||
type: string
|
||
token:
|
||
description: 鉴权令牌或发信用户名等
|
||
type: string
|
||
type:
|
||
description: 通道类型:custom, lark, email
|
||
type: string
|
||
updated_at:
|
||
type: string
|
||
url:
|
||
description: 请求地址,HTTPS 协议或 SMTP 地址
|
||
type: string
|
||
type: object
|
||
model.PushEvent:
|
||
properties:
|
||
channels:
|
||
description: 推送渠道列表,如 ["lark"]
|
||
items:
|
||
type: string
|
||
type: array
|
||
created_at:
|
||
type: string
|
||
enabled:
|
||
description: 是否启用
|
||
type: boolean
|
||
event_key:
|
||
description: 如 admin_login
|
||
type: string
|
||
id:
|
||
type: integer
|
||
name:
|
||
description: 如 管理员登录
|
||
type: string
|
||
targets:
|
||
description: 推送目标用户/邮箱列表
|
||
items:
|
||
type: string
|
||
type: array
|
||
task_type:
|
||
description: 关联的异步任务类型
|
||
type: string
|
||
template:
|
||
description: 消息模板 JSON
|
||
type: string
|
||
updated_at:
|
||
type: string
|
||
type: object
|
||
model.PushHistory:
|
||
properties:
|
||
channel:
|
||
type: string
|
||
content:
|
||
type: string
|
||
created_at:
|
||
type: string
|
||
error_msg:
|
||
type: string
|
||
event_key:
|
||
type: string
|
||
id:
|
||
type: integer
|
||
level:
|
||
type: string
|
||
status:
|
||
description: success / failed
|
||
type: string
|
||
target:
|
||
type: string
|
||
title:
|
||
type: string
|
||
type: object
|
||
model.Schedule:
|
||
properties:
|
||
created_at:
|
||
type: string
|
||
cron:
|
||
type: string
|
||
id:
|
||
example: "0"
|
||
type: string
|
||
is_active:
|
||
type: boolean
|
||
name:
|
||
type: string
|
||
payload:
|
||
type: string
|
||
task_type:
|
||
type: string
|
||
updated_at:
|
||
type: string
|
||
type: object
|
||
model.SystemConfig:
|
||
properties:
|
||
created_at:
|
||
type: string
|
||
description:
|
||
type: string
|
||
key:
|
||
type: string
|
||
type:
|
||
type: string
|
||
updated_at:
|
||
type: string
|
||
value:
|
||
type: string
|
||
visibility:
|
||
type: integer
|
||
type: object
|
||
model.TaskExecution:
|
||
properties:
|
||
created_at:
|
||
type: string
|
||
duration:
|
||
type: integer
|
||
error_message:
|
||
type: string
|
||
finished_at:
|
||
type: string
|
||
id:
|
||
example: "0"
|
||
type: string
|
||
log:
|
||
type: string
|
||
max_retry:
|
||
type: integer
|
||
payload:
|
||
type: string
|
||
result:
|
||
type: string
|
||
retry_count:
|
||
type: integer
|
||
retryable:
|
||
type: boolean
|
||
started_at:
|
||
type: string
|
||
status:
|
||
$ref: '#/definitions/model.TaskExecutionStatus'
|
||
task_id:
|
||
type: string
|
||
task_name:
|
||
type: string
|
||
task_type:
|
||
type: string
|
||
triggered_by:
|
||
type: string
|
||
updated_at:
|
||
type: string
|
||
type: object
|
||
model.TaskExecutionStatus:
|
||
enum:
|
||
- pending
|
||
- running
|
||
- succeeded
|
||
- failed
|
||
type: string
|
||
x-enum-varnames:
|
||
- TaskExecutionStatusPending
|
||
- TaskExecutionStatusRunning
|
||
- TaskExecutionStatusSucceeded
|
||
- TaskExecutionStatusFailed
|
||
model.Template:
|
||
properties:
|
||
content:
|
||
type: string
|
||
created_at:
|
||
type: string
|
||
description:
|
||
type: string
|
||
id:
|
||
type: integer
|
||
is_system:
|
||
type: boolean
|
||
key:
|
||
type: string
|
||
name:
|
||
type: string
|
||
subject:
|
||
type: string
|
||
type:
|
||
type: string
|
||
updated_at:
|
||
type: string
|
||
type: object
|
||
model.Upload:
|
||
properties:
|
||
access_mode:
|
||
type: integer
|
||
created_at:
|
||
type: string
|
||
extension:
|
||
description: 文件后缀名 (不含点,如 png, pdf)
|
||
type: string
|
||
file_name:
|
||
description: '原始文件名 (例如: image.png)'
|
||
type: string
|
||
file_path:
|
||
description: 文件相对路径 / S3 Key
|
||
type: string
|
||
file_size:
|
||
description: 文件大小(字节)
|
||
type: integer
|
||
hash:
|
||
description: 文件哈希 (SHA-256/MD5,可用于排重)
|
||
type: string
|
||
id:
|
||
example: "0"
|
||
type: string
|
||
metadata:
|
||
allOf:
|
||
- $ref: '#/definitions/model.UploadMetadata'
|
||
description: 业务扩展元数据
|
||
mime_type:
|
||
description: 媒体类型 (MIME, 如 image/png)
|
||
type: string
|
||
status:
|
||
allOf:
|
||
- $ref: '#/definitions/model.UploadStatus'
|
||
description: 状态
|
||
type:
|
||
description: 业务标识类型 (如 avatar, doc, attachment)
|
||
type: string
|
||
updated_at:
|
||
type: string
|
||
user_id:
|
||
example: "0"
|
||
type: string
|
||
type: object
|
||
model.UploadMetadata:
|
||
properties:
|
||
bucket:
|
||
description: 存储桶名称 (适用于 S3 等)
|
||
type: string
|
||
client_ip:
|
||
description: 上传者 IP
|
||
type: string
|
||
duration:
|
||
description: 音视频时长 (s)
|
||
type: number
|
||
extra:
|
||
additionalProperties: {}
|
||
description: 其它任意业务自定义元数据
|
||
type: object
|
||
height:
|
||
description: 图像/视频高度 (px)
|
||
type: integer
|
||
original_mime:
|
||
description: 原始 MIME 类型
|
||
type: string
|
||
user_agent:
|
||
description: 上传者的 UA
|
||
type: string
|
||
width:
|
||
description: 图像/视频宽度 (px)
|
||
type: integer
|
||
type: object
|
||
model.UploadStatus:
|
||
enum:
|
||
- pending
|
||
- used
|
||
- deleted
|
||
type: string
|
||
x-enum-comments:
|
||
UploadStatusDeleted: 已删除
|
||
UploadStatusPending: 待使用
|
||
UploadStatusUsed: 已使用
|
||
x-enum-descriptions:
|
||
- 待使用
|
||
- 已使用
|
||
- 已删除
|
||
x-enum-varnames:
|
||
- UploadStatusPending
|
||
- UploadStatusUsed
|
||
- UploadStatusDeleted
|
||
oauth.AuthSourceView:
|
||
properties:
|
||
client_secret_configured:
|
||
type: boolean
|
||
display_name:
|
||
type: string
|
||
icon_url:
|
||
type: string
|
||
id:
|
||
type: integer
|
||
is_active:
|
||
type: boolean
|
||
name:
|
||
type: string
|
||
type:
|
||
type: string
|
||
type: object
|
||
oauth.BasicUserInfo:
|
||
properties:
|
||
avatar_url:
|
||
type: string
|
||
bio:
|
||
type: string
|
||
email:
|
||
type: string
|
||
gender:
|
||
type: string
|
||
id:
|
||
type: integer
|
||
is_admin:
|
||
type: boolean
|
||
location:
|
||
type: string
|
||
need_change_password:
|
||
type: boolean
|
||
nickname:
|
||
type: string
|
||
phone:
|
||
type: string
|
||
username:
|
||
type: string
|
||
website:
|
||
type: string
|
||
type: object
|
||
oauth.CallbackRequest:
|
||
properties:
|
||
code:
|
||
type: string
|
||
state:
|
||
type: string
|
||
required:
|
||
- code
|
||
- state
|
||
type: object
|
||
oauth.OAuthAuthorizeResponse:
|
||
properties:
|
||
authorize_url:
|
||
type: string
|
||
type: object
|
||
oauth.OAuthCallbackResult:
|
||
properties:
|
||
status:
|
||
type: string
|
||
user:
|
||
$ref: '#/definitions/oauth.BasicUserInfo'
|
||
type: object
|
||
push.Config:
|
||
properties:
|
||
channel:
|
||
description: 渠道名称,例如 "lark", "custom", "email" 等,唯一标识
|
||
type: string
|
||
ext:
|
||
additionalProperties: {}
|
||
description: 预留拓展 JSON 配置
|
||
type: object
|
||
key:
|
||
description: AppID 或 SMTP 用户名
|
||
type: string
|
||
secret:
|
||
description: 签名密钥或 SMTP 密码/Token
|
||
type: string
|
||
url:
|
||
description: Webhook 地址或 SMTP 地址
|
||
type: string
|
||
type: object
|
||
push.CreateChannelRequest:
|
||
properties:
|
||
description:
|
||
type: string
|
||
enabled:
|
||
type: boolean
|
||
name:
|
||
type: string
|
||
other:
|
||
type: string
|
||
token:
|
||
type: string
|
||
type:
|
||
type: string
|
||
url:
|
||
type: string
|
||
required:
|
||
- name
|
||
- type
|
||
type: object
|
||
push.CreateEventRequest:
|
||
properties:
|
||
channels:
|
||
items:
|
||
type: string
|
||
type: array
|
||
enabled:
|
||
type: boolean
|
||
event_key:
|
||
type: string
|
||
targets:
|
||
items:
|
||
type: string
|
||
type: array
|
||
task_type:
|
||
description: 关联的异步任务类型
|
||
type: string
|
||
template:
|
||
type: string
|
||
type: object
|
||
push.Definition:
|
||
properties:
|
||
description:
|
||
description: short description
|
||
type: string
|
||
fields:
|
||
description: form fields
|
||
items:
|
||
$ref: '#/definitions/push.Field'
|
||
type: array
|
||
name:
|
||
description: display name
|
||
type: string
|
||
type:
|
||
description: channel type (e.g., custom, lark, email)
|
||
type: string
|
||
type: object
|
||
push.EventMetadata:
|
||
properties:
|
||
default_template:
|
||
$ref: '#/definitions/push.NotificationMessage'
|
||
description:
|
||
type: string
|
||
key:
|
||
type: string
|
||
name:
|
||
type: string
|
||
type: object
|
||
push.Field:
|
||
properties:
|
||
description:
|
||
description: field explanation/help text
|
||
type: string
|
||
key:
|
||
description: unique key for the field (e.g. url, token, other)
|
||
type: string
|
||
label:
|
||
description: human readable label (e.g. "Webhook 地址")
|
||
type: string
|
||
placeholder:
|
||
description: input placeholder
|
||
type: string
|
||
required:
|
||
description: whether this field is required
|
||
type: boolean
|
||
type:
|
||
description: 'input type: "text" | "password" | "textarea"'
|
||
type: string
|
||
type: object
|
||
push.NotificationMessage:
|
||
properties:
|
||
content:
|
||
type: string
|
||
ext:
|
||
additionalProperties: {}
|
||
type: object
|
||
level:
|
||
type: string
|
||
title:
|
||
type: string
|
||
type: object
|
||
push.TestChannelRequest:
|
||
properties:
|
||
name:
|
||
type: string
|
||
other:
|
||
type: string
|
||
target:
|
||
type: string
|
||
token:
|
||
type: string
|
||
type:
|
||
type: string
|
||
url:
|
||
type: string
|
||
type: object
|
||
push.TestPushRequest:
|
||
properties:
|
||
config:
|
||
$ref: '#/definitions/push.Config'
|
||
target:
|
||
type: string
|
||
required:
|
||
- config
|
||
type: object
|
||
push.UpdateChannelRequest:
|
||
properties:
|
||
description:
|
||
type: string
|
||
enabled:
|
||
type: boolean
|
||
other:
|
||
type: string
|
||
token:
|
||
type: string
|
||
type:
|
||
type: string
|
||
url:
|
||
type: string
|
||
required:
|
||
- type
|
||
type: object
|
||
push.UpdateEventRequest:
|
||
properties:
|
||
channels:
|
||
items:
|
||
type: string
|
||
type: array
|
||
enabled:
|
||
type: boolean
|
||
targets:
|
||
items:
|
||
type: string
|
||
type: array
|
||
template:
|
||
type: string
|
||
required:
|
||
- template
|
||
type: object
|
||
push.pushHistoriesResponse:
|
||
properties:
|
||
results:
|
||
items:
|
||
$ref: '#/definitions/model.PushHistory'
|
||
type: array
|
||
total:
|
||
type: integer
|
||
type: object
|
||
response.Any:
|
||
properties:
|
||
data: {}
|
||
error_msg:
|
||
example: ""
|
||
type: string
|
||
type: object
|
||
status.DatabaseInfoResponse:
|
||
properties:
|
||
name:
|
||
type: string
|
||
type:
|
||
type: string
|
||
version:
|
||
type: string
|
||
type: object
|
||
status.LogDatabaseStatus:
|
||
properties:
|
||
active_database:
|
||
type: string
|
||
available_targets:
|
||
items:
|
||
type: string
|
||
type: array
|
||
migration:
|
||
type: string
|
||
retention_days:
|
||
additionalProperties:
|
||
type: integer
|
||
type: object
|
||
type: object
|
||
status.SystemStatusResponse:
|
||
properties:
|
||
alloc:
|
||
type: string
|
||
buck_hash_sys:
|
||
type: string
|
||
frees:
|
||
type: integer
|
||
gc_sys:
|
||
type: string
|
||
heap_alloc:
|
||
type: string
|
||
heap_idle:
|
||
type: string
|
||
heap_inuse:
|
||
type: string
|
||
heap_objects:
|
||
type: integer
|
||
heap_released:
|
||
type: string
|
||
heap_sys:
|
||
type: string
|
||
last_gc_time:
|
||
type: string
|
||
last_pause:
|
||
type: string
|
||
lookups:
|
||
type: integer
|
||
mallocs:
|
||
type: integer
|
||
mcache_inuse:
|
||
type: string
|
||
mcache_sys:
|
||
type: string
|
||
mspan_inuse:
|
||
type: string
|
||
mspan_sys:
|
||
type: string
|
||
next_gc:
|
||
type: string
|
||
num_gc:
|
||
type: integer
|
||
num_goroutine:
|
||
type: integer
|
||
other_sys:
|
||
type: string
|
||
pause_total_ns:
|
||
type: string
|
||
stack_inuse:
|
||
type: string
|
||
stack_sys:
|
||
type: string
|
||
sys:
|
||
type: string
|
||
total_alloc:
|
||
type: string
|
||
uptime:
|
||
type: string
|
||
type: object
|
||
system_config.CreateSystemConfigRequest:
|
||
properties:
|
||
description:
|
||
maxLength: 255
|
||
type: string
|
||
key:
|
||
maxLength: 64
|
||
type: string
|
||
type:
|
||
enum:
|
||
- system
|
||
- business
|
||
type: string
|
||
value:
|
||
type: string
|
||
visibility:
|
||
enum:
|
||
- 0
|
||
- 1
|
||
type: integer
|
||
required:
|
||
- key
|
||
- type
|
||
- value
|
||
type: object
|
||
system_config.TestSMTPRequest:
|
||
properties:
|
||
smtp_host:
|
||
maxLength: 255
|
||
type: string
|
||
smtp_password:
|
||
maxLength: 255
|
||
type: string
|
||
smtp_port:
|
||
type: integer
|
||
smtp_username:
|
||
maxLength: 255
|
||
type: string
|
||
to:
|
||
type: string
|
||
required:
|
||
- smtp_host
|
||
- smtp_password
|
||
- smtp_port
|
||
- smtp_username
|
||
- to
|
||
type: object
|
||
system_config.TestSMTPResponse:
|
||
properties:
|
||
error:
|
||
type: string
|
||
log:
|
||
type: string
|
||
success:
|
||
type: boolean
|
||
type: object
|
||
system_config.UpdateSystemConfigRequest:
|
||
properties:
|
||
description:
|
||
maxLength: 255
|
||
type: string
|
||
value:
|
||
type: string
|
||
visibility:
|
||
enum:
|
||
- 0
|
||
- 1
|
||
type: integer
|
||
required:
|
||
- value
|
||
type: object
|
||
task.CreateScheduleRequest:
|
||
properties:
|
||
cron:
|
||
type: string
|
||
is_active:
|
||
type: boolean
|
||
name:
|
||
type: string
|
||
payload:
|
||
type: string
|
||
task_type:
|
||
type: string
|
||
required:
|
||
- cron
|
||
- is_active
|
||
- name
|
||
- task_type
|
||
type: object
|
||
task.DispatchTaskRequest:
|
||
properties:
|
||
end_time:
|
||
type: string
|
||
payload:
|
||
type: string
|
||
start_time:
|
||
type: string
|
||
task_type:
|
||
type: string
|
||
user_id:
|
||
type: integer
|
||
required:
|
||
- task_type
|
||
type: object
|
||
task.TaskMeta:
|
||
properties:
|
||
asynq_task:
|
||
type: string
|
||
description:
|
||
type: string
|
||
max_retry:
|
||
type: integer
|
||
name:
|
||
type: string
|
||
params:
|
||
items:
|
||
$ref: '#/definitions/task.TaskParam'
|
||
type: array
|
||
queue:
|
||
type: string
|
||
retryable:
|
||
description: 是否支持手动重试
|
||
type: boolean
|
||
supports_time:
|
||
type: boolean
|
||
type:
|
||
type: string
|
||
type: object
|
||
task.TaskParam:
|
||
properties:
|
||
description:
|
||
description: 描述
|
||
type: string
|
||
label:
|
||
description: 显示名称
|
||
type: string
|
||
name:
|
||
description: 参数键名
|
||
type: string
|
||
placeholder:
|
||
description: 占位符
|
||
type: string
|
||
required:
|
||
description: 是否必填
|
||
type: boolean
|
||
type:
|
||
description: 类型:string, text, number, boolean
|
||
type: string
|
||
type: object
|
||
task.UpdateScheduleRequest:
|
||
properties:
|
||
cron:
|
||
type: string
|
||
is_active:
|
||
type: boolean
|
||
name:
|
||
type: string
|
||
payload:
|
||
type: string
|
||
task_type:
|
||
type: string
|
||
required:
|
||
- cron
|
||
- is_active
|
||
- name
|
||
- task_type
|
||
type: object
|
||
template.CreateTemplateRequest:
|
||
properties:
|
||
content:
|
||
type: string
|
||
description:
|
||
maxLength: 255
|
||
type: string
|
||
key:
|
||
maxLength: 80
|
||
type: string
|
||
name:
|
||
maxLength: 100
|
||
type: string
|
||
subject:
|
||
maxLength: 255
|
||
type: string
|
||
type:
|
||
maxLength: 20
|
||
type: string
|
||
required:
|
||
- content
|
||
- key
|
||
- name
|
||
- type
|
||
type: object
|
||
template.UpdateTemplateRequest:
|
||
properties:
|
||
content:
|
||
type: string
|
||
description:
|
||
maxLength: 255
|
||
type: string
|
||
name:
|
||
maxLength: 100
|
||
type: string
|
||
subject:
|
||
maxLength: 255
|
||
type: string
|
||
type:
|
||
maxLength: 20
|
||
type: string
|
||
required:
|
||
- content
|
||
- name
|
||
- type
|
||
type: object
|
||
updater.Status:
|
||
properties:
|
||
asset_name:
|
||
type: string
|
||
build_time:
|
||
type: string
|
||
can_upgrade:
|
||
type: boolean
|
||
current_version:
|
||
type: string
|
||
latest_version:
|
||
type: string
|
||
platform:
|
||
type: string
|
||
prerelease:
|
||
type: boolean
|
||
published_at:
|
||
type: string
|
||
release_name:
|
||
type: string
|
||
release_notes:
|
||
type: string
|
||
release_url:
|
||
type: string
|
||
update_available:
|
||
type: boolean
|
||
upstream_repository:
|
||
type: string
|
||
type: object
|
||
user.changePasswordRequest:
|
||
properties:
|
||
new_password:
|
||
type: string
|
||
old_password:
|
||
type: string
|
||
type: object
|
||
user.createTokenRequest:
|
||
properties:
|
||
is_admin:
|
||
type: boolean
|
||
name:
|
||
type: string
|
||
type: object
|
||
user.createUserRequest:
|
||
properties:
|
||
email:
|
||
maxLength: 255
|
||
type: string
|
||
is_active:
|
||
type: boolean
|
||
is_admin:
|
||
type: boolean
|
||
nickname:
|
||
maxLength: 64
|
||
type: string
|
||
password:
|
||
maxLength: 64
|
||
minLength: 8
|
||
type: string
|
||
username:
|
||
maxLength: 64
|
||
minLength: 3
|
||
type: string
|
||
required:
|
||
- email
|
||
- password
|
||
- username
|
||
type: object
|
||
user.listUsersResponse:
|
||
properties:
|
||
total:
|
||
type: integer
|
||
users:
|
||
items:
|
||
$ref: '#/definitions/user.user'
|
||
type: array
|
||
type: object
|
||
user.loginRequest:
|
||
properties:
|
||
code:
|
||
type: string
|
||
password:
|
||
type: string
|
||
username:
|
||
type: string
|
||
type: object
|
||
user.registerRequest:
|
||
properties:
|
||
code:
|
||
type: string
|
||
display_name:
|
||
type: string
|
||
email:
|
||
type: string
|
||
nickname:
|
||
type: string
|
||
password:
|
||
type: string
|
||
username:
|
||
type: string
|
||
type: object
|
||
user.sendEmailCodeRequest:
|
||
properties:
|
||
email:
|
||
type: string
|
||
scene:
|
||
type: string
|
||
required:
|
||
- email
|
||
- scene
|
||
type: object
|
||
user.tokenResponse:
|
||
properties:
|
||
record:
|
||
$ref: '#/definitions/model.AccessToken'
|
||
token:
|
||
type: string
|
||
type: object
|
||
user.updateProfileRequest:
|
||
properties:
|
||
avatar_url:
|
||
type: string
|
||
bio:
|
||
type: string
|
||
email:
|
||
type: string
|
||
gender:
|
||
type: string
|
||
location:
|
||
type: string
|
||
nickname:
|
||
type: string
|
||
phone:
|
||
type: string
|
||
website:
|
||
type: string
|
||
type: object
|
||
user.updateUserRequest:
|
||
properties:
|
||
email:
|
||
maxLength: 255
|
||
type: string
|
||
is_admin:
|
||
type: boolean
|
||
nickname:
|
||
maxLength: 64
|
||
type: string
|
||
password:
|
||
maxLength: 64
|
||
minLength: 8
|
||
type: string
|
||
required:
|
||
- email
|
||
type: object
|
||
user.updateUserStatusRequest:
|
||
properties:
|
||
is_active:
|
||
type: boolean
|
||
type: object
|
||
user.user:
|
||
properties:
|
||
avatar_url:
|
||
type: string
|
||
bio:
|
||
type: string
|
||
created_at:
|
||
type: string
|
||
email:
|
||
type: string
|
||
gender:
|
||
type: string
|
||
id:
|
||
example: "0"
|
||
type: string
|
||
is_active:
|
||
type: boolean
|
||
is_admin:
|
||
type: boolean
|
||
last_login_at:
|
||
type: string
|
||
location:
|
||
type: string
|
||
nickname:
|
||
type: string
|
||
phone:
|
||
type: string
|
||
updated_at:
|
||
type: string
|
||
username:
|
||
type: string
|
||
website:
|
||
type: string
|
||
type: object
|
||
info:
|
||
contact:
|
||
name: Wavelet
|
||
url: https://github.com/Rain-kl/Wavelet
|
||
description: Wavelet 平台后端 API,提供用户认证、系统配置、任务调度等通用功能。
|
||
license:
|
||
name: Apache 2.0
|
||
url: http://www.apache.org/licenses/LICENSE-2.0.html
|
||
title: Wavelet API
|
||
version: 1.0.0
|
||
paths:
|
||
/api/cap/challenge:
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: 客户端获取 PoW 难题和签名的 JWT Token,并在后台计算。
|
||
parameters:
|
||
- description: 可选范围限制参数
|
||
in: body
|
||
name: request
|
||
schema:
|
||
$ref: '#/definitions/cap.challengeRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 成功返回 PoW 难题
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/github_com_Rain-kl_Wavelet_internal_apps_cap.ChallengeResponse'
|
||
type: object
|
||
"500":
|
||
description: 内部服务错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
summary: 生成人机验证难题
|
||
tags:
|
||
- cap
|
||
/api/cap/redeem:
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: 提交 PoW 解答进行核销,成功后返回一次性 X-Cap-Token 凭证
|
||
parameters:
|
||
- description: 难题 Token 与解答 solutions 数组
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/cap.redeemRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 核销成功,返回 X-Cap-Token
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/github_com_Rain-kl_Wavelet_internal_apps_cap.RedeemResponse'
|
||
type: object
|
||
"400":
|
||
description: 参数错误或核销失败
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部服务错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
summary: 校验人机验证解答
|
||
tags:
|
||
- cap
|
||
/api/health:
|
||
get:
|
||
description: 检查服务是否正常运行,可用于负载均衡存活探测
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 服务正常
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
summary: 健康检查
|
||
tags:
|
||
- health
|
||
/api/v1/admin/auth-sources:
|
||
get:
|
||
description: 返回所有已配置的 OAuth/OIDC 认证源列表,包括已启用和未启用的,需要管理员权限
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 认证源列表
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
items:
|
||
$ref: '#/definitions/model.AuthSource'
|
||
type: array
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取认证源列表
|
||
tags:
|
||
- admin
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: 创建一个新的 OAuth/OIDC 认证源配置,认证源名称必须唯一且符合命名规范,需要管理员权限
|
||
parameters:
|
||
- description: 创建认证源参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/auth_source.AuthSourceRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 创建成功,返回认证源信息
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/model.AuthSource'
|
||
type: object
|
||
"400":
|
||
description: 参数错误或验证失败
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 创建认证源
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/auth-sources/{id}:
|
||
delete:
|
||
description: 删除指定认证源及其关联的所有外部帐号绑定记录,警告:删除后相关用户将无法通过该源登录,需要管理员权限
|
||
parameters:
|
||
- description: 认证源 ID 或名称
|
||
format: int64
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: integer
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 删除成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
"400":
|
||
description: ID 无效或删除失败
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 删除认证源
|
||
tags:
|
||
- admin
|
||
put:
|
||
consumes:
|
||
- application/json
|
||
description: 更新指定 ID 的认证源配置。若 client_secret 字段为空,则保留原有密钥不变,需要管理员权限
|
||
parameters:
|
||
- description: 认证源 ID 或名称
|
||
format: int64
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: integer
|
||
- description: 更新认证源参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/auth_source.AuthSourceRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 更新成功,返回更新后的认证源信息
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/model.AuthSource'
|
||
type: object
|
||
"400":
|
||
description: 参数错误或验证失败
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 更新认证源
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/auth-sources/{id}/toggle:
|
||
put:
|
||
consumes:
|
||
- application/json
|
||
description: 启用或禁用指定认证源。尝试启用时将验证 Client ID 和 Client Secret 是否已配置,需要管理员权限
|
||
parameters:
|
||
- description: 认证源 ID 或名称
|
||
format: int64
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: integer
|
||
- description: 启用状态
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/auth_source.ToggleAuthSourceRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 切换成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
"400":
|
||
description: 验证失败或认证源不存在
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 切换认证源启用状态
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/cache/clear:
|
||
post:
|
||
description: 清除系统磁盘缓存目录中的所有临时文件,并重置缓存容量和 Key 追踪数据
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 清理成功
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 服务内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 清空缓存
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/cache/config:
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: 更改磁盘缓存最大容量限制、文件生存时间(TTL)以及是否启用 LRU 淘汰淘汰算法,并进行热更新
|
||
parameters:
|
||
- description: 缓存配置请求体
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/cache.updateCacheConfigRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 更新成功
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"400":
|
||
description: 参数错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 服务内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 更新缓存配置
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/cache/status:
|
||
get:
|
||
description: 获取当前系统磁盘缓存的使用情况(已占用字节、Key 数量等)与策略配置
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 获取成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/diskcache.Status'
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取缓存状态
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/db-export:
|
||
get:
|
||
description: SQLite 时直接下载 .db 文件;PostgreSQL 时执行 pg_dump 并流式下载 .sql 文件,需要管理员权限
|
||
produces:
|
||
- application/octet-stream
|
||
responses:
|
||
"200":
|
||
description: 数据库文件
|
||
schema:
|
||
type: file
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 导出失败
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 导出数据库
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/db-info:
|
||
get:
|
||
description: 返回当前使用的数据库类型(sqlite/postgres)、名称/路径及版本字符串,需要管理员权限
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 获取成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/status.DatabaseInfoResponse'
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取数据库信息
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/db-manage/overview:
|
||
get:
|
||
description: 获取数据库类型、版本、名称、文件大小、表数量及当前连接数,需要管理员权限
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 获取成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/db_manage.DBOverviewResponse'
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取数据库运行概览
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/db-manage/query:
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: 在当前数据库中执行任意自定义 SQL,如果是查询语句将返回格式化后的列与数据集,否则返回受影响行数,需要管理员权限
|
||
parameters:
|
||
- description: SQL 请求参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/db_manage.ExecuteSQLRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 执行完毕
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/db_manage.ExecuteSQLResponse'
|
||
type: object
|
||
"400":
|
||
description: SQL 语句错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 执行 SQL 查询
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/db-manage/tables:
|
||
get:
|
||
description: 返回当前数据库的所有用户自定义表名称列表,需要管理员权限
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 获取成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
items:
|
||
type: string
|
||
type: array
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取数据库所有表名
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/logs:
|
||
get:
|
||
description: 分页获取系统历史日志,cursor=0 获取最新日志,cursor>0 获取更早日志
|
||
parameters:
|
||
- default: 0
|
||
description: 日志游标,0=获取最新
|
||
in: query
|
||
name: cursor
|
||
type: integer
|
||
- default: 200
|
||
description: 每页条数
|
||
in: query
|
||
name: limit
|
||
type: integer
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 日志列表
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/logs.logsResponse'
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取系统日志
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/logs/access:
|
||
get:
|
||
description: 分页并按照用户、接口路径、时间范围等维度检索用户访问日志列表(需要管理员权限)
|
||
parameters:
|
||
- default: 1
|
||
description: 页码
|
||
in: query
|
||
name: page
|
||
type: integer
|
||
- default: 20
|
||
description: 每页条数
|
||
in: query
|
||
name: page_size
|
||
type: integer
|
||
- description: 用户名模糊搜索
|
||
in: query
|
||
name: username
|
||
type: string
|
||
- description: 接口路径模糊搜索
|
||
in: query
|
||
name: path
|
||
type: string
|
||
- description: 起始时间(RFC3339 或 YYYY-MM-DD HH:MM:SS)
|
||
in: query
|
||
name: start_time
|
||
type: string
|
||
- description: 结束时间(RFC3339 或 YYYY-MM-DD HH:MM:SS)
|
||
in: query
|
||
name: end_time
|
||
type: string
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 访问日志列表
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/logs.accessLogsResponse'
|
||
type: object
|
||
"400":
|
||
description: 参数错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取用户访问日志
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/logs/analytics:
|
||
get:
|
||
description: 聚合统计最近 7 天的每日访问趋势、浏览器分布以及前 10 名最活跃用户排行(需要管理员权限)
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 分析统计数据
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/logs.logsAnalyticsResponse'
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取访问日志分析数据
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/logs/ws:
|
||
get:
|
||
description: 通过 WebSocket 实时推送系统日志,需要管理员权限
|
||
responses: {}
|
||
summary: 系统日志实时推送
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/message-gateway/channels:
|
||
get:
|
||
description: Returns all messaging channels; secrets are masked
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: OK
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
items:
|
||
$ref: '#/definitions/message_gateway.ChannelDTO'
|
||
type: array
|
||
type: object
|
||
security:
|
||
- SessionCookie: []
|
||
summary: List message gateway channels
|
||
tags:
|
||
- admin-message-gateway
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: Creates a Telegram or QQ channel with encrypted credentials
|
||
parameters:
|
||
- description: create body
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/message_gateway.CreateChannelRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: OK
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/message_gateway.ChannelDTO'
|
||
type: object
|
||
"400":
|
||
description: Bad Request
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: Create message gateway channel
|
||
tags:
|
||
- admin-message-gateway
|
||
/api/v1/admin/message-gateway/channels/{id}:
|
||
delete:
|
||
description: Deletes a channel and cascaded bindings and pairing codes
|
||
parameters:
|
||
- description: channel id
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: integer
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: OK
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"404":
|
||
description: Not Found
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: Delete message gateway channel
|
||
tags:
|
||
- admin-message-gateway
|
||
patch:
|
||
consumes:
|
||
- application/json
|
||
description: Updates a channel; empty secrets keep the current ciphertext
|
||
parameters:
|
||
- description: channel id
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: integer
|
||
- description: update body
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/message_gateway.UpdateChannelRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: OK
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/message_gateway.ChannelDTO'
|
||
type: object
|
||
"400":
|
||
description: Bad Request
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"404":
|
||
description: Not Found
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: Update message gateway channel
|
||
tags:
|
||
- admin-message-gateway
|
||
/api/v1/admin/message-gateway/channels/{id}/test:
|
||
post:
|
||
description: Probes stored credentials without returning secrets
|
||
parameters:
|
||
- description: channel id
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: integer
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: OK
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"400":
|
||
description: Bad Request
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"404":
|
||
description: Not Found
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: Test message gateway channel
|
||
tags:
|
||
- admin-message-gateway
|
||
/api/v1/admin/message-gateway/channels/definitions:
|
||
get:
|
||
description: Returns form field definitions for Telegram and QQ channels
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: OK
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
items:
|
||
$ref: '#/definitions/message_gateway.Definition'
|
||
type: array
|
||
type: object
|
||
security:
|
||
- SessionCookie: []
|
||
summary: List message gateway channel definitions
|
||
tags:
|
||
- admin-message-gateway
|
||
/api/v1/admin/push/channels:
|
||
get:
|
||
description: 返回系统配置的所有消息通道列表,需要管理员权限
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 消息通道列表
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
items:
|
||
$ref: '#/definitions/model.PushChannel'
|
||
type: array
|
||
type: object
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取所有消息通道
|
||
tags:
|
||
- admin-push
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: 新建一个消息通道配置,需要管理员权限
|
||
parameters:
|
||
- description: 创建参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/push.CreateChannelRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 创建成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/model.PushChannel'
|
||
type: object
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 创建消息通道
|
||
tags:
|
||
- admin-push
|
||
/api/v1/admin/push/channels/{id}:
|
||
delete:
|
||
description: 根据ID删除消息通道,需要管理员权限
|
||
parameters:
|
||
- description: 通道ID
|
||
format: int64
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: integer
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 删除成功
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 删除消息通道
|
||
tags:
|
||
- admin-push
|
||
put:
|
||
consumes:
|
||
- application/json
|
||
description: 修改消息通道配置,需要管理员权限
|
||
parameters:
|
||
- description: 通道ID
|
||
format: int64
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: integer
|
||
- description: 更新参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/push.UpdateChannelRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 更新成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/model.PushChannel'
|
||
type: object
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 更新消息通道
|
||
tags:
|
||
- admin-push
|
||
/api/v1/admin/push/channels/definitions:
|
||
get:
|
||
description: 返回系统支持的所有消息通道类型(如飞书、邮件、自定义、Telegram)的动态表单定义,需要管理员权限
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 通道配置定义列表
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
items:
|
||
$ref: '#/definitions/push.Definition'
|
||
type: array
|
||
type: object
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取所有消息通道配置字段定义
|
||
tags:
|
||
- admin-push
|
||
/api/v1/admin/push/channels/test:
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: 触发一次临时的或现有的通道连通性推送测试,需要管理员权限
|
||
parameters:
|
||
- description: 测试参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/push.TestChannelRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 测试触发成功
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 测试通道连通性
|
||
tags:
|
||
- admin-push
|
||
/api/v1/admin/push/events:
|
||
get:
|
||
description: 返回系统配置的通知事件列表,包括预置和自定义事件,需要管理员权限
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 通知事件列表
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
items:
|
||
$ref: '#/definitions/model.PushEvent'
|
||
type: array
|
||
type: object
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取所有通知事件
|
||
tags:
|
||
- admin-push
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: 绑定系统内置事件或异步任务、推送渠道、接收目标并创建通知事件配置,需要管理员权限
|
||
parameters:
|
||
- description: 创建参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/push.CreateEventRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 创建成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/model.PushEvent'
|
||
type: object
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 创建通知事件
|
||
tags:
|
||
- admin-push
|
||
/api/v1/admin/push/events/{id}:
|
||
delete:
|
||
description: 删除数据库中的特定通知事件配置,需要管理员权限
|
||
parameters:
|
||
- description: 事件 ID
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: integer
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 删除成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 删除通知事件配置
|
||
tags:
|
||
- admin-push
|
||
put:
|
||
consumes:
|
||
- application/json
|
||
description: 更新已有通知事件的推送渠道、接收目标和内容模板,需要管理员权限
|
||
parameters:
|
||
- description: 事件 ID
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: integer
|
||
- description: 更新参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/push.UpdateEventRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 修改成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 更新通知事件
|
||
tags:
|
||
- admin-push
|
||
/api/v1/admin/push/events/{id}/toggle:
|
||
post:
|
||
description: 启用或禁用指定的通知事件
|
||
parameters:
|
||
- description: 事件 ID
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: integer
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 切换成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 快捷切换通知事件启用状态
|
||
tags:
|
||
- admin-push
|
||
/api/v1/admin/push/events/builtin:
|
||
get:
|
||
description: 返回系统定义的所有内置通知事件元数据,供前端下拉框选择,需要管理员权限
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 内置通知事件列表
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
items:
|
||
$ref: '#/definitions/push.EventMetadata'
|
||
type: array
|
||
type: object
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取所有内置通知事件
|
||
tags:
|
||
- admin-push
|
||
/api/v1/admin/push/histories:
|
||
get:
|
||
description: 返回分页的通知历史日志数据,需要管理员权限
|
||
parameters:
|
||
- description: 当前页码
|
||
in: query
|
||
name: page
|
||
type: integer
|
||
- description: 分页大小
|
||
in: query
|
||
name: page_size
|
||
type: integer
|
||
- description: 过滤事件名称
|
||
in: query
|
||
name: event_key
|
||
type: string
|
||
- description: 过滤发送状态
|
||
in: query
|
||
name: status
|
||
type: string
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 推送历史列表
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/push.pushHistoriesResponse'
|
||
type: object
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 分页获取通知推送历史
|
||
tags:
|
||
- admin-push
|
||
/api/v1/admin/push/test:
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: 接收临时通知渠道配置并在本地同步调用 Pusher.Send 发送测试消息
|
||
parameters:
|
||
- description: 测试请求体
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/push.TestPushRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 测试成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 测试推送通道发送
|
||
tags:
|
||
- admin-push
|
||
/api/v1/admin/status:
|
||
get:
|
||
description: 获取后端服务运行状态、Goroutine、内存指标等详细统计数据,需要管理员权限
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 获取成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/status.SystemStatusResponse'
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取系统状态信息
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/status/log-database:
|
||
get:
|
||
description: 返回当前日志主库、迁移状态、各库保留天数与合法迁移目标,需要管理员权限
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 获取成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/status.LogDatabaseStatus'
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取日志数据库状态
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/system-configs:
|
||
get:
|
||
description: 返回所有系统配置列表,支持按配置类型(system/business)过滤,需要管理员权限
|
||
parameters:
|
||
- description: 配置类型(system/business)
|
||
in: query
|
||
name: type
|
||
type: string
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 系统配置列表
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
items:
|
||
$ref: '#/definitions/model.SystemConfig'
|
||
type: array
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取系统配置列表
|
||
tags:
|
||
- admin
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: 创建一条新的系统配置项,配置键不可重复,同时将新配置同步到 Redis,需要管理员权限
|
||
parameters:
|
||
- description: 创建请求参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/system_config.CreateSystemConfigRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 创建成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
"400":
|
||
description: 参数错误或配置键已存在
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 创建系统配置
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/system-configs/{key}:
|
||
get:
|
||
description: 根据配置键获取对应的系统配置详情,需要管理员权限
|
||
parameters:
|
||
- description: 配置键
|
||
in: path
|
||
name: key
|
||
required: true
|
||
type: string
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 系统配置详情
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/model.SystemConfig'
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"404":
|
||
description: 配置不存在
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取单个系统配置
|
||
tags:
|
||
- admin
|
||
put:
|
||
consumes:
|
||
- application/json
|
||
description: 根据配置键更新对应的配置内容,同时将更新同步到 Redis,需要管理员权限
|
||
parameters:
|
||
- description: 配置键
|
||
in: path
|
||
name: key
|
||
required: true
|
||
type: string
|
||
- description: 更新请求参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/system_config.UpdateSystemConfigRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 更新成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
"400":
|
||
description: 参数错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"404":
|
||
description: 配置不存在
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 更新系统配置
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/system-configs/smtp/test:
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: 使用传入的配置进行 SMTP 邮件发送测试,支持使用 ****** 占位符使用保存的数据库密码
|
||
parameters:
|
||
- description: 测试请求参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/system_config.TestSMTPRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 测试执行完毕
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/system_config.TestSMTPResponse'
|
||
type: object
|
||
"400":
|
||
description: 参数错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 测试 SMTP 邮件发送
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/tasks/dispatch:
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: 手动触发指定类型的异步任务,支持指定时间范围和用户,需要管理员权限
|
||
parameters:
|
||
- description: 任务请求参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/task.DispatchTaskRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 任务已入队
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
"400":
|
||
description: 任务类型不存在或参数错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 任务入队失败
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 下发异步任务
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/tasks/executions:
|
||
get:
|
||
description: 分页查询任务执行记录,支持按状态和任务类型筛选,需要管理员权限
|
||
parameters:
|
||
- description: 状态筛选 (pending/running/succeeded/failed)
|
||
in: query
|
||
name: status
|
||
type: string
|
||
- description: 任务类型筛选
|
||
in: query
|
||
name: task_type
|
||
type: string
|
||
- default: 1
|
||
description: 页码
|
||
in: query
|
||
name: page
|
||
type: integer
|
||
- default: 20
|
||
description: 每页条数
|
||
in: query
|
||
name: page_size
|
||
type: integer
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 任务执行记录列表
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: object
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 查询任务执行记录
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/tasks/executions/{id}:
|
||
get:
|
||
description: 根据 ID 查询任务执行记录详情,包含完整执行日志,需要管理员权限
|
||
parameters:
|
||
- description: 任务执行记录 ID
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: integer
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 任务执行详情
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/model.TaskExecution'
|
||
type: object
|
||
"400":
|
||
description: 参数错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"404":
|
||
description: 记录不存在
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 查询任务执行详情
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/tasks/executions/{id}/retry:
|
||
post:
|
||
description: 重新下发一条失败的任务,创建新的执行记录,需要管理员权限
|
||
parameters:
|
||
- description: 任务执行记录 ID
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: integer
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 新任务的 TaskID
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
"400":
|
||
description: 任务不支持重试或参数错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"404":
|
||
description: 记录不存在
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 重试失败
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 重试失败任务
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/tasks/schedules:
|
||
get:
|
||
description: 返回系统所有的定时任务配置列表,包括名称、关联的异步任务类型、Cron 表达式和启用状态,需要管理员权限
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 定时任务列表
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
items:
|
||
$ref: '#/definitions/model.Schedule'
|
||
type: array
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取定时任务列表
|
||
tags:
|
||
- admin
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: 新增一个动态定时任务配置,关联已有的异步任务,配置 Cron 表达式和执行参数,并触发调度器热加载,需要管理员权限
|
||
parameters:
|
||
- description: 创建定时任务请求参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/task.CreateScheduleRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 创建成功的定时任务信息
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/model.Schedule'
|
||
type: object
|
||
"400":
|
||
description: Cron 表达式无效、异步任务类型不存在或参数错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 保存定时任务失败
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 创建定时任务
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/tasks/schedules/{id}:
|
||
delete:
|
||
description: 删除指定的定时任务配置,并触发调度器热加载,需要管理员权限
|
||
parameters:
|
||
- description: 定时任务 ID
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: integer
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 删除结果
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
"400":
|
||
description: 参数错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 删除定时任务失败
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 删除定时任务
|
||
tags:
|
||
- admin
|
||
put:
|
||
consumes:
|
||
- application/json
|
||
description: 修改一个定时任务的配置(名称、Cron 表达式、异步任务参数和是否启用等),并触发调度器热加载,需要管理员权限
|
||
parameters:
|
||
- description: 定时任务 ID
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: integer
|
||
- description: 修改定时任务请求参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/task.UpdateScheduleRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 修改后的定时任务信息
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/model.Schedule'
|
||
type: object
|
||
"400":
|
||
description: Cron 表达式无效、参数错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"404":
|
||
description: 定时任务不存在
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 修改定时任务失败
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 修改定时任务
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/tasks/types:
|
||
get:
|
||
description: 返回系统支持的所有可调度任务类型列表,包括任务名称、描述、是否支持时间范围等元数据,需要管理员权限
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 任务类型列表
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
items:
|
||
$ref: '#/definitions/task.TaskMeta'
|
||
type: array
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取支持的任务类型
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/templates:
|
||
get:
|
||
description: 返回所有通知模板列表,需要管理员权限
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 模板列表
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
items:
|
||
$ref: '#/definitions/model.Template'
|
||
type: array
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取模板列表
|
||
tags:
|
||
- admin
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: 创建一条新的自定义通知模板,模板标识符(Key)不可重复,需要管理员权限
|
||
parameters:
|
||
- description: 创建请求参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/template.CreateTemplateRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 创建成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
"400":
|
||
description: 参数错误或模板标识符已存在
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 创建模板
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/templates/{key}:
|
||
delete:
|
||
description: 根据模板标识符删除对应模板,系统预置模板不可删除,需要管理员权限
|
||
parameters:
|
||
- description: 模板标识符
|
||
in: path
|
||
name: key
|
||
required: true
|
||
type: string
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 删除成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
"400":
|
||
description: 不可删除系统模板
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"404":
|
||
description: 模板不存在
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 删除模板
|
||
tags:
|
||
- admin
|
||
get:
|
||
description: 根据模板标识符获取对应的模板详情,需要管理员权限
|
||
parameters:
|
||
- description: 模板标识符
|
||
in: path
|
||
name: key
|
||
required: true
|
||
type: string
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 模板详情
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/model.Template'
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"404":
|
||
description: 模板不存在
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取单个模板
|
||
tags:
|
||
- admin
|
||
put:
|
||
consumes:
|
||
- application/json
|
||
description: 根据模板标识符更新对应的模板内容,需要管理员权限
|
||
parameters:
|
||
- description: 模板标识符
|
||
in: path
|
||
name: key
|
||
required: true
|
||
type: string
|
||
- description: 更新请求参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/template.UpdateTemplateRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 更新成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/model.Template'
|
||
type: object
|
||
"400":
|
||
description: 参数错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"404":
|
||
description: 模板不存在
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 更新模板
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/update:
|
||
get:
|
||
description: 从系统配置指定的 GitHub 上游仓库查询最新兼容 Release,并与当前服务版本比较
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 更新状态
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/updater.Status'
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 查询失败
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取应用更新状态
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/update/apply:
|
||
post:
|
||
description: 下载当前平台对应的 GitHub Actions Release 资产,替换当前二进制并重启进程
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 升级已准备并即将重启
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"400":
|
||
description: 当前版本不可升级
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 升级准备失败
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 下载并应用应用更新
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/uploads:
|
||
get:
|
||
description: 分页获取系统上传的文件列表,支持文件名关键词、业务类型、扩展名、上传用户ID过滤
|
||
parameters:
|
||
- description: 页码(默认 1)
|
||
in: query
|
||
name: page
|
||
type: integer
|
||
- description: 每页数量(默认 20,最大 100)
|
||
in: query
|
||
name: page_size
|
||
type: integer
|
||
- description: 文件名关键词(模糊匹配)
|
||
in: query
|
||
name: keyword
|
||
type: string
|
||
- description: 业务分类过滤
|
||
in: query
|
||
name: type
|
||
type: string
|
||
- description: 扩展名过滤
|
||
in: query
|
||
name: extension
|
||
type: string
|
||
- description: 上传用户 ID
|
||
format: int64
|
||
in: query
|
||
name: user_id
|
||
type: integer
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 查询成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/handler.listFilesResponse'
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取文件列表
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/uploads/{id}:
|
||
delete:
|
||
description: 将文件状态置为 deleted(软删除),不会立即清理底层存储对象
|
||
parameters:
|
||
- description: 文件 ID
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: string
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 删除成功
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无权操作
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"404":
|
||
description: 文件不存在
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 删除文件
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/uploads/download/{id}:
|
||
get:
|
||
description: 根据文件 ID 获取文件,以附件形式 (Attachment) 强制开启客户端浏览器下载
|
||
parameters:
|
||
- description: 文件 ID
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: string
|
||
- description: 图片质量 (low, medium, high, origin),默认为 origin
|
||
in: query
|
||
name: quality
|
||
type: string
|
||
produces:
|
||
- application/octet-stream
|
||
responses:
|
||
"200":
|
||
description: 成功下载文件
|
||
schema:
|
||
type: file
|
||
"400":
|
||
description: 参数错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"404":
|
||
description: 文件不存在
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 服务内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 下载单文件
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/uploads/download/batch:
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: 传入多个文件 ID,后台实时将其打包压缩为 ZIP 流并输出,自动处理文件名重复冲突
|
||
parameters:
|
||
- description: 包含文件 ID 数组 of string 的请求体
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/handler.batchDownloadRequest'
|
||
produces:
|
||
- application/octet-stream
|
||
responses:
|
||
"200":
|
||
description: 成功下载打包后的 ZIP
|
||
schema:
|
||
type: file
|
||
"400":
|
||
description: 参数错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 打包失败
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 批量打包下载
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/uploads/stats:
|
||
get:
|
||
description: 返回系统级的总文件数、占用大小、最近 7 天新增趋势、文件类型/格式分布等数据
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 获取成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/handler.fileStatsResponse'
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取文件统计数据
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/uploads/types:
|
||
get:
|
||
description: 返回数据库中所有已上传文件实际拥有的业务类型列表
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 业务类型列表
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
items:
|
||
type: string
|
||
type: array
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取文件业务类型列表
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/users:
|
||
get:
|
||
description: 分页返回用户列表,支持按用户 ID 和用户名筛选,需要管理员权限
|
||
parameters:
|
||
- in: query
|
||
name: email
|
||
type: string
|
||
- in: query
|
||
minimum: 1
|
||
name: page
|
||
type: integer
|
||
- in: query
|
||
maximum: 100
|
||
minimum: 1
|
||
name: page_size
|
||
type: integer
|
||
- in: query
|
||
name: user_id
|
||
type: integer
|
||
- in: query
|
||
name: username
|
||
type: string
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 用户列表
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/user.listUsersResponse'
|
||
type: object
|
||
"400":
|
||
description: 参数错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取用户列表
|
||
tags:
|
||
- admin
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: 创建一个本地密码登录的新用户,需要管理员权限
|
||
parameters:
|
||
- description: 创建用户参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/user.createUserRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 创建成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/user.user'
|
||
type: object
|
||
"400":
|
||
description: 参数错误或用户名已存在
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 创建用户
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/users/{id}:
|
||
delete:
|
||
description: 删除指定非管理员用户,需要管理员权限,不能删除当前登录用户
|
||
parameters:
|
||
- description: 用户 ID
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: integer
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 删除成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
"400":
|
||
description: 参数错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限、尝试删除管理员或当前用户
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"404":
|
||
description: 用户不存在
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 删除用户
|
||
tags:
|
||
- admin
|
||
get:
|
||
description: 返回指定用户的完整个人资料和系统状态,需要管理员权限,不返回密码等敏感字段
|
||
parameters:
|
||
- description: 用户 ID
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: integer
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 用户详情
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/user.user'
|
||
type: object
|
||
"400":
|
||
description: 参数错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"404":
|
||
description: 用户不存在
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取用户详情
|
||
tags:
|
||
- admin
|
||
put:
|
||
consumes:
|
||
- application/json
|
||
description: 更新指定用户的昵称、邮箱、管理员权限,并可选重置密码,需要管理员权限
|
||
parameters:
|
||
- description: 用户 ID
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: integer
|
||
- description: 更新参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/user.updateUserRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 更新成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
"400":
|
||
description: 参数错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限或尝试修改自身权限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"404":
|
||
description: 用户不存在
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 更新用户信息
|
||
tags:
|
||
- admin
|
||
/api/v1/admin/users/{id}/status:
|
||
put:
|
||
consumes:
|
||
- application/json
|
||
description: 启用或禁用指定用户,管理员账号无法被禁用,需要管理员权限
|
||
parameters:
|
||
- description: 用户 ID
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: integer
|
||
- description: 状态参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/user.updateUserStatusRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 更新成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
"400":
|
||
description: 参数错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无管理员权限或尝试禁用管理员
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"404":
|
||
description: 用户不存在
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 更新用户状态
|
||
tags:
|
||
- admin
|
||
/api/v1/config/public:
|
||
get:
|
||
consumes:
|
||
- application/json
|
||
description: 返回系统配置表中 visibility 为 1 的配置键值集合
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: OK
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
summary: 获取公共配置
|
||
tags:
|
||
- config
|
||
/api/v1/custom/hello:
|
||
get:
|
||
description: Scaffold demo API; product APIs use semantic paths under apps/<domain>
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
summary: Sample Hello API
|
||
tags:
|
||
- custom
|
||
/api/v1/message-gateway/bindings:
|
||
get:
|
||
description: Returns the current user's bound messaging channels
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: OK
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
items:
|
||
$ref: '#/definitions/message_gateway.BindingDTO'
|
||
type: array
|
||
type: object
|
||
"401":
|
||
description: Unauthorized
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: List message gateway bindings
|
||
tags:
|
||
- message-gateway
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: Binds the current user to a platform identity using a one-time
|
||
pairing code
|
||
parameters:
|
||
- description: bind body
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/message_gateway.BindRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: OK
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/message_gateway.BindingDTO'
|
||
type: object
|
||
"400":
|
||
description: Bad Request
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"409":
|
||
description: Conflict
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: Bind a messaging channel
|
||
tags:
|
||
- message-gateway
|
||
/api/v1/message-gateway/bindings/{id}:
|
||
delete:
|
||
description: Removes a binding owned by the current user
|
||
parameters:
|
||
- description: binding id
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: integer
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: OK
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: Forbidden
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"404":
|
||
description: Not Found
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: Unbind a messaging channel
|
||
tags:
|
||
- message-gateway
|
||
/api/v1/message-gateway/channels:
|
||
get:
|
||
description: Returns enabled system bots the current user can pair with
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: OK
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
items:
|
||
$ref: '#/definitions/message_gateway.PublicChannelDTO'
|
||
type: array
|
||
type: object
|
||
"401":
|
||
description: Unauthorized
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: List enabled messaging channels
|
||
tags:
|
||
- message-gateway
|
||
/api/v1/oauth/{source}/authorize:
|
||
get:
|
||
description: 根据指定认证源名称发起 OAuth 授权,支持 purpose 参数用于区分登录和账号绑定场景。认证源必须已启用。
|
||
parameters:
|
||
- description: 认证源名称
|
||
in: path
|
||
name: source
|
||
required: true
|
||
type: string
|
||
- description: 授权目的:login(登录)或 bind(绑定账号),默认 login
|
||
in: query
|
||
name: purpose
|
||
type: string
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 授权 URL
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/oauth.OAuthAuthorizeResponse'
|
||
type: object
|
||
"400":
|
||
description: 认证源不存在或未启用
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: Redis 异常或构造 URL 失败
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
summary: 发起指定认证源授权
|
||
tags:
|
||
- oauth
|
||
/api/v1/oauth/callback:
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: 接收前端传回的 state 和 code,完成 OAuth/OIDC 认证并建立会话。支持登录(login)和账号绑定(bind)两种场景。
|
||
parameters:
|
||
- description: 回调请求参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/oauth.CallbackRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 登录或绑定成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/oauth.OAuthCallbackResult'
|
||
type: object
|
||
"400":
|
||
description: state 无效、参数错误或认证源错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 绑定场景未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: OAuth 认证失败或内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
summary: OAuth 回调处理
|
||
tags:
|
||
- oauth
|
||
/api/v1/oauth/external-accounts:
|
||
get:
|
||
description: 返回当前登录用户已绑定的所有外部 OAuth 帐号信息,需要登录
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 外部帐号列表
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
items:
|
||
$ref: '#/definitions/model.ExternalAccountView'
|
||
type: array
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取外部帐号列表
|
||
tags:
|
||
- oauth
|
||
/api/v1/oauth/external-accounts/{id}/delete:
|
||
post:
|
||
description: 解除当前登录用户与指定外部帐号的绑定关系,需要登录
|
||
parameters:
|
||
- description: 外部帐号绑定记录 ID
|
||
format: int64
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: integer
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 解除绑定成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
"400":
|
||
description: ID 无效或解除失败
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 解除外部帐号绑定
|
||
tags:
|
||
- oauth
|
||
/api/v1/oauth/login:
|
||
get:
|
||
description: 根据指定认证源生成 OAuth 授权 URL,前端跳转到该 URL 完成 OAuth 登录授权。source 参数为空时使用第一个启用的认证源。
|
||
parameters:
|
||
- description: 认证源名称,为空使用第一个启用的认证源
|
||
in: query
|
||
name: source
|
||
type: string
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 授权 URL
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/oauth.OAuthAuthorizeResponse'
|
||
type: object
|
||
"400":
|
||
description: 认证源不存在或未配置
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: Redis 异常 or 构造 URL 失败
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
summary: 获取登录授权地址
|
||
tags:
|
||
- oauth
|
||
/api/v1/oauth/logout:
|
||
get:
|
||
description: 清除当前用户的登录会话,完成退出。清除 Cookie 中的 Session 数据。
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 退出成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
"500":
|
||
description: Session 清除失败
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 退出登录
|
||
tags:
|
||
- oauth
|
||
/api/v1/oauth/sources:
|
||
get:
|
||
description: 返回当前系统已启用的所有 OAuth 登录源,前端展示登录按钮列表时调用
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 登录源列表
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
items:
|
||
$ref: '#/definitions/oauth.AuthSourceView'
|
||
type: array
|
||
type: object
|
||
summary: 获取可用登录源
|
||
tags:
|
||
- oauth
|
||
/api/v1/oauth/user-info:
|
||
get:
|
||
description: 返回当前登录用户的基本信息及余额数据,需要登录。包括用户 ID、用户名、信任等级、各类余额信息等。
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 用户信息
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/oauth.BasicUserInfo'
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取当前登录用户信息
|
||
tags:
|
||
- oauth
|
||
/api/v1/upload:
|
||
post:
|
||
consumes:
|
||
- multipart/form-data
|
||
description: 支持各种类型的通用文件上传,支持自动文件类型检测、哈希计算与“秒传”去重
|
||
parameters:
|
||
- description: 要上传的文件
|
||
in: formData
|
||
name: file
|
||
required: true
|
||
type: file
|
||
- description: '业务分类 (例如: avatar, attachment, doc,默认为 generic)'
|
||
in: formData
|
||
name: type
|
||
type: string
|
||
- description: 额外的 JSON 格式元数据
|
||
in: formData
|
||
name: metadata
|
||
type: string
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 上传成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/model.Upload'
|
||
type: object
|
||
"400":
|
||
description: 请求参数错误或文件受限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 上传文件
|
||
tags:
|
||
- upload
|
||
/api/v1/upload/{id}:
|
||
delete:
|
||
description: 将当前用户本人的文件状态置为 deleted(软删除)
|
||
parameters:
|
||
- description: 文件 ID
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: string
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 删除成功
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"403":
|
||
description: 无权操作
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"404":
|
||
description: 文件不存在
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 删除我的文件
|
||
tags:
|
||
- upload
|
||
put:
|
||
consumes:
|
||
- application/json
|
||
description: 更新当前用户本人的文件名或访问权限模式 (AccessMode)
|
||
parameters:
|
||
- description: 文件 ID
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: string
|
||
- description: 更新字段
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/handler.updateMyFileRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 更新成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/model.Upload'
|
||
type: object
|
||
"403":
|
||
description: 无权操作
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"404":
|
||
description: 文件不存在
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 更新我的文件信息
|
||
tags:
|
||
- upload
|
||
/api/v1/upload/my:
|
||
get:
|
||
description: 分页获取当前登录用户上传的文件,支持文件名关键词、业务类型、扩展名过滤
|
||
parameters:
|
||
- description: 页码(默认 1)
|
||
in: query
|
||
name: page
|
||
type: integer
|
||
- description: 每页数量(默认 20,最大 100)
|
||
in: query
|
||
name: page_size
|
||
type: integer
|
||
- description: 文件名关键词(模糊匹配)
|
||
in: query
|
||
name: keyword
|
||
type: string
|
||
- description: 业务分类过滤
|
||
in: query
|
||
name: type
|
||
type: string
|
||
- description: 扩展名过滤
|
||
in: query
|
||
name: extension
|
||
type: string
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 查询成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/handler.listMyFilesResponse'
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取我的文件列表
|
||
tags:
|
||
- upload
|
||
/api/v1/user-info:
|
||
get:
|
||
description: 返回当前登录用户的基本信息及余额数据,需要登录。包括用户 ID、用户名、信任等级、各类余额信息等。
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 用户信息
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/oauth.BasicUserInfo'
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取当前登录用户信息
|
||
tags:
|
||
- oauth
|
||
/api/v1/user/access-tokens:
|
||
get:
|
||
description: 返回当前登录用户的所有 active access tokens(脱敏后)
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 令牌列表
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
items:
|
||
$ref: '#/definitions/model.AccessToken'
|
||
type: array
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取当前用户的 AccessToken 列表
|
||
tags:
|
||
- user
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: 为当前用户新建一个 API 访问令牌,仅在此接口返回一次明文令牌值,请妥善保存。可通过 is_admin 字段赋予令牌管理员权限(仅管理员用户可设置)。
|
||
parameters:
|
||
- description: 令牌名称
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/user.createTokenRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 新建令牌成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/user.tokenResponse'
|
||
type: object
|
||
"400":
|
||
description: 参数错误或超限
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 创建一个新的 AccessToken
|
||
tags:
|
||
- user
|
||
/api/v1/user/access-tokens/{id}:
|
||
delete:
|
||
description: 撤销并删除一个属于当前用户的 API 访问令牌
|
||
parameters:
|
||
- description: 令牌ID
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: string
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 删除成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
"400":
|
||
description: 参数错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 删除一个 AccessToken
|
||
tags:
|
||
- user
|
||
/api/v1/user/access-tokens/{id}/rotate:
|
||
post:
|
||
description: 轮换(重新生成)一个属于当前用户的 API 访问令牌的密钥,旧令牌将立即失效
|
||
parameters:
|
||
- description: 令牌ID
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: string
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 令牌轮换成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/user.tokenResponse'
|
||
type: object
|
||
"400":
|
||
description: 参数错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 轮换一个 AccessToken
|
||
tags:
|
||
- user
|
||
/api/v1/user/change-password:
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: 修改当前登录用户的密码。修改成功后,如果是首次明文登录的升级提示,则清除修改密码的提示状态。
|
||
parameters:
|
||
- description: 修改密码请求参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/user.changePasswordRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 修改密码成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
"400":
|
||
description: 原密码错误或新密码不符合要求
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 请先登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
summary: 修改用户密码
|
||
tags:
|
||
- user
|
||
/api/v1/user/login:
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: 使用用户名和密码登录,登录成功后建立 Session。若管理员已关闭密码登录功能则返回错误。
|
||
parameters:
|
||
- description: 登录请求参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/user.loginRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 登录成功,返回用户信息
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/oauth.BasicUserInfo'
|
||
type: object
|
||
"400":
|
||
description: 用户名或密码错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 服务内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
summary: 用户密码登录
|
||
tags:
|
||
- user
|
||
/api/v1/user/logout:
|
||
get:
|
||
description: 清除用户登录 Session,完成退出
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 退出成功
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
type: string
|
||
type: object
|
||
"500":
|
||
description: Session 清除失败
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 用户退出登录
|
||
tags:
|
||
- user
|
||
/api/v1/user/profile:
|
||
put:
|
||
consumes:
|
||
- application/json
|
||
description: 修改当前登录用户的昵称、邮箱、头像、简介、电话、性别、个人网站和所在地。
|
||
parameters:
|
||
- description: 更新请求参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/user.updateProfileRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 修改成功,返回更新后的用户信息
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/oauth.BasicUserInfo'
|
||
type: object
|
||
"400":
|
||
description: 邮箱已被占用或参数错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
summary: 修改当前登录用户的个人资料
|
||
tags:
|
||
- user
|
||
/api/v1/user/register:
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: 使用用户名和密码注册新账号,注册成功后自动登录并建立 Session。密码长度不能少于 8 位。
|
||
parameters:
|
||
- description: 注册请求参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/user.registerRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 注册并登录成功,返回用户信息
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/oauth.BasicUserInfo'
|
||
type: object
|
||
"400":
|
||
description: 参数错误、用户名已存在或注册已关闭
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 服务内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
summary: 用户注册
|
||
tags:
|
||
- user
|
||
/api/v1/user/self:
|
||
get:
|
||
description: 返回当前登录用户的基本信息及余额数据,需要登录。包括用户 ID、用户名、信任等级、各类余额信息等。
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 用户信息
|
||
schema:
|
||
allOf:
|
||
- $ref: '#/definitions/response.Any'
|
||
- properties:
|
||
data:
|
||
$ref: '#/definitions/oauth.BasicUserInfo'
|
||
type: object
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
security:
|
||
- SessionCookie: []
|
||
summary: 获取当前登录用户信息
|
||
tags:
|
||
- oauth
|
||
/api/v1/user/send-email-code:
|
||
post:
|
||
consumes:
|
||
- application/json
|
||
description: 向指定邮箱发送验证码(用于注册场景)
|
||
parameters:
|
||
- description: 发送验证码请求参数
|
||
in: body
|
||
name: request
|
||
required: true
|
||
schema:
|
||
$ref: '#/definitions/user.sendEmailCodeRequest'
|
||
produces:
|
||
- application/json
|
||
responses:
|
||
"200":
|
||
description: 发送成功
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"400":
|
||
description: 参数错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
summary: 发送邮箱验证码
|
||
tags:
|
||
- user
|
||
/f/{id}:
|
||
get:
|
||
description: 根据文件 ID 获取并提供已上传的临时或正式文件,若配置了缓存则优先走本地缓存,否则从 S3 等后端存储读取并流式返回
|
||
parameters:
|
||
- description: 文件 ID
|
||
in: path
|
||
name: id
|
||
required: true
|
||
type: string
|
||
- description: 图片质量 (low, medium, high, origin),默认为 origin
|
||
in: query
|
||
name: quality
|
||
type: string
|
||
produces:
|
||
- application/octet-stream
|
||
responses:
|
||
"200":
|
||
description: 成功获取文件内容
|
||
schema:
|
||
type: file
|
||
"400":
|
||
description: 文件 ID 格式错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"401":
|
||
description: 未登录
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"404":
|
||
description: 文件未找到
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
"500":
|
||
description: 服务内部错误
|
||
schema:
|
||
$ref: '#/definitions/response.Any'
|
||
summary: 获取已上传文件
|
||
tags:
|
||
- upload
|
||
/robots.txt:
|
||
get:
|
||
description: 根据系统配置决定是否允许搜索引擎检索,并返回相应的 robots.txt 文件内容
|
||
produces:
|
||
- text/plain
|
||
responses:
|
||
"200":
|
||
description: robots.txt 内容
|
||
schema:
|
||
type: string
|
||
summary: 获取 robots.txt
|
||
tags:
|
||
- config
|
||
securityDefinitions:
|
||
SessionCookie:
|
||
in: cookie
|
||
name: session
|
||
type: apiKey
|
||
swagger: "2.0"
|