basePath: / definitions: consts.ContentAccessStatus: enum: - active - revoked - expired type: string x-enum-varnames: - ContentAccessStatusActive - ContentAccessStatusRevoked - ContentAccessStatusExpired consts.ContentAssetRole: enum: - main - cover - preview type: string x-enum-varnames: - ContentAssetRoleMain - ContentAssetRoleCover - ContentAssetRolePreview consts.ContentStatus: enum: - draft - reviewing - published - unpublished - blocked type: string x-enum-varnames: - ContentStatusDraft - ContentStatusReviewing - ContentStatusPublished - ContentStatusUnpublished - ContentStatusBlocked consts.ContentVisibility: enum: - public - tenant_only - private type: string x-enum-varnames: - ContentVisibilityPublic - ContentVisibilityTenantOnly - ContentVisibilityPrivate consts.Currency: enum: - CNY type: string x-enum-varnames: - CurrencyCNY consts.DiscountType: enum: - none - percent - amount type: string x-enum-varnames: - DiscountTypeNone - DiscountTypePercent - DiscountTypeAmount consts.MediaAssetStatus: enum: - uploaded - processing - ready - failed - deleted type: string x-enum-varnames: - MediaAssetStatusUploaded - MediaAssetStatusProcessing - MediaAssetStatusReady - MediaAssetStatusFailed - MediaAssetStatusDeleted consts.MediaAssetType: enum: - video - audio - image type: string x-enum-varnames: - MediaAssetTypeVideo - MediaAssetTypeAudio - MediaAssetTypeImage consts.MediaAssetVariant: enum: - main - preview type: string x-enum-varnames: - MediaAssetVariantMain - MediaAssetVariantPreview consts.OrderStatus: enum: - created - paid - refunding - refunded - canceled - failed type: string x-enum-varnames: - OrderStatusCreated - OrderStatusPaid - OrderStatusRefunding - OrderStatusRefunded - OrderStatusCanceled - OrderStatusFailed consts.OrderType: enum: - content_purchase type: string x-enum-varnames: - OrderTypeContentPurchase consts.Role: enum: - user - super_admin type: string x-enum-varnames: - RoleUser - RoleSuperAdmin consts.TenantInviteStatus: enum: - active - disabled - expired type: string x-enum-varnames: - TenantInviteStatusActive - TenantInviteStatusDisabled - TenantInviteStatusExpired consts.TenantJoinRequestStatus: enum: - pending - approved - rejected type: string x-enum-varnames: - TenantJoinRequestStatusPending - TenantJoinRequestStatusApproved - TenantJoinRequestStatusRejected consts.TenantLedgerType: enum: - debit_purchase - credit_refund - freeze - unfreeze - adjustment type: string x-enum-varnames: - TenantLedgerTypeDebitPurchase - TenantLedgerTypeCreditRefund - TenantLedgerTypeFreeze - TenantLedgerTypeUnfreeze - TenantLedgerTypeAdjustment consts.TenantStatus: enum: - pending_verify - verified - banned type: string x-enum-varnames: - TenantStatusPendingVerify - TenantStatusVerified - TenantStatusBanned consts.TenantUserRole: enum: - member - tenant_admin type: string x-enum-varnames: - TenantUserRoleMember - TenantUserRoleTenantAdmin consts.UserStatus: enum: - pending_verify - verified - banned type: string x-enum-varnames: - UserStatusPendingVerify - UserStatusVerified - UserStatusBanned dto.AdminContentItem: properties: content: $ref: '#/definitions/models.Content' owner: $ref: '#/definitions/dto.AdminContentOwnerLite' price: $ref: '#/definitions/models.ContentPrice' status_description: type: string visibility_description: type: string type: object dto.AdminContentOwnerLite: properties: id: type: integer roles: items: $ref: '#/definitions/consts.Role' type: array status: $ref: '#/definitions/consts.UserStatus' username: type: string type: object dto.AdminLedgerItem: properties: ledger: allOf: - $ref: '#/definitions/models.TenantLedger' description: Ledger 流水记录(租户内隔离)。 type_description: description: TypeDescription 流水类型中文说明(用于前端展示)。 type: string type: object dto.AdminMediaAssetUploadCompleteForm: properties: content_type: description: |- ContentType is the MIME type observed during upload; optional. Server may record it for audit and later processing decisions. type: string etag: description: |- ETag is the storage returned ETag (or similar checksum); optional. Used for audit/debugging and later integrity verification. type: string file_size: description: |- FileSize is the uploaded object size in bytes; optional. Server records it for quota/audit and later validation. type: integer sha256: description: |- SHA256 is the hex-encoded sha256 of the uploaded object; optional. Server records it for integrity checks/deduplication. type: string type: object dto.AdminMediaAssetUploadInitForm: properties: content_type: description: |- ContentType is the MIME type reported by the client (e.g. video/mp4); optional. Server should not fully trust it, but can use it as a hint for validation/logging. type: string file_size: description: |- FileSize is the expected file size in bytes; optional. Used for quota/limit checks and audit; client may omit when unknown. type: integer sha256: description: |- SHA256 is the hex-encoded sha256 of the file; optional. Used for deduplication/audit; server may validate it later during upload-complete. type: string source_asset_id: description: SourceAssetID links a preview product to its main asset; only meaningful when variant=preview. type: integer type: description: |- Type is the media asset type (video/audio/image). Used to decide processing pipeline and validation rules; required. type: string variant: allOf: - $ref: '#/definitions/consts.MediaAssetVariant' description: |- Variant indicates whether this asset is a main or preview product. Allowed: main/preview; default is main. type: object dto.AdminMediaAssetUploadInitResponse: properties: asset_id: description: AssetID is the created media asset id. type: integer bucket: description: Bucket is the target bucket/container; for debugging/audit (may be empty in stub mode). type: string expires_at: description: ExpiresAt indicates when UploadURL/FormFields expire; optional. type: string form_fields: additionalProperties: type: string description: FormFields are form fields required for multipart form upload (S3 POST policy); optional. type: object headers: additionalProperties: type: string description: Headers are additional headers required for upload (e.g. signed headers); optional. type: object object_key: description: ObjectKey is the server-generated object key/path; client must NOT choose it. type: string provider: description: Provider is the storage provider identifier (e.g. s3/minio/oss/local); for debugging/audit. type: string upload_url: description: UploadURL is the URL the client should upload to (signed URL or service endpoint). type: string type: object dto.AdminOrderDetail: properties: order: allOf: - $ref: '#/definitions/models.Order' description: Order is the order with items preloaded. type: object dto.AdminOrderExportResponse: properties: content_type: description: ContentType 内容类型:当前固定为 text/csv。 type: string csv: description: CSV CSV 文本内容:UTF-8 编码,包含表头与数据行;前端可直接下载为文件。 type: string filename: description: Filename 建议文件名:前端可用于下载时的默认文件名。 type: string type: object dto.AdminOrderRefundForm: properties: force: description: |- Force indicates bypassing the default refund window check (paid_at + 24h). 强制退款:true 表示绕过默认退款时间窗限制(需审计)。 type: boolean idempotency_key: description: |- IdempotencyKey ensures refund request is processed at most once. 幂等键:同一笔退款重复请求时返回一致结果,避免重复退款/重复回滚。 type: string reason: description: |- Reason is the human-readable refund reason used for audit. 退款原因:建议必填(由业务侧校验);用于审计与追责。 type: string type: object dto.AdminTenantInviteCreateForm: properties: code: description: Code 邀请码(可选):为空时由后端生成;建议只包含数字/字母,便于人工输入。 type: string expires_at: description: ExpiresAt 过期时间(可选):为空表示不过期;到期后不可再使用。 type: string max_uses: description: MaxUses 最大可使用次数(可选):0 表示不限次数;大于 0 时用尽后自动失效。 type: integer remark: description: Remark 备注(可选):用于审计记录生成目的/投放渠道等。 type: string type: object dto.AdminTenantInviteDisableForm: properties: reason: description: Reason 禁用原因(可选):用于审计与追溯。 type: string type: object dto.AdminTenantJoinRequestDecideForm: properties: reason: description: Reason 审核说明(可选):用于审计记录通过/拒绝原因。 type: string type: object dto.AdminTenantUserItem: properties: tenant_user: allOf: - $ref: '#/definitions/models.TenantUser' description: TenantUser 租户成员关系记录。 user: allOf: - $ref: '#/definitions/models.User' description: User 用户基础信息(用于展示 username 等)。 type: object dto.AdminTenantUserJoinResponse: properties: tenant_user: allOf: - $ref: '#/definitions/models.TenantUser' description: TenantUser 租户成员关系记录。 type: object dto.AdminTenantUserRoleUpdateForm: properties: role: description: Role 角色:member/tenant_admin。 type: string type: object dto.ContentAssetAttachForm: properties: asset_id: description: AssetID is the media asset id to attach. type: integer role: allOf: - $ref: '#/definitions/consts.ContentAssetRole' description: Role indicates how this asset is used (main/cover/preview). sort: description: Sort controls ordering under the same role. type: integer type: object dto.ContentAssetsResponse: properties: assets: description: Assets is the list of playable assets for the requested role (preview/main). items: $ref: '#/definitions/dto.ContentPlayableAsset' type: array content: allOf: - $ref: '#/definitions/models.Content' description: Content is the content entity. preview_seconds: description: PreviewSeconds indicates the max preview duration (only meaningful for preview response). type: integer type: object dto.ContentCreateForm: properties: description: description: Description is the content description. type: string preview_seconds: description: PreviewSeconds controls preview duration (defaults to 60 when omitted). type: integer title: description: Title is the content title. type: string visibility: allOf: - $ref: '#/definitions/consts.ContentVisibility' description: Visibility controls who can view the content detail (main assets still require free/purchase). type: object dto.ContentDetail: properties: content: allOf: - $ref: '#/definitions/models.Content' description: Content is the content entity. has_access: description: HasAccess indicates whether current user can access main assets (free/owner/purchased). type: boolean price: allOf: - $ref: '#/definitions/models.ContentPrice' description: Price is the current price settings for the content (may be nil if not set). type: object dto.ContentItem: properties: content: allOf: - $ref: '#/definitions/models.Content' description: Content is the content entity. has_access: description: HasAccess indicates whether current user can access main assets (free/owner/purchased). type: boolean price: allOf: - $ref: '#/definitions/models.ContentPrice' description: Price is the current price settings for the content (may be nil if not set). type: object dto.ContentPlayableAsset: properties: asset_id: type: integer expires_at: description: ExpiresAt indicates when PlayURL/token expires; optional. type: string meta: description: Meta is a display-safe whitelist (currently passthrough JSON); optional. items: type: integer type: array play_url: description: PlayURL is a short-lived URL; do NOT expose bucket/object_key directly. type: string type: $ref: '#/definitions/consts.MediaAssetType' type: object dto.ContentPriceUpsertForm: properties: currency: allOf: - $ref: '#/definitions/consts.Currency' description: Currency is fixed to CNY for now. discount_end_at: description: DiscountEndAt disables discount after this time (optional). type: string discount_start_at: description: DiscountStartAt enables discount from this time (optional). type: string discount_type: allOf: - $ref: '#/definitions/consts.DiscountType' description: DiscountType defines the discount algorithm (none/percent/amount). discount_value: description: DiscountValue is interpreted based on DiscountType. type: integer price_amount: description: PriceAmount is the base price in cents (CNY 分). type: integer type: object dto.ContentUpdateForm: properties: description: description: Description updates the description when provided. type: string preview_seconds: description: PreviewSeconds updates preview duration when provided (must be > 0). type: integer status: allOf: - $ref: '#/definitions/consts.ContentStatus' description: Status updates the content status when provided (e.g. publish/unpublish). title: description: Title updates the title when provided. type: string visibility: allOf: - $ref: '#/definitions/consts.ContentVisibility' description: Visibility updates the visibility when provided. type: object dto.JoinByInviteForm: properties: invite_code: description: InviteCode 邀请码:由租户管理员生成;用户提交后加入对应租户。 type: string type: object dto.JoinRequestCreateForm: properties: reason: description: Reason 申请原因(可选):用于向租户管理员说明申请加入的目的。 type: string type: object dto.MeBalanceResponse: properties: balance: description: Balance 可用余额:可用于购买/消费。 type: integer balance_frozen: description: BalanceFrozen 冻结余额:用于下单冻结/争议期等。 type: integer currency: allOf: - $ref: '#/definitions/consts.Currency' description: Currency 币种:当前固定 CNY(金额单位为分)。 updated_at: description: UpdatedAt 更新时间:余额变更时更新。 type: string type: object dto.MyLedgerItem: properties: ledger: allOf: - $ref: '#/definitions/models.TenantLedger' description: Ledger 流水记录(租户内隔离)。 type_description: description: TypeDescription 流水类型中文说明(用于前端展示)。 type: string type: object dto.MyTenantItem: properties: is_owner: description: |- IsOwner 是否为租户Owner(tenants.user_id == 当前用户)。 说明:Owner 通常也在 tenant_users 里具备 tenant_admin 角色,但此字段更直观。 type: boolean joined_at: description: JoinedAt 加入租户时间(tenant_users.created_at)。 type: string member_roles: description: MemberRoles 当前用户在该租户下的角色(tenant_admin/member 等)。 items: $ref: '#/definitions/consts.TenantUserRole' type: array member_status: allOf: - $ref: '#/definitions/consts.UserStatus' description: MemberStatus 当前用户在该租户下的成员状态。 tenant_code: description: TenantCode 租户Code(路由使用:/t/:tenantCode/...)。 type: string tenant_id: description: TenantID 租户ID(数值型主键)。 type: integer tenant_name: description: TenantName 租户名称。 type: string tenant_status: allOf: - $ref: '#/definitions/consts.TenantStatus' description: TenantStatus 租户状态(pending/verified/expired 等)。 tenant_status_description: description: TenantStatusDescription 租户状态描述(便于前端展示)。 type: string type: object dto.OrderBuyerLite: properties: id: type: integer username: type: string type: object dto.OrderStatisticsResponse: properties: by_status: items: $ref: '#/definitions/dto.OrderStatisticsRow' type: array total_amount_paid_sum: type: integer total_count: type: integer type: object dto.OrderStatisticsRow: properties: amount_paid_sum: type: integer count: type: integer status: $ref: '#/definitions/consts.OrderStatus' status_description: type: string type: object dto.OrderTenantLite: properties: code: type: string id: type: integer name: type: string type: object dto.PurchaseContentForm: properties: idempotency_key: description: |- IdempotencyKey is used to ensure the purchase request is processed at most once. 建议由客户端生成并保持稳定:同一笔购买重复请求时返回相同结果,避免重复扣款/重复下单。 type: string type: object dto.PurchaseContentResponse: properties: access: allOf: - $ref: '#/definitions/models.ContentAccess' description: Access is the content access record after purchase grant. amount_paid: description: AmountPaid is the final paid amount in cents (CNY 分). type: integer item: allOf: - $ref: '#/definitions/models.OrderItem' description: Item is the single order item of this purchase (current implementation is 1 order -> 1 content). order: allOf: - $ref: '#/definitions/models.Order' description: Order is the created or existing order record (may be nil for owner/free-path without order). type: object dto.SuperContentItem: properties: content: $ref: '#/definitions/models.Content' owner: $ref: '#/definitions/dto.SuperUserLite' price: $ref: '#/definitions/models.ContentPrice' status_description: type: string tenant: $ref: '#/definitions/dto.SuperContentTenantLite' visibility_description: type: string type: object dto.SuperContentTenantLite: properties: code: type: string id: type: integer name: type: string type: object dto.SuperOrderDetail: properties: buyer: $ref: '#/definitions/dto.OrderBuyerLite' order: $ref: '#/definitions/models.Order' tenant: $ref: '#/definitions/dto.OrderTenantLite' type: object dto.SuperOrderItem: properties: amount_discount: type: integer amount_original: type: integer amount_paid: type: integer buyer: $ref: '#/definitions/dto.OrderBuyerLite' created_at: type: string currency: $ref: '#/definitions/consts.Currency' id: type: integer paid_at: type: string refunded_at: type: string status: $ref: '#/definitions/consts.OrderStatus' status_description: type: string tenant: $ref: '#/definitions/dto.OrderTenantLite' type: $ref: '#/definitions/consts.OrderType' updated_at: type: string type: object dto.SuperOrderRefundForm: properties: force: description: Force indicates bypassing the default refund window check (paid_at + 24h). type: boolean idempotency_key: description: IdempotencyKey ensures refund request is processed at most once. type: string reason: description: Reason is the human-readable refund reason used for audit. type: string type: object dto.SuperTenantContentItem: properties: content: $ref: '#/definitions/models.Content' owner: $ref: '#/definitions/dto.SuperUserLite' price: $ref: '#/definitions/models.ContentPrice' status_description: type: string visibility_description: type: string type: object dto.SuperTenantContentStatusUpdateForm: properties: status: allOf: - $ref: '#/definitions/consts.ContentStatus' description: 'Status supports: unpublished (下架) / blocked (封禁)' enum: - unpublished - blocked required: - status type: object dto.SuperTenantUserItem: properties: tenant_user: $ref: '#/definitions/models.TenantUser' user: $ref: '#/definitions/dto.SuperUserLite' type: object dto.SuperUserLite: properties: created_at: type: string id: type: integer roles: items: $ref: '#/definitions/consts.Role' type: array status: $ref: '#/definitions/consts.UserStatus' status_description: type: string updated_at: type: string username: type: string verified_at: type: string type: object dto.TenantAdminUserLite: properties: id: type: integer username: type: string type: object dto.TenantCreateForm: properties: admin_user_id: type: integer code: maxLength: 64 type: string duration: description: Duration 租户有效期(天),从“创建时刻”起算;与续期接口保持一致。 enum: - 7 - 30 - 90 - 180 - 365 type: integer name: maxLength: 128 type: string required: - admin_user_id - code - duration - name type: object dto.TenantExpireUpdateForm: properties: duration: enum: - 7 - 30 - 90 - 180 - 365 type: integer required: - duration type: object dto.TenantItem: properties: admin_users: items: $ref: '#/definitions/dto.TenantAdminUserLite' type: array code: type: string config: items: type: integer type: array created_at: type: string expired_at: type: string id: type: integer income_amount_paid_sum: description: IncomeAmountPaidSum 累计收入金额(单位:分,CNY):按 orders 聚合得到的已支付净收入(不含退款中/已退款订单)。 type: integer name: type: string owner: $ref: '#/definitions/dto.TenantOwnerUserLite' status: $ref: '#/definitions/consts.TenantStatus' status_description: type: string updated_at: type: string user_count: type: integer user_id: type: integer users: items: $ref: '#/definitions/models.User' type: array uuid: type: string type: object dto.TenantOwnerUserLite: properties: id: type: integer username: type: string type: object dto.TenantStatusUpdateForm: properties: status: allOf: - $ref: '#/definitions/consts.TenantStatus' enum: - normal - disabled required: - status type: object dto.UserItem: properties: balance: type: integer balance_frozen: type: integer created_at: type: string id: type: integer joined_tenant_count: type: integer owned_tenant_count: type: integer roles: items: $ref: '#/definitions/consts.Role' type: array status: $ref: '#/definitions/consts.UserStatus' status_description: type: string updated_at: type: string username: type: string verified_at: type: string type: object dto.UserRolesUpdateForm: properties: roles: items: $ref: '#/definitions/consts.Role' minItems: 1 type: array required: - roles type: object dto.UserStatistics: properties: count: type: integer status: $ref: '#/definitions/consts.UserStatus' status_description: type: string type: object dto.UserStatusUpdateForm: properties: status: allOf: - $ref: '#/definitions/consts.UserStatus' enum: - normal - disabled required: - status type: object dto.UserTenantItem: properties: code: type: string expired_at: type: string joined_at: type: string member_status: $ref: '#/definitions/consts.UserStatus' member_status_description: type: string name: type: string owner: $ref: '#/definitions/dto.TenantOwnerUserLite' role: items: $ref: '#/definitions/consts.TenantUserRole' type: array tenant_id: type: integer tenant_status: $ref: '#/definitions/consts.TenantStatus' tenant_status_description: type: string type: object gorm.DeletedAt: properties: time: type: string valid: description: Valid is true if Time is not NULL type: boolean type: object models.Content: properties: created_at: description: 创建时间:默认 now();用于审计与排序 type: string deleted_at: allOf: - $ref: '#/definitions/gorm.DeletedAt' description: 软删除时间:非空表示已删除;对外接口需过滤 description: description: 描述:用于详情页展示;可为空字符串 type: string id: description: 主键ID:自增;用于内容引用 type: integer preview_downloadable: description: 试看是否允许下载:默认 false;当前策略固定为不允许下载(仅 streaming) type: boolean preview_seconds: description: 试看秒数:默认 60;只对 preview 资源生效;必须为正整数 type: integer published_at: description: 发布时间:首次发布时写入;用于时间窗与排序 type: string status: allOf: - $ref: '#/definitions/consts.ContentStatus' description: 状态:draft/reviewing/published/unpublished/blocked;published 才对外展示 tenant_id: description: 租户ID:多租户隔离关键字段;所有查询/写入必须限定 tenant_id type: integer title: description: 标题:用于列表展示与搜索;建议限制长度(由业务校验) type: string updated_at: description: 更新时间:默认 now();编辑内容时写入 type: string user_id: description: 用户ID:内容创建者/发布者;用于权限与审计(例如私有内容仅作者可见) type: integer visibility: allOf: - $ref: '#/definitions/consts.ContentVisibility' description: 可见性:public/tenant_only/private;仅控制详情可见,正片资源仍需按价格/权益校验 type: object models.ContentAccess: properties: content_id: description: 内容ID:权益对应内容;唯一约束 (tenant_id, user_id, content_id) type: integer created_at: description: 创建时间:默认 now();用于审计 type: string id: description: 主键ID:自增 type: integer order_id: description: 订单ID:产生该权益的订单;可为空(例如后台补发/迁移) type: integer revoked_at: description: 撤销时间:当 status=revoked 时写入;用于审计与追责 type: string status: allOf: - $ref: '#/definitions/consts.ContentAccessStatus' description: 权益状态:active/revoked/expired;revoked 表示立即失效(例如退款/违规) tenant_id: description: 租户ID:多租户隔离;与内容、用户归属一致 type: integer updated_at: description: 更新时间:默认 now();更新 status 时写入 type: string user_id: description: 用户ID:权益所属用户;用于访问校验 type: integer type: object models.ContentAsset: properties: asset_id: description: 资源ID:关联 media_assets.id;用于查询资源归属内容 type: integer content_id: description: 内容ID:关联 contents.id;用于查询内容下资源列表 type: integer created_at: description: 创建时间:默认 now();用于审计 type: string id: description: 主键ID:自增 type: integer role: allOf: - $ref: '#/definitions/consts.ContentAssetRole' description: 资源角色:main/cover/preview;preview 必须为独立资源以满足禁下载与防绕过 sort: description: 排序:同一 role 下的展示顺序,数值越小越靠前 type: integer tenant_id: description: 租户ID:多租户隔离;必须与 content_id、asset_id 所属租户一致 type: integer updated_at: description: 更新时间:默认 now();更新 sort/role 时写入 type: string user_id: description: 用户ID:操作人/绑定人;用于审计(通常为租户管理员或作者) type: integer type: object models.ContentPrice: properties: content_id: description: 内容ID:唯一约束 (tenant_id, content_id);一个内容在一个租户内仅一份定价 type: integer created_at: description: 创建时间:默认 now();用于审计 type: string currency: allOf: - $ref: '#/definitions/consts.Currency' description: 币种:当前固定 CNY;金额单位为分 discount_end_at: description: 折扣结束时间:可为空;为空表示长期有效(由业务逻辑解释) type: string discount_start_at: description: 折扣开始时间:可为空;为空表示立即生效(由业务逻辑解释) type: string discount_type: allOf: - $ref: '#/definitions/consts.DiscountType' description: 折扣类型:none/percent/amount;仅影响下单时成交价,需写入订单快照 discount_value: description: 折扣值:percent=0-100(按业务校验);amount=分;none 时忽略 type: integer id: description: 主键ID:自增 type: integer price_amount: description: 基础价格:分;0 表示免费(可直接访问正片资源) type: integer tenant_id: description: 租户ID:多租户隔离;与内容归属一致 type: integer updated_at: description: 更新时间:默认 now();更新价格/折扣时写入 type: string user_id: description: 用户ID:设置/更新价格的操作人(通常为 tenant_admin);用于审计 type: integer type: object models.MediaAsset: properties: bucket: description: 存储桶:对象所在 bucket;与 provider 组合确定存储定位 type: string created_at: description: 创建时间:默认 now();用于审计与排序 type: string deleted_at: allOf: - $ref: '#/definitions/gorm.DeletedAt' description: 软删除时间:非空表示已删除;对外接口需过滤 id: description: 主键ID:自增;仅用于内部关联 type: integer meta: description: 元数据:JSON;包含 hash、duration、width、height、bitrate、codec 等;用于展示与计费/风控 items: type: integer type: array object_key: description: 对象键:对象在 bucket 内的 key;不得暴露可长期复用的直链(通过签名URL/token下发) type: string provider: description: 存储提供方:例如 s3/minio/oss;便于多存储扩展 type: string source_asset_id: description: 派生来源资源ID:preview 产物可指向对应 main 资源;用于建立 preview/main 的 1:1 追溯关系 type: integer status: allOf: - $ref: '#/definitions/consts.MediaAssetStatus' description: 处理状态:uploaded/processing/ready/failed/deleted;ready 才可被内容引用对外提供 tenant_id: description: 租户ID:多租户隔离关键字段;所有查询/写入必须限定 tenant_id type: integer type: allOf: - $ref: '#/definitions/consts.MediaAssetType' description: 资源类型:video/audio/image;决定后续处理流程(转码/缩略图/封面等) updated_at: description: 更新时间:默认 now();更新状态/元数据时写入 type: string user_id: description: 用户ID:资源上传者;用于审计与权限控制 type: integer variant: allOf: - $ref: '#/definitions/consts.MediaAssetVariant' description: 产物类型:main/preview;用于强制试看资源必须绑定独立产物,避免用正片绕过 type: object models.Order: properties: amount_discount: description: 优惠金额:分;amount_paid = amount_original - amount_discount(下单时快照) type: integer amount_original: description: 原价金额:分;未折扣前金额(用于展示与对账) type: integer amount_paid: description: 实付金额:分;从租户内余额扣款的金额(下单时快照) type: integer created_at: description: 创建时间:默认 now();用于审计与排序 type: string currency: allOf: - $ref: '#/definitions/consts.Currency' description: 币种:当前固定 CNY;金额单位为分 id: description: 主键ID:自增;用于关联订单明细、账本流水、权益等 type: integer idempotency_key: description: 幂等键:同一租户同一用户同一业务请求可用;用于防重复下单/重复扣款(建议由客户端生成) type: string items: items: $ref: '#/definitions/models.OrderItem' type: array paid_at: description: 支付/扣款完成时间:余额支付在 debit_purchase 成功后写入 type: string refund_forced: description: 是否强制退款:true 表示租户管理侧绕过时间窗执行退款(需审计) type: boolean refund_operator_user_id: description: 退款操作人用户ID:租户管理员/系统;用于审计与追责 type: integer refund_reason: description: 退款原因:后台/用户发起退款的原因说明;用于审计 type: string refunded_at: description: 退款完成时间:退款落账成功后写入 type: string snapshot: allOf: - $ref: '#/definitions/types.JSONType-fields_OrdersSnapshot' description: 订单快照:JSON;建议包含 content 标题/定价/折扣、请求来源等,避免改价影响历史展示 status: allOf: - $ref: '#/definitions/consts.OrderStatus' description: 订单状态:created/paid/refunding/refunded/canceled/failed;状态变更需与账本/权益保持一致 tenant_id: description: 租户ID:多租户隔离关键字段;所有查询/写入必须限定 tenant_id type: integer type: allOf: - $ref: '#/definitions/consts.OrderType' description: 订单类型:content_purchase(购买内容)等;当前默认 content_purchase updated_at: description: 更新时间:默认 now();状态变更/退款写入时更新 type: string user_id: description: 用户ID:下单用户(buyer);余额扣款与权益归属以该 user_id 为准 type: integer type: object models.OrderItem: properties: amount_paid: description: 该行实付金额:分;通常等于订单 amount_paid(单内容场景) type: integer content: $ref: '#/definitions/models.Content' content_id: description: 内容ID:关联 contents.id;用于生成/撤销 content_access type: integer content_user_id: description: 内容作者用户ID:用于后续分成/对账扩展;当前可为 0 或写入内容创建者 type: integer created_at: description: 创建时间:默认 now() type: string id: description: 主键ID:自增 type: integer order: $ref: '#/definitions/models.Order' order_id: description: 订单ID:关联 orders.id;用于聚合订单明细 type: integer snapshot: allOf: - $ref: '#/definitions/types.JSONType-fields_OrderItemsSnapshot' description: 内容快照:JSON;建议包含 title/price/discount 等,用于历史展示与审计 tenant_id: description: 租户ID:多租户隔离关键字段;必须与 orders.tenant_id 一致 type: integer updated_at: description: 更新时间:默认 now() type: string user_id: description: 用户ID:下单用户(buyer);冗余字段用于查询加速与审计 type: integer type: object models.Tenant: properties: code: type: string config: items: type: integer type: array created_at: type: string expired_at: type: string id: type: integer name: type: string status: $ref: '#/definitions/consts.TenantStatus' updated_at: type: string user_id: type: integer users: items: $ref: '#/definitions/models.User' type: array uuid: type: string type: object models.TenantInvite: properties: code: description: 邀请码:用户加入租户时提交;同一租户内唯一 type: string created_at: description: 创建时间:默认 now() type: string disabled_at: description: 禁用时间:租户管理员禁用该邀请的时间(UTC) type: string disabled_operator_user_id: description: 禁用操作人用户ID:租户管理员(审计用) type: integer expires_at: description: 过期时间:到期后不可再使用(UTC);为空表示不过期 type: string id: description: 主键ID:自增 type: integer max_uses: description: 最大可使用次数:0 表示不限制;>0 时 used_count 达到该值后视为失效 type: integer remark: description: 备注:生成/禁用原因等(审计用) type: string status: allOf: - $ref: '#/definitions/consts.TenantInviteStatus' description: 邀请状态:active/disabled/expired;expired 也可由 expires_at 推导,业务侧需保持一致 tenant_id: description: 租户ID:多租户隔离关键字段;所有查询/写入必须限定 tenant_id type: integer updated_at: description: 更新时间:默认 now() type: string used_count: description: 已使用次数:每次成功加入时 +1;需事务保证并发下不超发 type: integer user_id: description: 创建人用户ID:生成邀请码的租户管理员(审计用) type: integer type: object models.TenantJoinRequest: properties: created_at: description: 创建时间:默认 now() type: string decided_at: description: 处理时间:审核通过/拒绝时记录(UTC) type: string decided_operator_user_id: description: 处理人用户ID:租户管理员(审计用) type: integer decided_reason: description: 处理说明:管理员通过/拒绝的原因(可选,审计用) type: string id: description: 主键ID:自增 type: integer reason: description: 申请原因:用户填写的加入说明(可选) type: string status: allOf: - $ref: '#/definitions/consts.TenantJoinRequestStatus' description: 申请状态:pending/approved/rejected;状态变更需记录 decided_at 与 decided_operator_user_id tenant_id: description: 租户ID:多租户隔离关键字段;所有查询/写入必须限定 tenant_id type: integer updated_at: description: 更新时间:默认 now() type: string user_id: description: 申请人用户ID:发起加入申请的用户 type: integer type: object models.TenantLedger: properties: amount: description: 流水金额:分/最小货币单位;通常为正数,方向由 type 决定(由业务层约束) type: integer balance_after: description: 变更后可用余额:用于审计与对账回放 type: integer balance_before: description: 变更前可用余额:用于审计与对账回放 type: integer biz_ref_id: description: 业务引用ID:与 biz_ref_type 配合使用(例如 orders.id);用于对账与审计 type: integer biz_ref_type: description: 业务引用类型:order/refund/etc;与 biz_ref_id 组成可选的结构化幂等/追溯键 type: string created_at: description: 创建时间:默认 now() type: string frozen_after: description: 变更后冻结余额:用于审计与对账回放 type: integer frozen_before: description: 变更前冻结余额:用于审计与对账回放 type: integer id: description: 主键ID:自增 type: integer idempotency_key: description: 幂等键:同一租户同一用户同一业务操作固定;用于防止重复落账(建议由业务层生成) type: string operator_user_id: description: 操作者用户ID:谁触发该流水(admin/buyer/system);用于审计与追责;可为空(历史数据或无法识别时) type: integer order: $ref: '#/definitions/models.Order' order_id: description: 关联订单ID:购买/退款类流水应关联 orders.id;非订单类可为空 type: integer remark: description: 备注:业务说明/后台操作原因等;用于审计 type: string tenant_id: description: 租户ID:多租户隔离关键字段;必须与 tenant_users.tenant_id 一致 type: integer type: allOf: - $ref: '#/definitions/consts.TenantLedgerType' description: 流水类型:debit_purchase/credit_refund/freeze/unfreeze/adjustment;不同类型决定余额/冻结余额的变更方向 updated_at: description: 更新时间:默认 now() type: string user_id: description: 用户ID:余额账户归属用户;对应 tenant_users.user_id type: integer type: object models.TenantUser: properties: created_at: type: string id: type: integer role: items: $ref: '#/definitions/consts.TenantUserRole' type: array status: $ref: '#/definitions/consts.UserStatus' tenant_id: type: integer updated_at: type: string user_id: type: integer type: object models.User: properties: balance: description: 全局可用余额:分/最小货币单位;用户在所有已加入租户内共享该余额;默认 0 type: integer balance_frozen: description: 全局冻结余额:分/最小货币单位;用于下单冻结等;默认 0 type: integer created_at: type: string deleted_at: $ref: '#/definitions/gorm.DeletedAt' id: type: integer metas: items: type: integer type: array owned: $ref: '#/definitions/models.Tenant' password: type: string roles: items: $ref: '#/definitions/consts.Role' type: array status: $ref: '#/definitions/consts.UserStatus' tenants: items: $ref: '#/definitions/models.Tenant' type: array updated_at: type: string username: type: string verified_at: type: string type: object quyun_v2_app_http_super_dto.LoginForm: properties: password: type: string username: type: string type: object quyun_v2_app_http_super_dto.LoginResponse: properties: token: type: string type: object quyun_v2_app_http_tenant_dto.MeResponse: properties: tenant: allOf: - $ref: '#/definitions/models.Tenant' description: Tenant is the resolved tenant by `tenantCode`. tenant_user: allOf: - $ref: '#/definitions/models.TenantUser' description: TenantUser is the membership record of the authenticated user within the tenant. user: allOf: - $ref: '#/definitions/models.User' description: User is the authenticated user derived from JWT `user_id`. type: object quyun_v2_app_http_web_dto.LoginForm: properties: password: description: Password 明文密码;后端会与 users.password 的 bcrypt hash 做比对。 type: string username: description: Username 用户名;必须与数据库 users.username 精确匹配。 type: string type: object quyun_v2_app_http_web_dto.LoginResponse: properties: token: description: 'Token JWT 访问令牌;前端应以 `Authorization: Bearer ` 方式携带。' type: string type: object quyun_v2_app_http_web_dto.MeResponse: properties: created_at: description: CreatedAt 用户创建时间。 type: string id: description: ID 用户ID(全局唯一)。 type: integer roles: description: Roles 用户全局角色数组(如 user/super_admin 等)。 items: $ref: '#/definitions/consts.Role' type: array status: allOf: - $ref: '#/definitions/consts.UserStatus' description: Status 用户状态(active/verified/banned 等)。 status_description: description: StatusDescription 用户状态描述(便于前端展示)。 type: string updated_at: description: UpdatedAt 用户更新时间。 type: string username: description: Username 用户名。 type: string type: object requests.KV: properties: key: description: Key is a machine-readable value, usually an enum string. type: string value: description: Value is the label payload, often a human-readable string. type: object requests.Pager: properties: items: description: Items is the paged result list; concrete type depends on endpoint. limit: description: Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10). type: integer page: description: Page is 1-based page index; values <= 0 are normalized to 1. type: integer total: description: Total is the total number of items matching current filter (before paging). type: integer type: object types.JSONType-fields_OrderItemsSnapshot: type: object types.JSONType-fields_OrdersSnapshot: type: object externalDocs: description: OpenAPI url: https://swagger.io/resources/open-api/ host: localhost:8080 info: contact: email: support@swagger.io name: UserName url: http://www.swagger.io/support description: Multi-tenant media platform backend API. license: name: Apache 2.0 url: http://www.apache.org/licenses/LICENSE-2.0.html termsOfService: http://swagger.io/terms/ title: ApiDoc version: "1.0" paths: /super/v1/auth/login: post: consumes: - application/json parameters: - description: form in: body name: form required: true schema: $ref: '#/definitions/quyun_v2_app_http_super_dto.LoginForm' produces: - application/json responses: "200": description: 成功 schema: $ref: '#/definitions/quyun_v2_app_http_super_dto.LoginResponse' tags: - Super /super/v1/auth/token: get: consumes: - application/json produces: - application/json responses: "200": description: 成功 schema: $ref: '#/definitions/quyun_v2_app_http_super_dto.LoginResponse' tags: - Super /super/v1/contents: get: consumes: - application/json parameters: - description: Asc specifies comma-separated field names to sort ascending by. in: query name: asc type: string - in: query name: created_at_from type: string - in: query name: created_at_to type: string - description: Desc specifies comma-separated field names to sort descending by. in: query name: desc type: string - in: query name: id type: integer - in: query name: keyword type: string - description: Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10). in: query name: limit type: integer - description: Page is 1-based page index; values <= 0 are normalized to 1. in: query name: page type: integer - in: query name: price_amount_max type: integer - in: query name: price_amount_min type: integer - in: query name: published_at_from type: string - in: query name: published_at_to type: string - enum: - draft - reviewing - published - unpublished - blocked in: query name: status type: string x-enum-varnames: - ContentStatusDraft - ContentStatusReviewing - ContentStatusPublished - ContentStatusUnpublished - ContentStatusBlocked - in: query name: tenant_code type: string - in: query name: tenant_id type: integer - in: query name: tenant_name type: string - in: query name: user_id type: integer - in: query name: username type: string - enum: - public - tenant_only - private in: query name: visibility type: string x-enum-varnames: - ContentVisibilityPublic - ContentVisibilityTenantOnly - ContentVisibilityPrivate produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/requests.Pager' - properties: items: $ref: '#/definitions/dto.SuperContentItem' type: object summary: 内容列表(平台侧汇总) tags: - Super /super/v1/orders: get: consumes: - application/json parameters: - in: query name: amount_paid_max type: integer - in: query name: amount_paid_min type: integer - description: Asc specifies comma-separated field names to sort ascending by. in: query name: asc type: string - in: query name: content_id type: integer - in: query name: content_title type: string - in: query name: created_at_from type: string - in: query name: created_at_to type: string - description: Desc specifies comma-separated field names to sort descending by. in: query name: desc type: string - in: query name: id type: integer - description: Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10). in: query name: limit type: integer - description: Page is 1-based page index; values <= 0 are normalized to 1. in: query name: page type: integer - in: query name: paid_at_from type: string - in: query name: paid_at_to type: string - enum: - created - paid - refunding - refunded - canceled - failed in: query name: status type: string x-enum-varnames: - OrderStatusCreated - OrderStatusPaid - OrderStatusRefunding - OrderStatusRefunded - OrderStatusCanceled - OrderStatusFailed - in: query name: tenant_code type: string - in: query name: tenant_id type: integer - in: query name: tenant_name type: string - enum: - content_purchase in: query name: type type: string x-enum-varnames: - OrderTypeContentPurchase - in: query name: user_id type: integer - in: query name: username type: string produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/requests.Pager' - properties: items: $ref: '#/definitions/dto.SuperOrderItem' type: object summary: 订单列表 tags: - Super /super/v1/orders/{orderID}: get: consumes: - application/json parameters: - description: OrderID format: int64 in: path name: orderID required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.SuperOrderDetail' summary: 订单详情 tags: - Super /super/v1/orders/{orderID}/refund: post: consumes: - application/json description: 该接口只负责将订单从 paid 推进到 refunding,并提交异步退款任务;退款入账与权益回收由 worker 异步完成。 parameters: - description: OrderID format: int64 in: path name: orderID required: true type: integer - description: Form in: body name: form required: true schema: $ref: '#/definitions/dto.SuperOrderRefundForm' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.Order' summary: 订单退款(平台) tags: - Super /super/v1/orders/statistics: get: consumes: - application/json produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.OrderStatisticsResponse' summary: 订单统计信息 tags: - Super /super/v1/tenants: get: consumes: - application/json parameters: - description: Asc specifies comma-separated field names to sort ascending by. in: query name: asc type: string - in: query name: code type: string - in: query name: created_at_from type: string - in: query name: created_at_to type: string - description: Desc specifies comma-separated field names to sort descending by. in: query name: desc type: string - in: query name: expired_at_from type: string - in: query name: expired_at_to type: string - in: query name: id type: integer - description: Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10). in: query name: limit type: integer - in: query name: name type: string - description: Page is 1-based page index; values <= 0 are normalized to 1. in: query name: page type: integer - enum: - pending_verify - verified - banned in: query name: status type: string x-enum-varnames: - TenantStatusPendingVerify - TenantStatusVerified - TenantStatusBanned - in: query name: user_id type: integer produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/requests.Pager' - properties: items: $ref: '#/definitions/dto.TenantItem' type: object summary: 租户列表 tags: - Super post: consumes: - application/json parameters: - description: Form in: body name: form required: true schema: $ref: '#/definitions/dto.TenantCreateForm' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.Tenant' summary: 创建租户并设置租户管理员 tags: - Super /super/v1/tenants/{tenantID}: get: consumes: - application/json parameters: - description: TenantID format: int64 in: path name: tenantID required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.TenantItem' summary: 租户详情 tags: - Super patch: consumes: - application/json parameters: - description: TenantID format: int64 in: path name: tenantID required: true type: integer - description: Form in: body name: form required: true schema: $ref: '#/definitions/dto.TenantExpireUpdateForm' produces: - application/json responses: {} summary: 更新过期时间 tags: - Super /super/v1/tenants/{tenantID}/contents: get: consumes: - application/json parameters: - description: TenantID format: int64 in: path name: tenantID required: true type: integer - description: Asc specifies comma-separated field names to sort ascending by. in: query name: asc type: string - in: query name: created_at_from type: string - in: query name: created_at_to type: string - description: Desc specifies comma-separated field names to sort descending by. in: query name: desc type: string - in: query name: keyword type: string - description: Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10). in: query name: limit type: integer - description: Page is 1-based page index; values <= 0 are normalized to 1. in: query name: page type: integer - in: query name: published_at_from type: string - in: query name: published_at_to type: string - enum: - draft - reviewing - published - unpublished - blocked in: query name: status type: string x-enum-varnames: - ContentStatusDraft - ContentStatusReviewing - ContentStatusPublished - ContentStatusUnpublished - ContentStatusBlocked - in: query name: user_id type: integer - enum: - public - tenant_only - private in: query name: visibility type: string x-enum-varnames: - ContentVisibilityPublic - ContentVisibilityTenantOnly - ContentVisibilityPrivate produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/requests.Pager' - properties: items: $ref: '#/definitions/dto.SuperTenantContentItem' type: object summary: 租户内容列表(平台侧) tags: - Super /super/v1/tenants/{tenantID}/contents/{contentID}/status: patch: consumes: - application/json parameters: - description: TenantID format: int64 in: path name: tenantID required: true type: integer - description: ContentID format: int64 in: path name: contentID required: true type: integer - description: Form in: body name: form required: true schema: $ref: '#/definitions/dto.SuperTenantContentStatusUpdateForm' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.Content' summary: 更新租户内容状态(平台侧:下架/封禁) tags: - Super /super/v1/tenants/{tenantID}/status: patch: consumes: - application/json parameters: - description: TenantID format: int64 in: path name: tenantID required: true type: integer - description: Form in: body name: form required: true schema: $ref: '#/definitions/dto.TenantStatusUpdateForm' produces: - application/json responses: {} summary: 更新租户状态 tags: - Super /super/v1/tenants/{tenantID}/users: get: consumes: - application/json parameters: - description: TenantID format: int64 in: path name: tenantID required: true type: integer - description: Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10). in: query name: limit type: integer - description: Page is 1-based page index; values <= 0 are normalized to 1. in: query name: page type: integer - description: Role 按角色过滤(可选):member/tenant_admin。 enum: - member - tenant_admin in: query name: role type: string x-enum-varnames: - TenantUserRoleMember - TenantUserRoleTenantAdmin - description: Status 按成员状态过滤(可选):pending_verify/verified/banned。 enum: - pending_verify - verified - banned in: query name: status type: string x-enum-varnames: - UserStatusPendingVerify - UserStatusVerified - UserStatusBanned - description: UserID 按用户ID过滤(可选)。 in: query name: user_id type: integer - description: Username 按用户名模糊查询(可选,支持包含匹配)。 in: query name: username type: string produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/requests.Pager' - properties: items: $ref: '#/definitions/dto.SuperTenantUserItem' type: object summary: 租户成员列表(平台侧) tags: - Super /super/v1/tenants/statuses: get: consumes: - application/json produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/requests.KV' type: array summary: 租户状态列表 tags: - Super /super/v1/users: get: consumes: - application/json parameters: - description: Asc specifies comma-separated field names to sort ascending by. in: query name: asc type: string - in: query name: created_at_from type: string - in: query name: created_at_to type: string - description: Desc specifies comma-separated field names to sort descending by. in: query name: desc type: string - in: query name: id type: integer - description: Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10). in: query name: limit type: integer - description: Page is 1-based page index; values <= 0 are normalized to 1. in: query name: page type: integer - description: Role filters users containing a role (user/super_admin). enum: - user - super_admin in: query name: role type: string x-enum-varnames: - RoleUser - RoleSuperAdmin - enum: - pending_verify - verified - banned in: query name: status type: string x-enum-varnames: - UserStatusPendingVerify - UserStatusVerified - UserStatusBanned - description: TenantID filters users by membership in the given tenant. in: query name: tenant_id type: integer - in: query name: username type: string - in: query name: verified_at_from type: string - in: query name: verified_at_to type: string produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/requests.Pager' - properties: items: $ref: '#/definitions/dto.UserItem' type: object summary: 用户列表 tags: - Super /super/v1/users/{userID}: get: consumes: - application/json parameters: - description: UserID format: int64 in: path name: userID required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.UserItem' summary: 用户详情 tags: - Super /super/v1/users/{userID}/roles: patch: consumes: - application/json parameters: - description: UserID format: int64 in: path name: userID required: true type: integer - description: Form in: body name: form required: true schema: $ref: '#/definitions/dto.UserRolesUpdateForm' produces: - application/json responses: {} summary: 更新用户角色 tags: - Super /super/v1/users/{userID}/status: patch: consumes: - application/json parameters: - description: UserID format: int64 in: path name: userID required: true type: integer - description: Form in: body name: form required: true schema: $ref: '#/definitions/dto.UserStatusUpdateForm' produces: - application/json responses: {} summary: 更新用户状态 tags: - Super /super/v1/users/{userID}/tenants: get: consumes: - application/json parameters: - description: UserID format: int64 in: path name: userID required: true type: integer - in: query name: code type: string - in: query name: created_at_from type: string - in: query name: created_at_to type: string - description: Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10). in: query name: limit type: integer - in: query name: name type: string - description: Page is 1-based page index; values <= 0 are normalized to 1. in: query name: page type: integer - description: Role filters tenant_users.role containing a role (tenant_admin/member). enum: - member - tenant_admin in: query name: role type: string x-enum-varnames: - TenantUserRoleMember - TenantUserRoleTenantAdmin - description: Status filters tenant_users.status. enum: - pending_verify - verified - banned in: query name: status type: string x-enum-varnames: - UserStatusPendingVerify - UserStatusVerified - UserStatusBanned - in: query name: tenant_id type: integer produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/requests.Pager' - properties: items: $ref: '#/definitions/dto.UserTenantItem' type: object summary: 用户加入的租户列表 tags: - Super /super/v1/users/statistics: get: consumes: - application/json produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/dto.UserStatistics' type: array summary: 用户统计信息 tags: - Super /super/v1/users/statuses: get: consumes: - application/json produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/requests.KV' type: array summary: 用户状态列表 tags: - Super /t/{tenantCode}/v1/admin/contents: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: Asc specifies comma-separated field names to sort ascending by. in: query name: asc type: string - in: query name: created_at_from type: string - in: query name: created_at_to type: string - description: Desc specifies comma-separated field names to sort descending by. in: query name: desc type: string - in: query name: id type: integer - in: query name: keyword type: string - description: Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10). in: query name: limit type: integer - description: Page is 1-based page index; values <= 0 are normalized to 1. in: query name: page type: integer - in: query name: published_at_from type: string - in: query name: published_at_to type: string - enum: - draft - reviewing - published - unpublished - blocked in: query name: status type: string x-enum-varnames: - ContentStatusDraft - ContentStatusReviewing - ContentStatusPublished - ContentStatusUnpublished - ContentStatusBlocked - in: query name: user_id type: integer - enum: - public - tenant_only - private in: query name: visibility type: string x-enum-varnames: - ContentVisibilityPublic - ContentVisibilityTenantOnly - ContentVisibilityPrivate produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/requests.Pager' - properties: items: $ref: '#/definitions/dto.AdminContentItem' type: object summary: 内容列表(租户管理) tags: - Tenant post: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: Form in: body name: form required: true schema: $ref: '#/definitions/dto.ContentCreateForm' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.Content' summary: 创建内容(草稿) tags: - Tenant /t/{tenantCode}/v1/admin/contents/{contentID}: patch: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: ContentID format: int64 in: path name: contentID required: true type: integer - description: Form in: body name: form required: true schema: $ref: '#/definitions/dto.ContentUpdateForm' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.Content' summary: 更新内容(标题/描述/状态等) tags: - Tenant /t/{tenantCode}/v1/admin/contents/{contentID}/assets: post: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: ContentID format: int64 in: path name: contentID required: true type: integer - description: Form in: body name: form required: true schema: $ref: '#/definitions/dto.ContentAssetAttachForm' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.ContentAsset' summary: 绑定媒体资源到内容(main/cover/preview) tags: - Tenant /t/{tenantCode}/v1/admin/contents/{contentID}/price: put: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: ContentID format: int64 in: path name: contentID required: true type: integer - description: Form in: body name: form required: true schema: $ref: '#/definitions/dto.ContentPriceUpsertForm' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.ContentPrice' summary: 设置内容价格与折扣 tags: - Tenant /t/{tenantCode}/v1/admin/invites: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: Code 按邀请码模糊过滤(可选):支持部分匹配(like)。 in: query name: code type: string - description: Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10). in: query name: limit type: integer - description: Page is 1-based page index; values <= 0 are normalized to 1. in: query name: page type: integer - description: Status 按状态过滤(可选):active/disabled/expired。 enum: - active - disabled - expired in: query name: status type: string x-enum-varnames: - TenantInviteStatusActive - TenantInviteStatusDisabled - TenantInviteStatusExpired produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/requests.Pager' - properties: items: $ref: '#/definitions/models.TenantInvite' type: object summary: 邀请码列表(租户管理) tags: - Tenant post: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: Form in: body name: form required: true schema: $ref: '#/definitions/dto.AdminTenantInviteCreateForm' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.TenantInvite' summary: 创建邀请码(租户管理) tags: - Tenant /t/{tenantCode}/v1/admin/invites/{inviteID}/disable: patch: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: InviteID format: int64 in: path name: inviteID required: true type: integer - description: Form in: body name: form required: true schema: $ref: '#/definitions/dto.AdminTenantInviteDisableForm' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.TenantInvite' summary: 禁用邀请码(租户管理) tags: - Tenant /t/{tenantCode}/v1/admin/join-requests: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10). in: query name: limit type: integer - description: Page is 1-based page index; values <= 0 are normalized to 1. in: query name: page type: integer - description: Status 按申请状态过滤(可选):pending/approved/rejected。 enum: - pending - approved - rejected in: query name: status type: string x-enum-varnames: - TenantJoinRequestStatusPending - TenantJoinRequestStatusApproved - TenantJoinRequestStatusRejected - description: UserID 按申请人用户ID过滤(可选)。 in: query name: user_id type: integer produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/requests.Pager' - properties: items: $ref: '#/definitions/models.TenantJoinRequest' type: object summary: 加入申请列表(租户管理) tags: - Tenant /t/{tenantCode}/v1/admin/join-requests/{requestID}/approve: post: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: RequestID format: int64 in: path name: requestID required: true type: integer - description: Form in: body name: form required: true schema: $ref: '#/definitions/dto.AdminTenantJoinRequestDecideForm' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.TenantJoinRequest' summary: 通过加入申请(租户管理) tags: - Tenant /t/{tenantCode}/v1/admin/join-requests/{requestID}/reject: post: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: RequestID format: int64 in: path name: requestID required: true type: integer - description: Form in: body name: form required: true schema: $ref: '#/definitions/dto.AdminTenantJoinRequestDecideForm' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.TenantJoinRequest' summary: 拒绝加入申请(租户管理) tags: - Tenant /t/{tenantCode}/v1/admin/ledgers: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: BizRefID 按业务引用ID过滤(可选)。 in: query name: biz_ref_id type: integer - description: |- BizRefType 按业务引用类型过滤(可选)。 约定:当前业务写入为 "order";未来可扩展为 refund 等。 in: query name: biz_ref_type type: string - description: CreatedAtFrom 创建时间起(可选)。 in: query name: created_at_from type: string - description: CreatedAtTo 创建时间止(可选)。 in: query name: created_at_to type: string - description: Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10). in: query name: limit type: integer - description: |- OperatorUserID 按操作者用户ID过滤(可选)。 典型场景:后台检索“某个管理员发起的退款/调账”等敏感操作流水。 in: query name: operator_user_id type: integer - description: OrderID 按关联订单过滤(可选)。 in: query name: order_id type: integer - description: Page is 1-based page index; values <= 0 are normalized to 1. in: query name: page type: integer - description: Type 按流水类型过滤(可选)。 enum: - debit_purchase - credit_refund - freeze - unfreeze - adjustment in: query name: type type: string x-enum-varnames: - TenantLedgerTypeDebitPurchase - TenantLedgerTypeCreditRefund - TenantLedgerTypeFreeze - TenantLedgerTypeUnfreeze - TenantLedgerTypeAdjustment - description: |- UserID 按余额账户归属用户ID过滤(可选)。 典型场景:查看某个租户成员的资金变化全链路。 in: query name: user_id type: integer produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/requests.Pager' - properties: items: $ref: '#/definitions/dto.AdminLedgerItem' type: object summary: 余额流水列表(租户管理/审计) tags: - Tenant /t/{tenantCode}/v1/admin/media_assets: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: Asc specifies comma-separated field names to sort ascending by. in: query name: asc type: string - description: CreatedAtFrom filters assets by created_at >= this time; optional. in: query name: created_at_from type: string - description: CreatedAtTo filters assets by created_at <= this time; optional. in: query name: created_at_to type: string - description: Desc specifies comma-separated field names to sort descending by. in: query name: desc type: string - description: Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10). in: query name: limit type: integer - description: Page is 1-based page index; values <= 0 are normalized to 1. in: query name: page type: integer - description: Status filters by processing status (uploaded/processing/ready/failed/deleted); optional. enum: - uploaded - processing - ready - failed - deleted in: query name: status type: string x-enum-varnames: - MediaAssetStatusUploaded - MediaAssetStatusProcessing - MediaAssetStatusReady - MediaAssetStatusFailed - MediaAssetStatusDeleted - description: Type filters by media type (video/audio/image); optional. enum: - video - audio - image in: query name: type type: string x-enum-varnames: - MediaAssetTypeVideo - MediaAssetTypeAudio - MediaAssetTypeImage produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/requests.Pager' - properties: items: $ref: '#/definitions/models.MediaAsset' type: object summary: 媒体资源列表(租户管理) tags: - Tenant /t/{tenantCode}/v1/admin/media_assets/{assetID}: delete: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: AssetID format: int64 in: path name: assetID required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.MediaAsset' summary: 删除媒体资源(租户管理,软删) tags: - Tenant get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: AssetID format: int64 in: path name: assetID required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.MediaAsset' summary: 媒体资源详情(租户管理) tags: - Tenant /t/{tenantCode}/v1/admin/media_assets/{assetID}/upload_complete: post: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: AssetID format: int64 in: path name: assetID required: true type: integer - description: Form in: body name: form schema: $ref: '#/definitions/dto.AdminMediaAssetUploadCompleteForm' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.MediaAsset' summary: 确认上传完成并进入处理(租户管理) tags: - Tenant /t/{tenantCode}/v1/admin/media_assets/upload_init: post: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: Form in: body name: form required: true schema: $ref: '#/definitions/dto.AdminMediaAssetUploadInitForm' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.AdminMediaAssetUploadInitResponse' summary: 初始化媒体资源上传(租户管理) tags: - Tenant /t/{tenantCode}/v1/admin/orders: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: AmountPaidMax 实付金额上限(可选):amount_paid <= 该值(单位分)。 in: query name: amount_paid_max type: integer - description: AmountPaidMin 实付金额下限(可选):amount_paid >= 该值(单位分)。 in: query name: amount_paid_min type: integer - description: Asc specifies comma-separated field names to sort ascending by. in: query name: asc type: string - description: ContentID 内容ID(可选):通过 order_items 关联过滤。 in: query name: content_id type: integer - description: ContentTitle 内容标题关键字(可选):通过 order_items + contents 关联,模糊匹配 contents.title(like)。 in: query name: content_title type: string - description: CreatedAtFrom 创建时间起(可选):created_at >= 该时间(用于按创建时间筛选)。 in: query name: created_at_from type: string - description: CreatedAtTo 创建时间止(可选):created_at <= 该时间(用于按创建时间筛选)。 in: query name: created_at_to type: string - description: Desc specifies comma-separated field names to sort descending by. in: query name: desc type: string - description: Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10). in: query name: limit type: integer - description: Page is 1-based page index; values <= 0 are normalized to 1. in: query name: page type: integer - description: PaidAtFrom 支付时间起(可选):paid_at >= 该时间(用于按支付时间筛选)。 in: query name: paid_at_from type: string - description: PaidAtTo 支付时间止(可选):paid_at <= 该时间(用于按支付时间筛选)。 in: query name: paid_at_to type: string - description: Status 订单状态(可选):created/paid/refunding/refunded/canceled/failed。 enum: - created - paid - refunding - refunded - canceled - failed in: query name: status type: string x-enum-varnames: - OrderStatusCreated - OrderStatusPaid - OrderStatusRefunding - OrderStatusRefunded - OrderStatusCanceled - OrderStatusFailed - description: Type 订单类型(可选):content_purchase 等。 enum: - content_purchase in: query name: type type: string x-enum-varnames: - OrderTypeContentPurchase - description: UserID 下单用户ID(可选):按买家用户ID精确过滤。 in: query name: user_id type: integer - description: Username 下单用户用户名关键字(可选):模糊匹配 users.username(like)。 in: query name: username type: string produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/requests.Pager' - properties: items: $ref: '#/definitions/models.Order' type: object summary: 订单列表(租户管理) tags: - Tenant /t/{tenantCode}/v1/admin/orders/{orderID}: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: OrderID format: int64 in: path name: orderID required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.AdminOrderDetail' summary: 订单详情(租户管理) tags: - Tenant /t/{tenantCode}/v1/admin/orders/{orderID}/refund: post: consumes: - application/json description: |- 该接口只负责将订单从 paid 推进到 refunding,并提交异步退款任务;退款入账与权益回收由 worker 异步完成。 重复请求幂等:订单处于 refunding/refunded 时会返回当前订单状态,不会重复入账/重复回收权益。 parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: OrderID format: int64 in: path name: orderID required: true type: integer - description: Form in: body name: form required: true schema: $ref: '#/definitions/dto.AdminOrderRefundForm' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.Order' summary: 订单退款(租户管理) tags: - Tenant /t/{tenantCode}/v1/admin/orders/export: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: AmountPaidMax 实付金额上限(可选):amount_paid <= 该值(单位分)。 in: query name: amount_paid_max type: integer - description: AmountPaidMin 实付金额下限(可选):amount_paid >= 该值(单位分)。 in: query name: amount_paid_min type: integer - description: Asc specifies comma-separated field names to sort ascending by. in: query name: asc type: string - description: ContentID 内容ID(可选):通过 order_items 关联过滤。 in: query name: content_id type: integer - description: ContentTitle 内容标题关键字(可选):通过 order_items + contents 关联,模糊匹配 contents.title(like)。 in: query name: content_title type: string - description: CreatedAtFrom 创建时间起(可选):created_at >= 该时间(用于按创建时间筛选)。 in: query name: created_at_from type: string - description: CreatedAtTo 创建时间止(可选):created_at <= 该时间(用于按创建时间筛选)。 in: query name: created_at_to type: string - description: Desc specifies comma-separated field names to sort descending by. in: query name: desc type: string - description: Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10). in: query name: limit type: integer - description: Page is 1-based page index; values <= 0 are normalized to 1. in: query name: page type: integer - description: PaidAtFrom 支付时间起(可选):paid_at >= 该时间(用于按支付时间筛选)。 in: query name: paid_at_from type: string - description: PaidAtTo 支付时间止(可选):paid_at <= 该时间(用于按支付时间筛选)。 in: query name: paid_at_to type: string - description: Status 订单状态(可选):created/paid/refunding/refunded/canceled/failed。 enum: - created - paid - refunding - refunded - canceled - failed in: query name: status type: string x-enum-varnames: - OrderStatusCreated - OrderStatusPaid - OrderStatusRefunding - OrderStatusRefunded - OrderStatusCanceled - OrderStatusFailed - description: Type 订单类型(可选):content_purchase 等。 enum: - content_purchase in: query name: type type: string x-enum-varnames: - OrderTypeContentPurchase - description: UserID 下单用户ID(可选):按买家用户ID精确过滤。 in: query name: user_id type: integer - description: Username 下单用户用户名关键字(可选):模糊匹配 users.username(like)。 in: query name: username type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.AdminOrderExportResponse' summary: 订单导出(租户管理) tags: - Tenant /t/{tenantCode}/v1/admin/users: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10). in: query name: limit type: integer - description: Page is 1-based page index; values <= 0 are normalized to 1. in: query name: page type: integer - description: Role 按角色过滤(可选):member/tenant_admin。 enum: - member - tenant_admin in: query name: role type: string x-enum-varnames: - TenantUserRoleMember - TenantUserRoleTenantAdmin - description: Status 按成员状态过滤(可选):pending_verify/verified/banned。 enum: - pending_verify - verified - banned in: query name: status type: string x-enum-varnames: - UserStatusPendingVerify - UserStatusVerified - UserStatusBanned - description: UserID 按用户ID过滤(可选)。 in: query name: user_id type: integer - description: Username 按用户名模糊查询(可选,支持包含匹配)。 in: query name: username type: string produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/requests.Pager' - properties: items: $ref: '#/definitions/dto.AdminTenantUserItem' type: object summary: 成员列表(租户管理) tags: - Tenant /t/{tenantCode}/v1/admin/users/{userID}: delete: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: UserID format: int64 in: path name: userID required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/requests.Pager' summary: 移除租户成员(租户管理) tags: - Tenant /t/{tenantCode}/v1/admin/users/{userID}/join: post: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: UserID format: int64 in: path name: userID required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.AdminTenantUserJoinResponse' summary: 添加租户成员(租户管理) tags: - Tenant /t/{tenantCode}/v1/admin/users/{userID}/role: patch: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: UserID format: int64 in: path name: userID required: true type: integer - description: Form in: body name: form required: true schema: $ref: '#/definitions/dto.AdminTenantUserRoleUpdateForm' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.AdminTenantUserJoinResponse' summary: 设置成员角色(租户管理) tags: - Tenant /t/{tenantCode}/v1/contents: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: Keyword filters by title keyword (LIKE). in: query name: keyword type: string - description: Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10). in: query name: limit type: integer - description: Page is 1-based page index; values <= 0 are normalized to 1. in: query name: page type: integer produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/requests.Pager' - properties: items: $ref: '#/definitions/dto.ContentItem' type: object summary: 内容列表(已发布) tags: - Tenant /t/{tenantCode}/v1/contents/{contentID}: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: ContentID format: int64 in: path name: contentID required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.ContentDetail' summary: 内容详情(可见性+权益校验) tags: - Tenant /t/{tenantCode}/v1/contents/{contentID}/assets: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: ContentID format: int64 in: path name: contentID required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.ContentAssetsResponse' summary: 获取正片资源(main role,需要已购或免费) tags: - Tenant /t/{tenantCode}/v1/contents/{contentID}/preview: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: ContentID format: int64 in: path name: contentID required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.ContentAssetsResponse' summary: 获取试看资源(preview role) tags: - Tenant /t/{tenantCode}/v1/contents/{contentID}/purchase: post: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: ContentID format: int64 in: path name: contentID required: true type: integer - description: Form in: body name: form required: true schema: $ref: '#/definitions/dto.PurchaseContentForm' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.PurchaseContentResponse' summary: 购买内容(余额支付) tags: - Tenant /t/{tenantCode}/v1/join/invite: post: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: Form in: body name: form required: true schema: $ref: '#/definitions/dto.JoinByInviteForm' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.TenantUser' summary: 通过邀请码加入租户 tags: - TenantJoin /t/{tenantCode}/v1/join/request: post: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: Form in: body name: form required: true schema: $ref: '#/definitions/dto.JoinRequestCreateForm' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.TenantJoinRequest' summary: 提交加入租户申请 tags: - TenantJoin /t/{tenantCode}/v1/me: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/quyun_v2_app_http_tenant_dto.MeResponse' summary: 当前租户上下文信息 tags: - Tenant /t/{tenantCode}/v1/me/balance: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.MeBalanceResponse' summary: 当前租户余额信息 tags: - Tenant /t/{tenantCode}/v1/me/ledgers: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/requests.Pager' - properties: items: $ref: '#/definitions/dto.MyLedgerItem' type: object summary: 当前租户余额流水(分页) tags: - Tenant /t/{tenantCode}/v1/media/play: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: Play token in: query name: token required: true type: string produces: - application/json responses: {} summary: 媒体播放入口(短时效 token) tags: - TenantMedia /t/{tenantCode}/v1/orders: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: ContentID filters orders by purchased content id (via order_items join). in: query name: content_id type: integer - description: Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10). in: query name: limit type: integer - description: Page is 1-based page index; values <= 0 are normalized to 1. in: query name: page type: integer - description: PaidAtFrom filters orders by paid_at >= this time. in: query name: paid_at_from type: string - description: PaidAtTo filters orders by paid_at <= this time. in: query name: paid_at_to type: string - description: Status filters orders by order status. enum: - created - paid - refunding - refunded - canceled - failed in: query name: status type: string x-enum-varnames: - OrderStatusCreated - OrderStatusPaid - OrderStatusRefunding - OrderStatusRefunded - OrderStatusCanceled - OrderStatusFailed produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/requests.Pager' - properties: items: $ref: '#/definitions/models.Order' type: object summary: 我的订单列表(当前租户) tags: - Tenant /t/{tenantCode}/v1/orders/{orderID}: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: OrderID format: int64 in: path name: orderID required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/models.Order' summary: 我的订单详情(当前租户) tags: - Tenant /t/{tenantCode}/v1/public/contents: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: Keyword filters by title keyword (LIKE). in: query name: keyword type: string - description: Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10). in: query name: limit type: integer - description: Page is 1-based page index; values <= 0 are normalized to 1. in: query name: page type: integer produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/requests.Pager' - properties: items: $ref: '#/definitions/dto.ContentItem' type: object summary: 公开内容列表(已发布 + public) tags: - TenantPublic /t/{tenantCode}/v1/public/contents/{contentID}: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: ContentID format: int64 in: path name: contentID required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.ContentDetail' summary: 公开内容详情(已发布 + public) tags: - TenantPublic /t/{tenantCode}/v1/public/contents/{contentID}/assets: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: ContentID format: int64 in: path name: contentID required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.ContentAssetsResponse' summary: 获取公开正片资源(main role;免费/作者/已购) tags: - TenantPublic /t/{tenantCode}/v1/public/contents/{contentID}/preview: get: consumes: - application/json parameters: - description: Tenant Code in: path name: tenantCode required: true type: string - description: ContentID format: int64 in: path name: contentID required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/dto.ContentAssetsResponse' summary: 获取公开试看资源(preview role) tags: - TenantPublic /v1/auth/login: post: consumes: - application/json parameters: - description: form in: body name: form required: true schema: $ref: '#/definitions/quyun_v2_app_http_web_dto.LoginForm' produces: - application/json responses: "200": description: 成功 schema: $ref: '#/definitions/quyun_v2_app_http_web_dto.LoginResponse' summary: 用户登录 tags: - Web /v1/auth/token: get: consumes: - application/json produces: - application/json responses: "200": description: 成功 schema: $ref: '#/definitions/quyun_v2_app_http_web_dto.LoginResponse' summary: 刷新 Token tags: - Web /v1/me: get: consumes: - application/json produces: - application/json responses: "200": description: 成功 schema: $ref: '#/definitions/quyun_v2_app_http_web_dto.MeResponse' summary: 当前用户信息 tags: - Web /v1/me/tenants: get: consumes: - application/json produces: - application/json responses: "200": description: 成功 schema: items: $ref: '#/definitions/dto.MyTenantItem' type: array summary: 我的租户列表 tags: - Web securityDefinitions: BasicAuth: type: basic swagger: "2.0"