diff --git a/docker-compose.yaml b/docker-compose.yaml index e86ba95..5b73742 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -23,7 +23,7 @@ services: restart: unless-stopped postgres-migrate: - image: postgres:17 + image: postgres:17.7 environment: POSTGRES_USER: ${DB_USERNAME} POSTGRES_PASSWORD: ${DB_PASSWORD} diff --git a/docs/api.yaml b/docs/api.yaml index 86703c8..19fef9a 100644 --- a/docs/api.yaml +++ b/docs/api.yaml @@ -1,441 +1,5893 @@ openapi: 3.1.0 info: - title: platform - description: 后端服务 API 列表 - version: 1.0.0 + title: 蓝狐后端接口 + version: 2026-06-01 + description: | + 基于 `web/routes.go`、当前 handler 和 service 实现整理。 + + 约定说明: + - 正式文档仅覆盖 `/api/*` 与 `/callback/*` 路由 + - `/debug/*` 为开发调试接口,不纳入正式对外规范 + - 除 `/api/auth/token` 外,错误响应默认由全局错误处理中间件以 `text/plain` 返回 + - 分页请求统一使用 `page` / `size`,默认页码 `1`,默认大小 `10`,最大 `100` servers: - - url: 'http://192.168.3.42:8080' - description: 本地开发环境 + - url: / + description: relative server root + +tags: + - name: public/auth + description: 公开认证接口 + - name: public/resource + description: 公开套餐接口 + - name: public/trade + description: 公开交易接口 + - name: public/inquiry + description: 公开咨询接口 + - name: public/product + description: 公开产品接口 + - name: client/verify + description: 客户端验证接口 + - name: client/proxy + description: 客户端代理接口 + - name: client/channel + description: 客户端通道接口 + - name: client/article + description: 客户端文章接口 + - name: user/user + description: 用户资料接口 + - name: user/whitelist + description: 用户白名单接口 + - name: user/resource + description: 用户套餐接口 + - name: user/batch + description: 用户批次接口 + - name: user/channel + description: 用户通道接口 + - name: user/trade + description: 用户交易接口 + - name: user/bill + description: 用户账单接口 + - name: user/balance + description: 用户余额变动接口 + - name: user/coupon-user + description: 用户已发放优惠券接口 + - name: user/announcement + description: 用户公告接口 + - name: user/verify + description: 用户验证接口 + - name: admin/admin + description: 管理员管理接口 + - name: admin/admin-role + description: 管理员角色接口 + - name: admin/permission + description: 权限接口 + - name: admin/user + description: 后台用户接口 + - name: admin/resource + description: 后台套餐接口 + - name: admin/batch + description: 后台批次接口 + - name: admin/channel + description: 后台通道接口 + - name: admin/proxy + description: 后台代理接口 + - name: admin/trade + description: 后台交易接口 + - name: admin/bill + description: 后台账单接口 + - name: admin/balance-activity + description: 后台余额变动接口 + - name: admin/product + description: 后台产品接口 + - name: admin/discount + description: 后台折扣接口 + - name: admin/coupon + description: 后台优惠券接口 + - name: admin/coupon-user + description: 后台已发放优惠券接口 + - name: admin/article + description: 后台文章接口 + - name: admin/article-group + description: 后台文章分组接口 + - name: callback/identify + description: 实名认证回调接口 components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + bearerFormat: UUID + description: | + 使用 `Authorization: Bearer `。 + 用户、管理员、客户端访问令牌均通过 `/api/auth/token` 获取。 + basicAuth: + type: http + scheme: basic + description: | + 官方客户端可使用 `Authorization: Basic `。 + + responses: + PlainTextError: + description: 业务错误或系统错误 + content: + text/plain: + schema: + type: string + OAuthError: + description: OAuth2 错误响应 + content: + application/json: + schema: + $ref: "#/components/schemas/TokenErrorResponse" + NoContent: + description: 成功,无响应体 + schemas: + BaseModel: + type: object + properties: + id: + type: integer + created_at: + type: string + format: date-time + updated_at: + type: string + format: date-time + required: + - id + - created_at + - updated_at + PageRequest: type: object properties: page: type: integer - description: 页码,从1开始 + minimum: 1 default: 1 size: type: integer - description: 每页条数 - default: 10 + minimum: 1 maximum: 100 + default: 10 - PageResponse: + PageMeta: type: object properties: total: type: integer - description: 总记录数 page: type: integer - description: 当前页码 size: type: integer - description: 每页大小 - list: - type: array - description: 数据列表 - items: - type: object required: - total - page - size - - list - Edge: + IdRequest: type: object properties: + id: + type: integer + required: + - id + AuthorizePostRequest: + type: object + properties: + accept: + type: boolean + scope: + type: string -tags: - - name: Auth - description: 认证授权相关接口 - - name: User - description: 用户相关接口 - - name: Channel - description: 通道相关接口 - - name: Whitelist - description: 白名单相关接口 - - name: Resource - description: 套餐资源相关接口 - - name: Bill - description: 账单相关接口 - - name: Trade - description: 交易相关接口 - - name: Announcement - description: 公告相关接口 + TokenRequest: + type: object + properties: + grant_type: + type: string + enum: + - authorization_code + - client_credentials + - refresh_token + - password + client_id: + type: string + client_secret: + type: string + scope: + type: string + code: + type: string + redirect_uri: + type: string + code_verifier: + type: string + refresh_token: + type: string + login_type: + type: string + enum: + - password + - phone_code + - email_code + login_pool: + type: string + enum: + - user + - admin + username: + type: string + password: + type: string + remember: + type: boolean + required: + - grant_type + + TokenResponse: + type: object + properties: + access_token: + type: string + refresh_token: + type: string + expires_in: + type: integer + token_type: + type: string + example: Bearer + scope: + type: string + required: + - access_token + - expires_in + - token_type + + TokenErrorResponse: + type: object + properties: + error: + type: string + error_description: + type: string + required: + - error + + RevokeRequest: + type: object + properties: + access_token: + type: string + refresh_token: + type: string + + IntrospectUserResponse: + type: object + description: 当前实现返回用户资料,并额外包含 `has_password` + properties: + id: + type: integer + phone: + type: string + username: + type: string + email: + type: string + name: + type: string + avatar: + type: string + status: + type: integer + balance: + type: string + id_type: + type: integer + id_no: + type: string + contact_qq: + type: string + contact_wechat: + type: string + has_password: + type: boolean + additionalProperties: true + + IntrospectAdminResponse: + type: object + description: 当前实现返回管理员资料,并额外包含 `scopes` + properties: + id: + type: integer + username: + type: string + name: + type: string + avatar: + type: string + phone: + type: string + email: + type: string + status: + type: integer + lock: + type: boolean + scopes: + type: array + items: + type: string + additionalProperties: true + + VerifierRequest: + type: object + properties: + purpose: + type: integer + description: 0=登录,1=修改密码 + enum: [0, 1] + phone: + type: string + required: + - purpose + - phone + + CreateInquiryRequest: + type: object + properties: + company: + type: string + maxLength: 200 + name: + type: string + maxLength: 100 + phone: + type: string + maxLength: 20 + email: + type: string + format: email + maxLength: 100 + content: + type: string + maxLength: 1000 + required: + - name + - phone + - content + + UpdateUserRequest: + type: object + properties: + username: + type: string + email: + type: string + format: email + contact_qq: + type: string + contact_wechat: + type: string + + UpdateAccountRequest: + type: object + properties: + username: + type: string + password: + type: string + + UpdatePasswordRequest: + type: object + properties: + code: + type: string + password: + type: string + required: + - code + - password + + IdentifyRequest: + type: object + properties: + type: + type: integer + enum: [1, 2] + description: 1=个人认证,2=企业认证 + name: + type: string + iden_no: + type: string + required: + - type + - name + - iden_no + + IdentifyResponse: + type: object + properties: + identified: + type: boolean + target: + type: string + required: + - identified + + ListWhitelistRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + + CreateWhitelistRequest: + type: object + properties: + host: + type: string + remark: + type: string + required: + - host + + UpdateWhitelistRequest: + type: object + properties: + id: + type: integer + host: + type: string + remark: + type: string + required: + - id + + RemoveWhitelistItem: + type: object + properties: + id: + type: integer + required: + - id + + CreateResourceData: + type: object + properties: + type: + type: integer + enum: [1, 2] + description: 1=短效动态,2=长效动态 + short: + $ref: "#/components/schemas/CreateShortResourceData" + long: + $ref: "#/components/schemas/CreateLongResourceData" + coupon: + type: integer + description: 已发放优惠券 ID + required: + - type + + CreateShortResourceData: + type: object + properties: + live: + type: integer + mode: + type: integer + enum: [1, 2] + description: 1=包时,2=包量 + quota: + type: integer + expire: + type: integer + description: 包时模式下的过期天数 + required: + - live + - mode + - quota + + CreateLongResourceData: + type: object + properties: + live: + type: integer + mode: + type: integer + enum: [1, 2] + quota: + type: integer + expire: + type: integer + required: + - live + - mode + - quota + + PageResourceShortRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + resource_no: + type: string + active: + type: boolean + type: + type: integer + create_after: + type: string + format: date-time + create_before: + type: string + format: date-time + expire_after: + type: string + format: date-time + expire_before: + type: string + format: date-time + status: + type: integer + description: 0=全部,1=有效,2=过期 + + PageResourceLongRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + resource_no: + type: string + active: + type: boolean + type: + type: integer + create_after: + type: string + format: date-time + create_before: + type: string + format: date-time + expire_after: + type: string + format: date-time + expire_before: + type: string + format: date-time + status: + type: integer + description: 0=全部,1=有效,2=过期 + + UpdateResourceCheckIpRequest: + type: object + properties: + id: + type: integer + checkip: + type: boolean + required: + - id + - checkip + + UpdateResourceByAdminRequest: + type: object + properties: + id: + type: integer + active: + type: boolean + checkip: + type: boolean + required: + - id + + ResourcePriceResponse: + type: object + properties: + price: + type: string + discounted: + type: string + actual: + type: string + required: + - price + - discounted + - actual + + StatisticPersonalResponse: + type: object + properties: + short: + type: object + properties: + resource_count: + type: integer + resource_quota_sum: + type: integer + resource_daily_free_sum: + type: integer + long: + type: object + properties: + resource_count: + type: integer + resource_quota_sum: + type: integer + resource_daily_free_sum: + type: integer + + StatisticResourceUsageRequest: + type: object + properties: + time_start: + type: string + format: date-time + time_end: + type: string + format: date-time + + StatisticResourceUsageItem: + type: object + properties: + date: + type: string + format: date-time + count: + type: integer + required: + - date + - count + + PageBatchRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + resource_no: + type: string + time_start: + type: string + format: date-time + time_end: + type: string + format: date-time + + PageBatchByAdminRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + user_phone: + type: string + resource_no: + type: string + batch_no: + type: string + prov: + type: string + city: + type: string + isp: + type: string + created_at_start: + type: string + format: date-time + created_at_end: + type: string + format: date-time + + PageBatchOfUserByAdminRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + user_id: + type: integer + resource_no: + type: string + batch_no: + type: string + prov: + type: string + city: + type: string + isp: + type: string + created_at_start: + type: string + format: date-time + created_at_end: + type: string + format: date-time + required: + - user_id + + ListChannelsRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + auth_type: + type: integer + enum: [1, 2] + description: 1=白名单鉴权,2=账号密码鉴权,0 或缺省=全部 + expire_after: + type: string + format: date-time + expire_before: + type: string + format: date-time + + CreateChannelRequest: + type: object + properties: + resource_id: + type: integer + auth_type: + type: integer + enum: [1, 2] + protocol: + type: integer + count: + type: integer + prov: + type: string + city: + type: string + isp: + type: integer + required: + - resource_id + - auth_type + - protocol + - count + + CreateChannelRequestV2: + type: object + properties: + resource_no: + type: string + auth_type: + type: integer + enum: [1, 2] + protocol: + type: integer + count: + type: integer + prov: + type: string + city: + type: string + isp: + type: integer + required: + - resource_no + - auth_type + - protocol + - count + + CreateChannelResponseItem: + type: object + properties: + host: + type: string + ip: + type: string + port: + type: integer + username: + type: string + password: + type: string + required: + - host + - ip + - port + + RemoveChannelsRequest: + type: object + properties: + batch: + type: string + required: + - batch + + PageChannelsByAdminRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + user_phone: + type: string + resource_no: + type: string + batch_no: + type: string + proxy_host: + type: string + proxy_port: + type: integer + node_ip: + type: string + expired_at_start: + type: string + format: date-time + expired_at_end: + type: string + format: date-time + expired: + type: boolean + + PageChannelOfUserByAdminRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + user_id: + type: integer + resource_no: + type: string + batch_no: + type: string + proxy_host: + type: string + proxy_port: + type: integer + expired_at_start: + type: string + format: date-time + expired_at_end: + type: string + format: date-time + required: + - user_id + + SyncChannelClearExpiredRequest: + type: object + properties: + proxy_id: + type: integer + required: + - proxy_id + + SyncChannelClearExpiredResponse: + type: object + properties: + count: + type: integer + required: + - count + + CreateTradeData: + type: object + properties: + platform: + type: integer + enum: [1, 2] + description: 1=电脑网站,2=手机网站 + method: + type: integer + enum: [1, 2, 3, 4, 5] + description: 1=支付宝,2=微信,3=商福通,4=商福通支付宝,5=商福通微信 + required: + - platform + - method + + UpdateBalanceData: + type: object + properties: + amount: + type: integer + description: 充值金额,单位分 + required: + - amount + + TradeCreateRequest: + allOf: + - $ref: "#/components/schemas/CreateTradeData" + - type: object + properties: + type: + type: integer + enum: [1, 2] + description: 1=购买产品,2=充值余额 + resource: + $ref: "#/components/schemas/CreateResourceData" + recharge: + $ref: "#/components/schemas/UpdateBalanceData" + required: + - type + + TradeRef: + type: object + properties: + trade_no: + type: string + method: + type: integer + enum: [1, 2, 3, 4, 5] + required: + - trade_no + - method + + TradeCompleteByAdminRequest: + allOf: + - $ref: "#/components/schemas/TradeRef" + - type: object + properties: + user_id: + type: integer + required: + - user_id + + CreateTradeResult: + type: object + properties: + pay_url: + type: string + trade_no: + type: string + required: + - pay_url + - trade_no + + PageTradeByAdminRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + user_phone: + type: string + inner_no: + type: string + outer_no: + type: string + method: + type: integer + platform: + type: integer + status: + type: integer + created_at_start: + type: string + format: date-time + created_at_end: + type: string + format: date-time + + PageTradeOfUserByAdminRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + user_id: + type: integer + inner_no: + type: string + outer_no: + type: string + method: + type: integer + platform: + type: integer + status: + type: integer + created_at_start: + type: string + format: date-time + created_at_end: + type: string + format: date-time + required: + - user_id + + ListBillRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + bill_no: + type: string + type: + type: integer + description: 1=消费,2=退款,3=充值 + create_after: + type: string + format: date-time + create_before: + type: string + format: date-time + + PageBillByAdminRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + user_phone: + type: string + trade_inner_no: + type: string + resource_no: + type: string + bill_no: + type: string + created_at_start: + type: string + format: date-time + created_at_end: + type: string + format: date-time + product_code: + type: string + sku_code: + type: string + + PageBillOfUserByAdminRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + user_id: + type: integer + trade_inner_no: + type: string + resource_no: + type: string + bill_no: + type: string + created_at_start: + type: string + format: date-time + created_at_end: + type: string + format: date-time + product_code: + type: string + sku_code: + type: string + required: + - user_id + + PageBalanceActivityByUserRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + bill_no: + type: string + created_at_start: + type: string + format: date-time + created_at_end: + type: string + format: date-time + + PageBalanceActivityByAdminRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + user_phone: + type: string + bill_no: + type: string + created_at_start: + type: string + format: date-time + created_at_end: + type: string + format: date-time + + PageBalanceActivityOfUserByAdminRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + user_id: + type: integer + bill_no: + type: string + created_at_start: + type: string + format: date-time + created_at_end: + type: string + format: date-time + required: + - user_id + + CouponUserPageFilter: + type: object + properties: + coupon_id: + type: integer + coupon_name: + type: string + status: + type: integer + enum: [0, 1, 2] + description: 0=未使用,1=已使用,2=已禁用 + expired: + type: boolean + created_at_start: + type: string + format: date-time + created_at_end: + type: string + format: date-time + expire_at_start: + type: string + format: date-time + expire_at_end: + type: string + format: date-time + used_at_start: + type: string + format: date-time + used_at_end: + type: string + format: date-time + + PageCouponUserRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - $ref: "#/components/schemas/CouponUserPageFilter" + + PageCouponUserByAdminRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - $ref: "#/components/schemas/CouponUserPageFilter" + - type: object + properties: + user_id: + type: integer + user_phone: + type: string + + PageCouponUserOfUserByAdminRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - $ref: "#/components/schemas/CouponUserPageFilter" + - type: object + properties: + user_id: + type: integer + required: + - user_id + + CreateCouponUserRequest: + type: object + properties: + coupon_id: + type: integer + user_id: + type: integer + status: + type: integer + enum: [0, 1, 2] + expire_at: + type: string + format: date-time + used_at: + type: string + format: date-time + required: + - coupon_id + - user_id + + UpdateCouponUserRequest: + type: object + properties: + id: + type: integer + status: + type: integer + enum: [0, 1, 2] + expire_at: + type: string + format: date-time + expire_at_clear: + type: boolean + used_at: + type: string + format: date-time + used_at_clear: + type: boolean + required: + - id + + AssignCouponRequest: + type: object + properties: + coupon_id: + type: integer + user_id: + type: integer + required: + - coupon_id + - user_id + + ListAnnouncementsRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + + PageUserByAdminRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + account: + type: string + name: + type: string + identified: + type: boolean + enabled: + type: boolean + assigned: + type: boolean + created_at_start: + type: string + format: date-time + created_at_end: + type: string + format: date-time + + GetUserByAdminRequest: + type: object + properties: + account: + type: string + name: + type: string + + CreateUserByAdminRequest: + type: object + properties: + phone: + type: string + admin_id: + type: integer + discount_id: + type: integer + username: + type: string + email: + type: string + format: email + password: + type: string + avatar: + type: string + status: + type: integer + enum: [0, 1] + contact_qq: + type: string + contact_wechat: + type: string + required: + - phone + + UpdateUserByAdminRequest: + type: object + properties: + id: + type: integer + phone: + type: string + admin_id: + type: integer + discount_id: + type: integer + username: + type: string + email: + type: string + format: email + password: + type: string + name: + type: string + avatar: + type: string + status: + type: integer + enum: [0, 1] + id_type: + type: integer + enum: [0, 1, 2] + id_no: + type: string + id_token: + type: string + contact_qq: + type: string + contact_wechat: + type: string + required: + - id + + UpdateUserBalanceRequest: + type: object + properties: + user_id: + type: integer + balance: + type: string + required: + - user_id + - balance + + UpdateUserBalanceChangeRequest: + type: object + properties: + user_id: + type: integer + amount: + type: string + required: + - user_id + - amount + + BindAdminRequest: + type: object + properties: + user_id: + type: integer + required: + - user_id + + PageUserNotBindByAdminRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + phone: + type: string + + CreateAdminRequest: + type: object + properties: + username: + type: string + password: + type: string + name: + type: string + avatar: + type: string + phone: + type: string + email: + type: string + format: email + status: + type: integer + enum: [0, 1] + roles: + type: array + items: + type: integer + required: + - username + - password + + UpdateAdminRequest: + type: object + properties: + id: + type: integer + password: + type: string + name: + type: string + avatar: + type: string + phone: + type: string + email: + type: string + format: email + status: + type: integer + enum: [0, 1] + roles: + type: array + items: + type: integer + required: + - id + + CreateAdminRoleRequest: + type: object + properties: + name: + type: string + description: + type: string + active: + type: boolean + sort: + type: integer + permissions: + type: array + items: + type: integer + required: + - name + + UpdateAdminRoleRequest: + type: object + properties: + id: + type: integer + name: + type: string + description: + type: string + active: + type: boolean + sort: + type: integer + permissions: + type: array + items: + type: integer + required: + - id + + PageResourceShortByAdminRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + user_phone: + type: string + resource_no: + type: string + active: + type: boolean + mode: + type: integer + created_at_start: + type: string + format: date-time + created_at_end: + type: string + format: date-time + expired: + type: boolean + + PageResourceLongByAdminRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + user_phone: + type: string + resource_no: + type: string + active: + type: boolean + mode: + type: integer + created_at_start: + type: string + format: date-time + created_at_end: + type: string + format: date-time + expired: + type: boolean + + PageResourceShortOfUserByAdminRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + user_id: + type: integer + resource_no: + type: string + active: + type: boolean + mode: + type: integer + created_at_start: + type: string + format: date-time + created_at_end: + type: string + format: date-time + required: + - user_id + + PageResourceLongOfUserByAdminRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + user_id: + type: integer + resource_no: + type: string + active: + type: boolean + mode: + type: integer + created_at_start: + type: string + format: date-time + created_at_end: + type: string + format: date-time + required: + - user_id + + CreateProxyRequest: + type: object + properties: + mac: + type: string + ip: + type: string + host: + type: string + secret: + type: string + type: + type: integer + enum: [1, 2] + status: + type: integer + enum: [0, 1] + required: + - mac + - ip + + UpdateProxyRequest: + type: object + properties: + id: + type: integer + mac: + type: string + ip: + type: string + host: + type: string + secret: + type: string + required: + - id + + UpdateProxyStatusRequest: + type: object + properties: + id: + type: integer + status: + type: integer + enum: [0, 1] + required: + - id + - status + + ProxyEdge: + type: object + properties: + id: + type: integer + host: + type: string + port: + type: integer + prov: + type: string + city: + type: string + isp: + type: string + status: + type: integer + loss: + type: integer + latency: + type: integer + + ProxyPermit: + type: object + properties: + id: + type: integer + expire: + type: string + format: date-time + whitelists: + type: array + items: + type: string + username: + type: string + password: + type: string + + ProxyReportOnlineRequest: + type: object + properties: + name: + type: string + version: + type: integer + required: + - name + - version + + ProxyReportOfflineRequest: + type: object + properties: + id: + type: integer + required: + - id + + ProxyReportUpdateRequest: + type: object + properties: + id: + type: integer + edges: + type: array + items: + $ref: "#/components/schemas/ProxyEdge" + required: + - id + - edges + + ProxyUnavailableResponse: + type: object + properties: + error: + type: string + required: + - error + + CreateProductRequest: + type: object + properties: + code: + type: string + name: + type: string + description: + type: string + sort: + type: integer + status: + type: integer + + UpdateProductRequest: + type: object + properties: + id: + type: integer + code: + type: string + name: + type: string + description: + type: string + sort: + type: integer + status: + type: integer + required: + - id + + AllProductSkuByAdminRequest: + type: object + properties: + product_code: + type: string + + PageProductSkuByAdminRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + product_id: + type: integer + + CreateProductSkuRequest: + type: object + properties: + product_id: + type: integer + discount_id: + type: integer + code: + type: string + name: + type: string + price: + type: string + price_min: + type: string + sort: + type: integer + count_min: + type: integer + required: + - product_id + - discount_id + - code + - name + - price + - price_min + - sort + + UpdateProductSkuRequest: + type: object + properties: + id: + type: integer + discount_id: + type: integer + code: + type: string + name: + type: string + price: + type: string + price_min: + type: string + status: + type: integer + sort: + type: integer + count_min: + type: integer + required: + - id + + UpdateProductSkuStatusRequest: + type: object + properties: + id: + type: integer + status: + type: integer + required: + - id + - status + + BatchUpdateSkuDiscountRequest: + type: object + properties: + product_id: + type: integer + discount_id: + type: integer + required: + - product_id + - discount_id + + CreateDiscountRequest: + type: object + properties: + name: + type: string + discount: + type: integer + required: + - name + - discount + + UpdateDiscountRequest: + type: object + properties: + id: + type: integer + name: + type: string + discount: + type: integer + required: + - id + + CreateCouponRequest: + type: object + properties: + name: + type: string + amount: + type: string + min_amount: + type: string + count: + type: integer + status: + type: integer + enum: [0, 1] + expire_type: + type: integer + enum: [0, 1, 2] + expire_at: + type: string + format: date-time + expire_in: + type: integer + required: + - name + - amount + + UpdateCouponRequest: + type: object + properties: + id: + type: integer + name: + type: string + amount: + type: string + min_amount: + type: string + count: + type: integer + status: + type: integer + enum: [0, 1] + expire_type: + type: integer + enum: [0, 1, 2] + expire_at: + type: string + format: date-time + expire_in: + type: integer + required: + - id + + PageArticleRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + keyword: + type: string + group_id: + type: integer + status: + type: integer + enum: [0, 1] + + CreateArticleRequest: + type: object + properties: + group_id: + type: integer + title: + type: string + content: + type: string + sort: + type: integer + status: + type: integer + enum: [0, 1] + required: + - group_id + - title + + UpdateArticleRequest: + type: object + properties: + id: + type: integer + group_id: + type: integer + title: + type: string + content: + type: string + sort: + type: integer + status: + type: integer + enum: [0, 1] + required: + - id + + PageArticleGroupRequest: + allOf: + - $ref: "#/components/schemas/PageRequest" + - type: object + properties: + keyword: + type: string + status: + type: integer + enum: [0, 1] + + CreateArticleGroupRequest: + type: object + properties: + name: + type: string + code: + type: string + sort: + type: integer + status: + type: integer + enum: [0, 1] + required: + - name + - code + + UpdateArticleGroupRequest: + type: object + properties: + id: + type: integer + name: + type: string + code: + type: string + sort: + type: integer + status: + type: integer + enum: [0, 1] + required: + - id + + ArticleNavArticle: + type: object + properties: + id: + type: integer + title: + type: string + updated_at: + type: string + format: date-time + required: + - id + - title + - updated_at + + ArticleNavGroup: + type: object + properties: + id: + type: integer + name: + type: string + code: + type: string + articles: + type: array + items: + $ref: "#/components/schemas/ArticleNavArticle" + required: + - id + - name + - code + - articles + + ArticlePublicGroup: + type: object + properties: + id: + type: integer + name: + type: string + code: + type: string + required: + - id + - name + - code + + ArticlePublicDetail: + type: object + properties: + id: + type: integer + title: + type: string + content: + type: string + updated_at: + type: string + format: date-time + group: + $ref: "#/components/schemas/ArticlePublicGroup" + required: + - id + - title + - updated_at + - group + + AdminNameOnly: + type: object + properties: + name: + type: string + + UserSummary: + type: object + properties: + id: + type: integer + phone: + type: string + name: + type: string + required: + - id + - phone + + DiscountItem: + allOf: + - $ref: "#/components/schemas/BaseModel" + - type: object + properties: + name: + type: string + discount: + type: integer + required: + - name + - discount + + PermissionItem: + allOf: + - $ref: "#/components/schemas/BaseModel" + - type: object + properties: + parent_id: + type: integer + name: + type: string + description: + type: string + sort: + type: integer + required: + - name + - sort + + AdminRoleListItem: + allOf: + - $ref: "#/components/schemas/BaseModel" + - type: object + properties: + name: + type: string + description: + type: string + active: + type: boolean + sort: + type: integer + required: + - name + - active + - sort + + AdminRolePageItem: + allOf: + - $ref: "#/components/schemas/AdminRoleListItem" + - type: object + properties: + permissions: + type: array + items: + $ref: "#/components/schemas/PermissionItem" + + AdminListItem: + allOf: + - $ref: "#/components/schemas/BaseModel" + - type: object + properties: + username: + type: string + name: + type: string + avatar: + type: string + phone: + type: string + email: + type: string + status: + type: integer + last_login: + type: string + format: date-time + last_login_ip: + type: string + last_login_ua: + type: string + lock: + type: boolean + required: + - username + - status + - lock + + AdminPageItem: + allOf: + - $ref: "#/components/schemas/AdminListItem" + - type: object + properties: + roles: + type: array + items: + $ref: "#/components/schemas/AdminRoleListItem" + + ProxyItem: + allOf: + - $ref: "#/components/schemas/BaseModel" + - type: object + properties: + mac: + type: string + ip: + type: string + host: + type: string + secret: + type: string + type: + type: integer + status: + type: integer + required: + - mac + - ip + - type + - status + + ProductAdminItem: + allOf: + - $ref: "#/components/schemas/BaseModel" + - type: object + properties: + code: + type: string + name: + type: string + description: + type: string + sort: + type: integer + status: + type: integer + required: + - code + - name + - sort + - status + + ProductSaleSkuItem: + type: object + properties: + id: + type: integer + product_id: + type: integer + name: + type: string + code: + type: string + price: + type: string + count_min: + type: integer + required: + - id + - product_id + - name + - code + - price + - count_min + + ProductSaleItem: + type: object + properties: + id: + type: integer + code: + type: string + name: + type: string + description: + type: string + sort: + type: integer + skus: + type: array + items: + $ref: "#/components/schemas/ProductSaleSkuItem" + required: + - id + - code + - name + - sort + - skus + + ProductSkuListItem: + allOf: + - $ref: "#/components/schemas/BaseModel" + - type: object + properties: + product_id: + type: integer + discount_id: + type: integer + code: + type: string + name: + type: string + price: + type: string + price_min: + type: string + status: + type: integer + sort: + type: integer + count_min: + type: integer + required: + - product_id + - discount_id + - code + - name + - price + - price_min + - status + - sort + - count_min + + ProductSkuPageItem: + allOf: + - $ref: "#/components/schemas/ProductSkuListItem" + - type: object + properties: + product: + $ref: "#/components/schemas/ProductAdminItem" + discount: + $ref: "#/components/schemas/DiscountItem" + + CouponItem: + allOf: + - $ref: "#/components/schemas/BaseModel" + - type: object + properties: + name: + type: string + amount: + type: string + min_amount: + type: string + count: + type: integer + status: + type: integer + expire_type: + type: integer + expire_at: + type: string + format: date-time + expire_in: + type: integer + required: + - name + - amount + - min_amount + - count + - status + - expire_type + + Whitelist: + allOf: + - $ref: "#/components/schemas/BaseModel" + - type: object + properties: + user_id: + type: integer + ip: + type: string + remark: + type: string + required: + - user_id + - ip + + Announcement: + allOf: + - $ref: "#/components/schemas/BaseModel" + - type: object + properties: + title: + type: string + content: + type: string + type: + type: integer + pin: + type: boolean + status: + type: integer + sort: + type: integer + required: + - title + - type + - pin + - status + - sort + + ArticleGroupItem: + allOf: + - $ref: "#/components/schemas/BaseModel" + - type: object + properties: + name: + type: string + code: + type: string + sort: + type: integer + status: + type: integer + required: + - name + - code + - sort + - status + + ArticlePageItem: + allOf: + - $ref: "#/components/schemas/BaseModel" + - type: object + properties: + group_id: + type: integer + title: + type: string + sort: + type: integer + status: + type: integer + group: + $ref: "#/components/schemas/ArticleGroupItem" + required: + - group_id + - title + - sort + - status + + ArticleDetail: + allOf: + - $ref: "#/components/schemas/ArticlePageItem" + - type: object + properties: + content: + type: string + + DiscountSummary: + $ref: "#/components/schemas/DiscountItem" + + ResourceSummary: + type: object + properties: + resource_no: + type: string + type: + type: integer + + BillSummary: + type: object + properties: + id: + type: integer + bill_no: + type: string + + TradeSummary: + type: object + properties: + inner_no: + type: string + acquirer: + type: integer + + SkuNameOnly: + type: object + properties: + name: + type: string + + ResourceBase: + allOf: + - $ref: "#/components/schemas/BaseModel" + - type: object + properties: + user_id: + type: integer + resource_no: + type: string + active: + type: boolean + type: + type: integer + code: + type: string + checkip: + type: boolean + required: + - user_id + - active + - type + - code + - checkip + + ResourceShortInfo: + type: object + properties: + id: + type: integer + resource_id: + type: integer + code: + type: string + live: + type: integer + type: + type: integer + quota: + type: integer + expire_at: + type: string + format: date-time + used: + type: integer + daily: + type: integer + last_at: + type: string + format: date-time + required: + - id + - resource_id + - code + - live + - type + - quota + - used + - daily + + ResourceLongInfo: + type: object + properties: + id: + type: integer + resource_id: + type: integer + code: + type: string + live: + type: integer + type: + type: integer + quota: + type: integer + expire_at: + type: string + format: date-time + used: + type: integer + daily: + type: integer + last_at: + type: string + format: date-time + required: + - id + - resource_id + - code + - live + - type + - quota + - used + - daily + + ResourceShortAdminInfo: + allOf: + - $ref: "#/components/schemas/ResourceShortInfo" + - type: object + properties: + sku: + $ref: "#/components/schemas/SkuNameOnly" + + ResourceLongAdminInfo: + allOf: + - $ref: "#/components/schemas/ResourceLongInfo" + - type: object + properties: + sku: + $ref: "#/components/schemas/SkuNameOnly" + + ResourceShortListItem: + allOf: + - $ref: "#/components/schemas/ResourceBase" + - type: object + properties: + short: + $ref: "#/components/schemas/ResourceShortInfo" + + ResourceLongListItem: + allOf: + - $ref: "#/components/schemas/ResourceBase" + - type: object + properties: + long: + $ref: "#/components/schemas/ResourceLongInfo" + + ResourceAllItem: + oneOf: + - $ref: "#/components/schemas/ResourceShortListItem" + - $ref: "#/components/schemas/ResourceLongListItem" + + ResourceShortAdminItem: + allOf: + - $ref: "#/components/schemas/ResourceBase" + - type: object + properties: + user: + $ref: "#/components/schemas/UserSummary" + short: + $ref: "#/components/schemas/ResourceShortAdminInfo" + + ResourceLongAdminItem: + allOf: + - $ref: "#/components/schemas/ResourceBase" + - type: object + properties: + user: + $ref: "#/components/schemas/UserSummary" + long: + $ref: "#/components/schemas/ResourceLongAdminInfo" + + ChannelUserItem: + allOf: + - $ref: "#/components/schemas/BaseModel" + - type: object + properties: + user_id: + type: integer + resource_id: + type: integer + batch_no: + type: string + proxy_id: + type: integer + host: + type: string + port: + type: integer + edge_id: + type: integer + edge_ref: + type: string + filter_isp: + type: string + filter_prov: + type: string + filter_city: + type: string + ip: + type: string + whitelists: + type: string + username: + type: string + password: + type: string + expired_at: + type: string + format: date-time + required: + - user_id + - resource_id + - batch_no + - proxy_id + - host + - port + - expired_at + + ChannelAdminItem: + allOf: + - $ref: "#/components/schemas/ChannelUserItem" + - type: object + properties: + user: + $ref: "#/components/schemas/UserSummary" + resource: + $ref: "#/components/schemas/ResourceSummary" + + TradeAdminItem: + allOf: + - $ref: "#/components/schemas/BaseModel" + - type: object + properties: + user_id: + type: integer + inner_no: + type: string + outer_no: + type: string + type: + type: integer + subject: + type: string + remark: + type: string + amount: + type: string + payment: + type: string + method: + type: integer + platform: + type: integer + acquirer: + type: integer + status: + type: integer + refunded: + type: boolean + payment_url: + type: string + completed_at: + type: string + format: date-time + canceled_at: + type: string + format: date-time + user: + $ref: "#/components/schemas/UserSummary" + required: + - user_id + - inner_no + - type + - subject + - amount + - payment + - method + - platform + - status + - refunded + + BillUserItem: + allOf: + - $ref: "#/components/schemas/BaseModel" + - type: object + properties: + user_id: + type: integer + trade_id: + type: integer + resource_id: + type: integer + refund_id: + type: integer + coupon_user_id: + type: integer + bill_no: + type: string + info: + type: string + type: + type: integer + amount: + type: string + actual: + type: string + trade: + $ref: "#/components/schemas/TradeSummary" + resource: + $ref: "#/components/schemas/ResourceSummary" + required: + - user_id + - bill_no + - type + - amount + - actual + + BillAdminItem: + allOf: + - $ref: "#/components/schemas/BillUserItem" + - type: object + properties: + user: + $ref: "#/components/schemas/UserSummary" + + BalanceActivityUserItem: + type: object + properties: + id: + type: integer + user_id: + type: integer + bill_id: + type: integer + admin_id: + type: integer + amount: + type: string + balance_prev: + type: string + balance_curr: + type: string + remark: + type: string + created_at: + type: string + format: date-time + bill: + $ref: "#/components/schemas/BillSummary" + required: + - id + - user_id + - amount + - balance_prev + - balance_curr + - created_at + + BalanceActivityAdminItem: + allOf: + - $ref: "#/components/schemas/BalanceActivityUserItem" + - type: object + properties: + user: + $ref: "#/components/schemas/UserSummary" + admin: + $ref: "#/components/schemas/AdminNameOnly" + + BatchBaseItem: + type: object + properties: + id: + type: integer + user_id: + type: integer + resource_id: + type: integer + batch_no: + type: string + count: + type: integer + prov: + type: string + city: + type: string + isp: + type: string + ip: + type: string + time: + type: string + format: date-time + required: + - id + - user_id + - resource_id + - batch_no + - count + - ip + - time + + BatchUserItem: + allOf: + - $ref: "#/components/schemas/BatchBaseItem" + - type: object + properties: + resource: + $ref: "#/components/schemas/ResourceSummary" + + BatchAdminItem: + allOf: + - $ref: "#/components/schemas/BatchBaseItem" + - type: object + properties: + user: + $ref: "#/components/schemas/UserSummary" + resource: + $ref: "#/components/schemas/ResourceSummary" + + CouponUserUserItem: + type: object + properties: + id: + type: integer + coupon_id: + type: integer + user_id: + type: integer + status: + type: integer + expire_at: + type: string + format: date-time + used_at: + type: string + format: date-time + created_at: + type: string + format: date-time + coupon: + $ref: "#/components/schemas/CouponItem" + required: + - id + - coupon_id + - user_id + - status + - created_at + + CouponUserAdminItem: + allOf: + - $ref: "#/components/schemas/CouponUserUserItem" + - type: object + properties: + user: + $ref: "#/components/schemas/UserSummary" + + AdminUserPageItem: + type: object + properties: + id: + type: integer + created_at: + type: string + format: date-time + updated_at: + type: string + format: date-time + admin_id: + type: integer + discount_id: + type: integer + phone: + type: string + username: + type: string + email: + type: string + source: + type: integer + name: + type: string + avatar: + type: string + status: + type: integer + balance: + type: string + id_type: + type: integer + id_no: + type: string + description: 脱敏后的证件号 + id_token: + type: string + contact_qq: + type: string + contact_wechat: + type: string + last_login: + type: string + format: date-time + last_login_ip: + type: string + last_login_ua: + type: string + admin: + $ref: "#/components/schemas/AdminNameOnly" + discount: + $ref: "#/components/schemas/DiscountSummary" + required: + - id + - created_at + - updated_at + - phone + - status + - balance + - id_type + + AdminUserNotBindPageItem: + type: object + properties: + id: + type: integer + created_at: + type: string + format: date-time + updated_at: + type: string + format: date-time + admin_id: + type: integer + discount_id: + type: integer + phone: + type: string + username: + type: string + email: + type: string + source: + type: integer + name: + type: string + avatar: + type: string + status: + type: integer + balance: + type: string + id_type: + type: integer + id_token: + type: string + contact_qq: + type: string + contact_wechat: + type: string + last_login: + type: string + format: date-time + last_login_ip: + type: string + last_login_ua: + type: string + required: + - id + - created_at + - updated_at + - phone + - status + - balance + - id_type + + AdminUserDetail: + type: object + properties: + id: + type: integer + created_at: + type: string + format: date-time + updated_at: + type: string + format: date-time + admin_id: + type: integer + discount_id: + type: integer + phone: + type: string + username: + type: string + email: + type: string + source: + type: integer + name: + type: string + avatar: + type: string + status: + type: integer + balance: + type: string + id_type: + type: integer + id_no: + type: string + description: 原始证件号 + id_token: + type: string + contact_qq: + type: string + contact_wechat: + type: string + last_login: + type: string + format: date-time + last_login_ip: + type: string + last_login_ua: + type: string + admin: + $ref: "#/components/schemas/AdminNameOnly" + discount: + $ref: "#/components/schemas/DiscountSummary" + required: + - id + - created_at + - updated_at + - phone + - status + - balance + - id_type + + PageWhitelistResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/Whitelist" + required: + - list + + PageResourceShortResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/ResourceShortListItem" + required: + - list + + PageResourceLongResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/ResourceLongListItem" + required: + - list + + PageBatchUserResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/BatchUserItem" + required: + - list + + PageChannelUserResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/ChannelUserItem" + required: + - list + + PageBillUserResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/BillUserItem" + required: + - list + + PageBalanceActivityUserResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/BalanceActivityUserItem" + required: + - list + + PageCouponUserUserResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/CouponUserUserItem" + required: + - list + + PageAnnouncementResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/Announcement" + required: + - list + + PageAdminResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/AdminPageItem" + required: + - list + + PageAdminRoleResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/AdminRolePageItem" + required: + - list + + PagePermissionResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/PermissionItem" + required: + - list + + PageAdminUserResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/AdminUserPageItem" + required: + - list + + PageAdminUserNotBindResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/AdminUserNotBindPageItem" + required: + - list + + PageResourceShortAdminResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/ResourceShortAdminItem" + required: + - list + + PageResourceLongAdminResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/ResourceLongAdminItem" + required: + - list + + PageBatchAdminResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/BatchAdminItem" + required: + - list + + PageChannelAdminResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/ChannelAdminItem" + required: + - list + + PageProxyResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/ProxyItem" + required: + - list + + PageTradeAdminResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/TradeAdminItem" + required: + - list + + PageBillAdminResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/BillAdminItem" + required: + - list + + PageBalanceActivityAdminResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/BalanceActivityAdminItem" + required: + - list + + PageProductSkuAdminResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/ProductSkuPageItem" + required: + - list + + PageDiscountResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/DiscountItem" + required: + - list + + PageCouponResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/CouponItem" + required: + - list + + PageCouponUserAdminResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/CouponUserAdminItem" + required: + - list + + PageArticleResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/ArticlePageItem" + required: + - list + + PageArticleGroupResponse: + allOf: + - $ref: "#/components/schemas/PageMeta" + - type: object + properties: + list: + type: array + items: + $ref: "#/components/schemas/ArticleGroupItem" + required: + - list paths: + /api/auth/authorize: + get: + tags: [public/auth] + summary: 授权确认页占位接口 + description: 当前实现只校验参数与客户端,不返回确认页面内容。 + parameters: + - name: response_type + in: query + required: true + schema: + type: string + enum: [code] + - name: client_id + in: query + required: true + schema: + type: string + - name: redirect_uri + in: query + required: true + schema: + type: string + - name: scope + in: query + schema: + type: string + - name: state + in: query + schema: + type: string + responses: + "200": + description: 当前实现无响应体 + default: + $ref: "#/components/responses/PlainTextError" + post: + tags: [public/auth] + summary: 提交授权确认占位接口 + description: 当前实现为占位逻辑。 + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/AuthorizePostRequest" + responses: + "200": + description: 当前实现无响应体 + default: + $ref: "#/components/responses/PlainTextError" /api/auth/token: post: - tags: - - Auth - summary: OAuth2 Token 端点 - description: 获取访问令牌,支持授权码、密码、客户端凭据、刷新令牌四种授权方式 + tags: [public/auth] + summary: 获取访问令牌 + description: 支持 `authorization_code`、`client_credentials`、`refresh_token`、`password` 四种授权方式。 requestBody: required: true content: application/json: schema: - type: object - properties: - grant_type: - type: string - description: 授权类型 - enum: [ authorization_code, password, client_credentials, refresh_token ] - client_id: - type: string - description: 客户端ID - client_secret: - type: string - description: 客户端密钥 - code: - type: string - description: 授权码(authorization_code 模式使用) - redirect_uri: - type: string - description: 重定向URI(authorization_code 模式使用) - username: - type: string - description: 用户名(password 模式使用) - password: - type: string - description: 密码(password 模式使用) - refresh_token: - type: string - description: 刷新令牌(refresh_token 模式使用) - scope: - type: string - description: 权限范围 - required: - - grant_type + $ref: "#/components/schemas/TokenRequest" + application/x-www-form-urlencoded: + schema: + $ref: "#/components/schemas/TokenRequest" responses: - '200': - description: 认证成功 + "200": + description: 获取成功 content: application/json: schema: - type: object - properties: - access_token: - type: string - description: 访问令牌 - refresh_token: - type: string - description: 刷新令牌 - expires_in: - type: integer - description: 过期时间(秒) - token_type: - type: string - description: 令牌类型 - default: Bearer - scope: - type: string - description: 授权范围 - required: - - access_token - - expires_in - - token_type - '400': - description: 接口请求失败 - content: - application/json: - schema: - type: object - properties: - error: - type: integer - description: 错误码 - error_description: - type: string - description: 错误描述 - required: - - error - - error_description + $ref: "#/components/schemas/TokenResponse" + "400": + $ref: "#/components/responses/OAuthError" + "401": + $ref: "#/components/responses/OAuthError" + default: + $ref: "#/components/responses/PlainTextError" /api/auth/revoke: post: - tags: - - Auth - summary: OAuth2 Revoke 端点 - description: 撤销访问令牌或刷新令牌 + tags: [public/auth] + summary: 撤销令牌 + security: + - bearerAuth: [] requestBody: required: true content: application/json: schema: - type: object - required: true - properties: - access_token: - type: string - description: 访问令牌 - required: true - refresh_token: - type: string - description: 刷新令牌 - required: true + $ref: "#/components/schemas/RevokeRequest" responses: - '200': - description: 撤销成功 - content: - text/plain: - schema: false + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" /api/auth/introspect: post: - tags: - - Auth - summary: OAuth2 Introspect 端点 - description: 检查令牌的有效性和相关信息 + tags: [public/auth] + summary: 获取当前登录态信息 + security: + - bearerAuth: [] responses: - '200': - description: 检查成功 + "200": + description: 返回当前用户或管理员资料 content: application/json: schema: - type: object + oneOf: + - $ref: "#/components/schemas/IntrospectUserResponse" + - $ref: "#/components/schemas/IntrospectAdminResponse" + default: + $ref: "#/components/responses/PlainTextError" - /api/auth/verify/sms: + /api/resource/price: post: - tags: - - Auth - summary: 短信验证码验证 - description: 验证短信验证码 + tags: [public/resource] + summary: 计算套餐价格 + description: 可匿名调用;如果携带用户 Bearer Token,则价格计算会带入用户折扣/优惠券上下文。 + security: + - {} + - bearerAuth: [] requestBody: required: true content: application/json: schema: - type: object - required: true - properties: - purpose: - type: string - description: 验证码用途 - required: true - phone: - type: string - description: 手机号码 - required: true + $ref: "#/components/schemas/CreateResourceData" responses: - '200': - description: 验证成功 + "200": + description: 价格明细 content: - text/plain: - schema: false + application/json: + schema: + $ref: "#/components/schemas/ResourcePriceResponse" + default: + $ref: "#/components/responses/PlainTextError" - /api/user/update: - post: - tags: - - User - summary: 更新用户信息 - description: 更新用户基本信息 + /api/trade/check: + get: + tags: [public/trade] + summary: SSE 检查订单状态 + parameters: + - name: trade_no + in: query + required: true + schema: + type: string + - name: method + in: query + required: true + schema: + type: integer + enum: [1, 2, 3, 4, 5] + responses: + "200": + description: SSE 状态流 + content: + text/event-stream: + schema: + type: string + example: | + data: 0 + default: + $ref: "#/components/responses/PlainTextError" - /api/user/update/account: + /api/inquiry/create: post: - tags: - - User - summary: 更新账号信息 - description: 更新用户账号相关信息 + tags: [public/inquiry] + summary: 提交咨询 + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreateInquiryRequest" + responses: + "204": + $ref: "#/components/responses/NoContent" + default: + $ref: "#/components/responses/PlainTextError" - /api/user/update/password: + /api/product/list: post: - tags: - - User - summary: 更新密码 - description: 更新用户密码 + tags: [public/product] + summary: 获取在售产品列表 + responses: + "200": + description: 产品与在售 SKU 列表 + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/ProductSaleItem" + default: + $ref: "#/components/responses/PlainTextError" - /api/user/identify: + /api/verify/sms: post: - tags: - - User - summary: 用户身份认证 - description: 发起用户身份认证 + tags: [client/verify] + summary: 发送短信验证码 + description: 仅官方客户端可调用,可使用客户端 Basic 鉴权或客户端 Bearer 鉴权。 + security: + - basicAuth: [] + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/VerifierRequest" + responses: + "200": + description: 成功,无响应体 + "429": + $ref: "#/components/responses/PlainTextError" + default: + $ref: "#/components/responses/PlainTextError" - /api/user/identify/callback: + /api/proxy/online: post: - tags: - - User - summary: 身份认证回调 - description: 身份认证回调处理 + tags: [client/proxy] + summary: 代理上线报告 + description: 当前实现固定返回“接口暂不可用”。 + security: + - basicAuth: [] + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/ProxyReportOnlineRequest" + responses: + "200": + description: 当前实现返回不可用提示 + content: + application/json: + schema: + $ref: "#/components/schemas/ProxyUnavailableResponse" - /api/user/recharge/prepare/alipay: + /api/proxy/offline: post: - tags: - - User - summary: 准备支付宝充值 - description: 准备使用支付宝进行账户充值 + tags: [client/proxy] + summary: 代理下线报告 + description: 当前实现固定返回“接口暂不可用”。 + security: + - basicAuth: [] + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/ProxyReportOfflineRequest" + responses: + "200": + description: 当前实现返回不可用提示 + content: + application/json: + schema: + $ref: "#/components/schemas/ProxyUnavailableResponse" - /api/user/recharge/confirm/alipay: + /api/proxy/update: post: - tags: - - User - summary: 确认支付宝充值 - description: 确认支付宝充值结果 - - /api/user/recharge/prepare/wechat: - post: - tags: - - User - summary: 准备微信充值 - description: 准备使用微信进行账户充值 - - /api/user/recharge/confirm/wechat: - post: - tags: - - User - summary: 确认微信充值 - description: 确认微信充值结果 - - /api/channel/list: - post: - tags: - - Channel - summary: 获取通道列表 - description: 获取所有可用通道的列表 - - /api/channel/create: - post: - tags: - - Channel - summary: 创建通道 - description: 创建新的通道 + tags: [client/proxy] + summary: 代理状态更新 + description: 当前实现固定返回“接口暂不可用”。 + security: + - basicAuth: [] + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/ProxyReportUpdateRequest" + responses: + "200": + description: 当前实现返回不可用提示 + content: + application/json: + schema: + $ref: "#/components/schemas/ProxyUnavailableResponse" /api/channel/remove: post: - tags: - - Channel - summary: 删除通道 - description: 删除指定的通道 - - /api/whitelist/list: - post: - tags: - - Whitelist - summary: 获取白名单列表 - description: 获取所有白名单记录 - - /api/whitelist/create: - post: - tags: - - Whitelist - summary: 创建白名单 - description: 创建新的白名单记录 - - /api/whitelist/update: - post: - tags: - - Whitelist - summary: 更新白名单 - description: 更新指定的白名单记录 - - /api/whitelist/remove: - post: - tags: - - Whitelist - summary: 删除白名单 - description: 删除指定的白名单记录 - - /api/resource/list/pss: - post: - tags: - - Resource - summary: 获取套餐列表 - description: 获取所有可用套餐列表 - - /api/resource/all: - post: - tags: - - Resource - summary: 获取所有资源 - description: 获取所有可用资源信息 - - /api/resource/create/balance: - post: - tags: - - Resource - summary: 使用余额创建资源 - description: 使用账户余额购买资源 - - - /api/resource/prepare/alipay: - post: - tags: - - Resource - summary: 准备支付宝购买资源 - description: 准备使用支付宝购买资源 - - /api/resource/create/alipay: - post: - tags: - - Resource - summary: 确认支付宝购买资源 - description: 确认使用支付宝购买资源 - - /api/resource/prepare/wechat: - post: - tags: - - Resource - summary: 准备微信购买资源 - description: 准备使用微信购买资源 - - /api/resource/create/wechat: - post: - tags: - - Resource - summary: 确认微信购买资源 - description: 确认使用微信购买资源 - - /api/bill/list: - post: - tags: - - Bill - summary: 获取账单列表 - description: 获取用户账单记录列表 - - /api/trade/callback/alipay: - post: - tags: - - Trade - summary: 支付宝交易回调 - description: 处理支付宝交易回调通知 - - /api/announcement/list: - post: - tags: - - Announcement - summary: 获取公告列表 - description: 获取系统公告列表 - - /api/edge/all: - post: - tags: - - Edge - summary: 获取所有边缘节点 - description: 获取所有可用的边缘节点列表 + tags: [client/channel] + summary: 删除通道批次 + description: 仅官方客户端可调用。 + security: + - basicAuth: [] + - bearerAuth: [] requestBody: required: true content: application/json: schema: - type: object - properties: - prov: - type: string - description: 省份 - city: - type: string - description: 城市 - isp: - type: string - description: 运营商 + $ref: "#/components/schemas/RemoveChannelsRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + /api/article/nav: + post: + tags: [client/article] + summary: 获取文档导航 + description: 仅官方客户端可调用。 + security: + - basicAuth: [] + - bearerAuth: [] + responses: + "200": + description: 文档导航树 + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/ArticleNavGroup" + default: + $ref: "#/components/responses/PlainTextError" + /api/article/get: + post: + tags: [client/article] + summary: 获取文档详情 + description: 仅官方客户端可调用。 + security: + - basicAuth: [] + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/IdRequest" + responses: + "200": + description: 文档详情 + content: + application/json: + schema: + $ref: "#/components/schemas/ArticlePublicDetail" + default: + $ref: "#/components/responses/PlainTextError" + + /api/user/update: + post: + tags: [user/user] + summary: 更新用户资料 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateUserRequest" + responses: + "204": + $ref: "#/components/responses/NoContent" + default: + $ref: "#/components/responses/PlainTextError" + + /api/user/update/account: + post: + tags: [user/user] + summary: 更新用户名或密码 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateAccountRequest" + responses: + "204": + $ref: "#/components/responses/NoContent" + default: + $ref: "#/components/responses/PlainTextError" + + /api/user/update/password: + post: + tags: [user/user] + summary: 通过短信验证码修改密码 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdatePasswordRequest" + responses: + "204": + $ref: "#/components/responses/NoContent" + default: + $ref: "#/components/responses/PlainTextError" + + /api/user/identify: + post: + tags: [user/user] + summary: 发起实名认证 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/IdentifyRequest" + responses: + "200": + description: 返回认证跳转目标或已认证状态 + content: + application/json: + schema: + $ref: "#/components/schemas/IdentifyResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/whitelist/list: + post: + tags: [user/whitelist] + summary: 获取当前用户白名单 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ListWhitelistRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageWhitelistResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/whitelist/create: + post: + tags: [user/whitelist] + summary: 新建白名单 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreateWhitelistRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/whitelist/update: + post: + tags: [user/whitelist] + summary: 更新白名单 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateWhitelistRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/whitelist/remove: + post: + tags: [user/whitelist] + summary: 批量删除白名单 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/RemoveWhitelistItem" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/resource/all: + post: + tags: [user/resource] + summary: 获取当前用户全部可用套餐 + security: + - bearerAuth: [] + responses: + "200": + description: 套餐列表 + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/ResourceAllItem" + default: + $ref: "#/components/responses/PlainTextError" + + /api/resource/list/short: + post: + tags: [user/resource] + summary: 分页查询当前用户短效套餐 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageResourceShortRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageResourceShortResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/resource/list/long: + post: + tags: [user/resource] + summary: 分页查询当前用户长效套餐 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageResourceLongRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageResourceLongResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/resource/create: + post: + tags: [user/resource] + summary: 使用余额购买套餐 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreateResourceData" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/resource/update/checkip: + post: + tags: [user/resource] + summary: 修改套餐 IP 校验开关 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateResourceCheckIpRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/resource/statistics/free: + post: + tags: [user/resource] + summary: 统计当前用户每日可用额度 + security: + - bearerAuth: [] + responses: + "200": + description: 可用额度统计 + content: + application/json: + schema: + $ref: "#/components/schemas/StatisticPersonalResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/resource/statistics/usage: + post: + tags: [user/resource] + summary: 统计当前用户使用量 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/StatisticResourceUsageRequest" + responses: + "200": + description: 按天聚合的用量 + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/StatisticResourceUsageItem" + default: + $ref: "#/components/responses/PlainTextError" + + /api/batch/page: + post: + tags: [user/batch] + summary: 分页查询当前用户提取记录 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageBatchRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageBatchUserResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/channel/list: + post: + tags: [user/channel] + summary: 分页查询当前用户通道 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ListChannelsRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageChannelUserResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/channel/create: + post: + tags: [user/channel] + summary: 创建通道 + description: 当前实现不要求登录,但会校验套餐、实名认证和白名单条件。 + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreateChannelRequest" + responses: + "200": + description: 通道列表 + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/CreateChannelResponseItem" + default: + $ref: "#/components/responses/PlainTextError" + + /api/channel/create/v2: + post: + tags: [user/channel] + summary: 创建通道 v2 + description: 使用 `resource_no` 替代 `resource_id`。 + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreateChannelRequestV2" + responses: + "200": + description: 通道列表 + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/CreateChannelResponseItem" + default: + $ref: "#/components/responses/PlainTextError" + + /api/trade/create: + post: + tags: [user/trade] + summary: 创建订单 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/TradeCreateRequest" + responses: + "200": + description: 支付跳转结果 + content: + application/json: + schema: + $ref: "#/components/schemas/CreateTradeResult" + default: + $ref: "#/components/responses/PlainTextError" + + /api/trade/complete: + post: + tags: [user/trade] + summary: 完成订单 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/TradeRef" + responses: + "204": + $ref: "#/components/responses/NoContent" + default: + $ref: "#/components/responses/PlainTextError" + + /api/trade/cancel: + post: + tags: [user/trade] + summary: 取消订单 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/TradeRef" + responses: + "204": + $ref: "#/components/responses/NoContent" + default: + $ref: "#/components/responses/PlainTextError" + + /api/bill/list: + post: + tags: [user/bill] + summary: 分页查询当前用户账单 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ListBillRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageBillUserResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/balance/page: + post: + tags: [user/balance] + summary: 分页查询当前用户余额变动 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageBalanceActivityByUserRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageBalanceActivityUserResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/coupon-user/page: + post: + tags: [user/coupon-user] + summary: 分页查询当前用户已发放优惠券 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageCouponUserRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageCouponUserUserResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/coupon-user/get: + post: + tags: [user/coupon-user] + summary: 获取当前用户优惠券详情 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/IdRequest" + responses: + "200": + description: 优惠券详情 + content: + application/json: + schema: + $ref: "#/components/schemas/CouponUserUserItem" + default: + $ref: "#/components/responses/PlainTextError" + + /api/announcement/list: + post: + tags: [user/announcement] + summary: 分页查询公告 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ListAnnouncementsRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageAnnouncementResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/verify/sms/password: + post: + tags: [user/verify] + summary: 发送修改密码短信验证码 + security: + - bearerAuth: [] + responses: + "200": + description: 成功,无响应体 + "429": + $ref: "#/components/responses/PlainTextError" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/admin/all: + post: + tags: [admin/admin] + summary: 获取管理员列表 + security: + - bearerAuth: [] + responses: + "200": + description: 管理员数组 + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/AdminListItem" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/admin/page: + post: + tags: [admin/admin] + summary: 分页获取管理员 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageAdminResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/admin/create: + post: + tags: [admin/admin] + summary: 创建管理员 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreateAdminRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/admin/update: + post: + tags: [admin/admin] + summary: 更新管理员 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateAdminRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/admin/remove: + post: + tags: [admin/admin] + summary: 删除管理员 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/IdRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/admin-role/list: + post: + tags: [admin/admin-role] + summary: 获取管理员角色列表 + security: + - bearerAuth: [] + responses: + "200": + description: 角色数组 + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/AdminRoleListItem" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/admin-role/page: + post: + tags: [admin/admin-role] + summary: 分页获取管理员角色 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageAdminRoleResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/admin-role/create: + post: + tags: [admin/admin-role] + summary: 创建管理员角色 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreateAdminRoleRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/admin-role/update: + post: + tags: [admin/admin-role] + summary: 更新管理员角色 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateAdminRoleRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/admin-role/remove: + post: + tags: [admin/admin-role] + summary: 删除管理员角色 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/IdRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/permission/list: + post: + tags: [admin/permission] + summary: 获取权限列表 + security: + - bearerAuth: [] + responses: + "200": + description: 权限数组 + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/PermissionItem" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/permission/page: + post: + tags: [admin/permission] + summary: 分页获取权限 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PagePermissionResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/user/page: + post: + tags: [admin/user] + summary: 分页获取用户 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageUserByAdminRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageAdminUserResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/user/page/not-bind: + post: + tags: [admin/user] + summary: 分页获取未绑定管理员的用户 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageUserNotBindByAdminRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageAdminUserNotBindResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/user/get: + post: + tags: [admin/user] + summary: 获取单个用户 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/GetUserByAdminRequest" + responses: + "200": + description: 用户详情 + content: + application/json: + schema: + $ref: "#/components/schemas/AdminUserDetail" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/user/create: + post: + tags: [admin/user] + summary: 创建用户 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreateUserByAdminRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/user/update: + post: + tags: [admin/user] + summary: 更新用户 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateUserByAdminRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/user/remove: + post: + tags: [admin/user] + summary: 删除用户 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/IdRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/user/update/bind: + post: + tags: [admin/user] + summary: 认领用户 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/BindAdminRequest" + responses: + "204": + $ref: "#/components/responses/NoContent" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/user/update/balance: + post: + tags: [admin/user] + summary: 直接设置用户余额 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateUserBalanceRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/user/update/balance-inc: + post: + tags: [admin/user] + summary: 增加用户余额 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateUserBalanceChangeRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/user/update/balance-dec: + post: + tags: [admin/user] + summary: 减少用户余额 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateUserBalanceChangeRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/resource/short/page: + post: + tags: [admin/resource] + summary: 分页查询全部短效套餐 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageResourceShortByAdminRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageResourceShortAdminResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/resource/short/page/of-user: + post: + tags: [admin/resource] + summary: 分页查询指定用户短效套餐 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageResourceShortOfUserByAdminRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageResourceShortAdminResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/resource/long/page: + post: + tags: [admin/resource] + summary: 分页查询全部长效套餐 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageResourceLongByAdminRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageResourceLongAdminResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/resource/long/page/of-user: + post: + tags: [admin/resource] + summary: 分页查询指定用户长效套餐 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageResourceLongOfUserByAdminRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageResourceLongAdminResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/resource/update: + post: + tags: [admin/resource] + summary: 更新套餐状态 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateResourceByAdminRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/batch/page: + post: + tags: [admin/batch] + summary: 分页查询全部提取记录 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageBatchByAdminRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageBatchAdminResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/batch/page/of-user: + post: + tags: [admin/batch] + summary: 分页查询指定用户提取记录 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageBatchOfUserByAdminRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageBatchAdminResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/channel/page: + post: + tags: [admin/channel] + summary: 分页查询全部通道 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageChannelsByAdminRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageChannelAdminResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/channel/page/of-user: + post: + tags: [admin/channel] + summary: 分页查询指定用户通道 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageChannelOfUserByAdminRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageChannelAdminResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/channel/sync/clear-expired: + post: + tags: [admin/channel] + summary: 清理指定代理的过期通道 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/SyncChannelClearExpiredRequest" + responses: + "200": + description: 清理结果 + content: + application/json: + schema: + $ref: "#/components/schemas/SyncChannelClearExpiredResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/proxy/all: + post: + tags: [admin/proxy] + summary: 获取代理列表 + security: + - bearerAuth: [] + responses: + "200": + description: 代理数组 + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/ProxyItem" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/proxy/page: + post: + tags: [admin/proxy] + summary: 分页获取代理 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageProxyResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/proxy/create: + post: + tags: [admin/proxy] + summary: 创建代理 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreateProxyRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/proxy/update: + post: + tags: [admin/proxy] + summary: 更新代理 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateProxyRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/proxy/update/status: + post: + tags: [admin/proxy] + summary: 更新代理在线状态 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateProxyStatusRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/proxy/remove: + post: + tags: [admin/proxy] + summary: 删除代理 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/IdRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/trade/page: + post: + tags: [admin/trade] + summary: 分页查询全部订单 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageTradeByAdminRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageTradeAdminResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/trade/page/of-user: + post: + tags: [admin/trade] + summary: 分页查询指定用户订单 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageTradeOfUserByAdminRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageTradeAdminResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/trade/complete: + post: + tags: [admin/trade] + summary: 管理员完成订单 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/TradeCompleteByAdminRequest" + responses: + "204": + $ref: "#/components/responses/NoContent" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/bill/page: + post: + tags: [admin/bill] + summary: 分页查询全部账单 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageBillByAdminRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageBillAdminResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/bill/page/of-user: + post: + tags: [admin/bill] + summary: 分页查询指定用户账单 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageBillOfUserByAdminRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageBillAdminResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/balance-activity/page: + post: + tags: [admin/balance-activity] + summary: 分页查询全部余额变动 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageBalanceActivityByAdminRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageBalanceActivityAdminResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/balance-activity/page/of-user: + post: + tags: [admin/balance-activity] + summary: 分页查询指定用户余额变动 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageBalanceActivityOfUserByAdminRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageBalanceActivityAdminResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/product/all: + post: + tags: [admin/product] + summary: 获取全部产品 + security: + - bearerAuth: [] + responses: + "200": + description: 产品数组 + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/ProductAdminItem" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/product/create: + post: + tags: [admin/product] + summary: 创建产品 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreateProductRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/product/update: + post: + tags: [admin/product] + summary: 更新产品 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateProductRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/product/remove: + post: + tags: [admin/product] + summary: 删除产品 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/IdRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/product/sku/all: + post: + tags: [admin/product] + summary: 获取产品 SKU 列表 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/AllProductSkuByAdminRequest" + responses: + "200": + description: SKU 数组 + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/ProductSkuListItem" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/product/sku/page: + post: + tags: [admin/product] + summary: 分页获取产品 SKU + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageProductSkuByAdminRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageProductSkuAdminResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/product/sku/create: + post: + tags: [admin/product] + summary: 创建产品 SKU + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreateProductSkuRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/product/sku/update: + post: + tags: [admin/product] + summary: 更新产品 SKU + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateProductSkuRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/product/sku/update/status: + post: + tags: [admin/product] + summary: 更新产品 SKU 状态 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateProductSkuStatusRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/product/sku/remove: + post: + tags: [admin/product] + summary: 删除产品 SKU + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/IdRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/product/sku/update/discount/batch: + post: + tags: [admin/product] + summary: 批量更新产品 SKU 折扣 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/BatchUpdateSkuDiscountRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/discount/all: + post: + tags: [admin/discount] + summary: 获取折扣列表 + security: + - bearerAuth: [] + responses: + "200": + description: 折扣数组 + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/DiscountItem" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/discount/page: + post: + tags: [admin/discount] + summary: 分页获取折扣 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageDiscountResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/discount/create: + post: + tags: [admin/discount] + summary: 创建折扣 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreateDiscountRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/discount/update: + post: + tags: [admin/discount] + summary: 更新折扣 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateDiscountRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/discount/remove: + post: + tags: [admin/discount] + summary: 删除折扣 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/IdRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/coupon/all: + post: + tags: [admin/coupon] + summary: 获取优惠券列表 + security: + - bearerAuth: [] + responses: + "200": + description: 优惠券数组 + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/CouponItem" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/coupon/page: + post: + tags: [admin/coupon] + summary: 分页获取优惠券 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageCouponResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/coupon/create: + post: + tags: [admin/coupon] + summary: 创建优惠券 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreateCouponRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/coupon/update: + post: + tags: [admin/coupon] + summary: 更新优惠券 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateCouponRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/coupon/remove: + post: + tags: [admin/coupon] + summary: 删除优惠券 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/IdRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/coupon/update/assign: + post: + tags: [admin/coupon] + summary: 发放优惠券给用户 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/AssignCouponRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/coupon-user/page: + post: + tags: [admin/coupon-user] + summary: 分页查询全部已发放优惠券 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageCouponUserByAdminRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageCouponUserAdminResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/coupon-user/page/of-user: + post: + tags: [admin/coupon-user] + summary: 分页查询指定用户已发放优惠券 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageCouponUserOfUserByAdminRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageCouponUserAdminResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/coupon-user/get: + post: + tags: [admin/coupon-user] + summary: 获取已发放优惠券详情 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/IdRequest" + responses: + "200": + description: 详情对象 + content: + application/json: + schema: + $ref: "#/components/schemas/CouponUserAdminItem" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/coupon-user/create: + post: + tags: [admin/coupon-user] + summary: 手动创建已发放优惠券 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreateCouponUserRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/coupon-user/update: + post: + tags: [admin/coupon-user] + summary: 更新已发放优惠券 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateCouponUserRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/coupon-user/remove: + post: + tags: [admin/coupon-user] + summary: 删除已发放优惠券 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/IdRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/article/page: + post: + tags: [admin/article] + summary: 分页查询文章 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageArticleRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageArticleResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/article/get: + post: + tags: [admin/article] + summary: 获取文章详情 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/IdRequest" + responses: + "200": + description: 文章详情 + content: + application/json: + schema: + $ref: "#/components/schemas/ArticleDetail" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/article/create: + post: + tags: [admin/article] + summary: 创建文章 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreateArticleRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/article/update: + post: + tags: [admin/article] + summary: 更新文章 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateArticleRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/article/remove: + post: + tags: [admin/article] + summary: 删除文章 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/IdRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/article-group/page: + post: + tags: [admin/article-group] + summary: 分页查询文章分组 + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/PageArticleGroupRequest" + responses: + "200": + description: 分页结果 + content: + application/json: + schema: + $ref: "#/components/schemas/PageArticleGroupResponse" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/article-group/list: + post: + tags: [admin/article-group] + summary: 获取文章分组列表 + security: + - bearerAuth: [] + responses: + "200": + description: 分组数组 + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/ArticleGroupItem" + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/article-group/create: + post: + tags: [admin/article-group] + summary: 创建文章分组 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreateArticleGroupRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/article-group/update: + post: + tags: [admin/article-group] + summary: 更新文章分组 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateArticleGroupRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /api/admin/article-group/remove: + post: + tags: [admin/article-group] + summary: 删除文章分组 + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/IdRequest" + responses: + "200": + description: 成功,无响应体 + default: + $ref: "#/components/responses/PlainTextError" + + /callback/identify: + get: + tags: [callback/identify] + summary: 实名认证回调 + parameters: + - name: id + in: query + required: true + schema: + type: string + - name: success + in: query + required: true + schema: + type: boolean + responses: + "200": + description: 返回 HTML 结果页 + content: + text/html: + schema: + type: string