basePath: / definitions: admin.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 admin.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 admin.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 admin.DBOverviewResponse: properties: connections: type: integer name: type: string size: type: string table_count: type: integer type: type: string version: type: string type: object admin.DatabaseInfoResponse: properties: name: type: string type: type: string version: type: string type: object admin.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 admin.ExecuteSQLRequest: properties: sql: type: string required: - sql type: object admin.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 admin.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 admin.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 admin.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 admin.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 admin.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/admin.TaskExecutionStatus' task_id: type: string task_name: type: string task_type: type: string triggered_by: type: string updated_at: type: string type: object admin.TaskExecutionStatus: enum: - pending - running - succeeded - failed type: string x-enum-varnames: - TaskExecutionStatusPending - TaskExecutionStatusRunning - TaskExecutionStatusSucceeded - TaskExecutionStatusFailed admin.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 admin.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 admin.TestSMTPResponse: properties: error: type: string log: type: string success: type: boolean type: object admin.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 admin.UpdateSystemConfigRequest: properties: description: maxLength: 255 type: string value: type: string visibility: enum: - 0 - 1 type: integer required: - value type: object admin.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 admin.UpdaterStatus: 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 admin.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 admin.accessLogsResponse: properties: list: items: $ref: '#/definitions/admin.accessLogItem' type: array total: type: integer type: object admin.browserItem: properties: browser: type: string count: type: integer type: object admin.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 admin.listUsersResponse: properties: total: type: integer users: items: $ref: '#/definitions/admin.userResponse' type: array type: object admin.logsAnalyticsResponse: properties: browsers: items: $ref: '#/definitions/admin.browserItem' type: array top_users: items: $ref: '#/definitions/admin.topUserItem' type: array trend: items: $ref: '#/definitions/admin.trendItem' type: array type: object admin.logsResponse: properties: has_more: type: boolean lines: items: $ref: '#/definitions/logger.LogEntry' type: array next_cursor: description: 用于加载更早日志的 cursor type: integer type: object admin.topUserItem: properties: count: type: integer nickname: type: string user_id: example: "0" type: string username: type: string type: object admin.trendItem: properties: count: type: integer date: type: string type: object admin.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 admin.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 admin.updateUserStatusRequest: properties: is_active: type: boolean type: object admin.userResponse: 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 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 cap.RedeemResponse: properties: error: type: string expires: type: integer success: type: boolean token: type: string 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 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 driver_asynq_worker.TaskMeta: properties: asynq_task: type: string description: type: string max_retry: type: integer name: type: string params: items: $ref: '#/definitions/driver_asynq_worker.TaskParam' type: array queue: type: string retryable: description: 是否支持手动重试 type: boolean supports_time: type: boolean type: type: string type: object driver_asynq_worker.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 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/models.Upload' type: array page: type: integer page_size: type: integer total: type: integer type: object handler.listMyFilesResponse: properties: items: items: $ref: '#/definitions/models.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 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: credentials: additionalProperties: type: string type: object enabled: type: boolean extra: additionalProperties: type: string type: object id: example: "0" type: string name: type: string owner_id: example: "0" type: string owner_scope: type: string type: type: string type: object message_gateway.CreateChannelRequest: properties: credentials: additionalProperties: type: string type: object enabled: type: boolean extra: additionalProperties: type: string type: object name: type: string type: type: string type: object message_gateway.Definition: properties: fields: items: $ref: '#/definitions/message_gateway.Field' type: array 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: credentials: additionalProperties: type: string type: object enabled: type: boolean extra: additionalProperties: type: string type: object name: type: string type: object models.Upload: properties: access_mode: type: integer created_at: type: string extension: type: string file_name: type: string file_path: type: string file_size: type: integer hash: type: string id: example: "0" type: string metadata: $ref: '#/definitions/models.UploadMetadata' mime_type: type: string status: $ref: '#/definitions/models.UploadStatus' type: type: string updated_at: type: string user_id: example: "0" type: string type: object models.UploadMetadata: properties: bucket: type: string client_ip: type: string duration: type: number extra: additionalProperties: {} type: object height: type: integer original_mime: type: string user_agent: type: string width: type: integer type: object models.UploadStatus: enum: - pending - used - deleted type: string x-enum-comments: UploadStatusDeleted: 已删除 UploadStatusPending: 待使用 UploadStatusUsed: 已使用 x-enum-descriptions: - 待使用 - 已使用 - 已删除 x-enum-varnames: - UploadStatusPending - UploadStatusUsed - UploadStatusDeleted response.Any: properties: data: {} error_msg: example: "" 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/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/cap.RedeemResponse' type: object "400": description: 参数错误或核销失败 schema: $ref: '#/definitions/response.Any' "500": description: 内部服务错误 schema: $ref: '#/definitions/response.Any' summary: 校验人机验证解答 tags: - cap /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/admin.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/admin.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/admin.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/admin.ExecuteSQLRequest' produces: - application/json responses: "200": description: 执行完毕 schema: allOf: - $ref: '#/definitions/response.Any' - properties: data: $ref: '#/definitions/admin.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/admin.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/admin.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/admin.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/status: get: description: 获取后端服务运行状态、Goroutine、内存指标等详细统计数据,需要管理员权限 produces: - application/json responses: "200": description: 获取成功 schema: allOf: - $ref: '#/definitions/response.Any' - properties: data: $ref: '#/definitions/admin.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/admin.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/admin.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/admin.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/admin.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/admin.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/admin.TestSMTPRequest' produces: - application/json responses: "200": description: 测试执行完毕 schema: allOf: - $ref: '#/definitions/response.Any' - properties: data: $ref: '#/definitions/admin.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/admin.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/admin.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/admin.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/admin.CreateScheduleRequest' produces: - application/json responses: "200": description: 创建成功的定时任务信息 schema: allOf: - $ref: '#/definitions/response.Any' - properties: data: $ref: '#/definitions/admin.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/admin.UpdateScheduleRequest' produces: - application/json responses: "200": description: 修改后的定时任务信息 schema: allOf: - $ref: '#/definitions/response.Any' - properties: data: $ref: '#/definitions/admin.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/driver_asynq_worker.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/admin.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/admin.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/admin.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/admin.UpdateTemplateRequest' produces: - application/json responses: "200": description: 更新成功 schema: allOf: - $ref: '#/definitions/response.Any' - properties: data: $ref: '#/definitions/admin.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/admin.UpdaterStatus' 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/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/files: 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 过滤 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 "400": description: 参数错误 schema: $ref: '#/definitions/response.Any' security: - SessionCookie: [] summary: 获取文件列表 tags: - admin /api/v1/admin/uploads/files/{id}: delete: description: 将指定 ID 的文件状态置为 deleted(软删除) parameters: - description: 文件 ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 删除成功 schema: $ref: '#/definitions/response.Any' "404": 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: 查询系统内所有不重复的上传业务分类标识(如 avatar, doc 等) produces: - application/json responses: "200": description: 查询成功 schema: allOf: - $ref: '#/definitions/response.Any' - properties: data: items: type: string type: array type: object 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/admin.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/admin.createUserRequest' produces: - application/json responses: "200": description: 创建成功 schema: allOf: - $ref: '#/definitions/response.Any' - properties: data: $ref: '#/definitions/admin.userResponse' 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/admin.userResponse' 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/admin.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/admin.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/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/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/models.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/models.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 /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"