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.ContentPublishForm:
    properties:
      audio_asset_ids:
        description: AudioAssetIDs 音频资源 ID 列表：可为空；每个资源必须为 audio/main/ready。
        items:
          type: integer
        type: array
      cover_asset_ids:
        description: CoverAssetIDs 展示图（封面图）资源 ID 列表：1-3 张；每个资源必须为 image/main/ready。
        items:
          type: integer
        type: array
      currency:
        allOf:
        - $ref: '#/definitions/consts.Currency'
        description: Currency 币种：当前固定为 CNY；可不传（后端默认 CNY）。
      detail:
        description: Detail 详细：用于详情页的长文本；可选；当非空时视为“文字内容”类型存在。
        type: string
      image_asset_ids:
        description: ImageAssetIDs 多图内容资源 ID 列表：可为空；每个资源必须为 image/main/ready；数量 >=
          2 时视为“多图内容”类型存在。
        items:
          type: integer
        type: array
      preview_seconds:
        description: PreviewSeconds 试看秒数：仅对 preview 资源生效；默认 60；必须为正整数。
        type: integer
      price_amount:
        description: PriceAmount 价格：单位为分；0 表示免费；必填（前端可默认填 0）。
        type: integer
      summary:
        description: Summary 简介：用于列表/卡片展示的短文本；可选，建议 <= 256 字符。
        type: string
      tags:
        description: Tags 标签：用于分类/检索；字符串数组；会做 trim/去重；可为空。
        items:
          type: string
        type: array
      title:
        description: Title 标题：用于列表展示与搜索；必填。
        type: string
      video_asset_ids:
        description: VideoAssetIDs 视频资源 ID 列表：可为空；每个资源必须为 video/main/ready。
        items:
          type: integer
        type: array
      visibility:
        allOf:
        - $ref: '#/definitions/consts.ContentVisibility'
        description: Visibility 可见性：控制“详情页”可见范围；默认 tenant_only。
    type: object
  dto.ContentPublishResponse:
    properties:
      content:
        allOf:
        - $ref: '#/definitions/models.Content'
        description: Content 内容主体（包含标题/简介/详细/状态等）。
      content_types:
        description: ContentTypes 内容类型列表：text/audio/video/image/multi_image（用于前端展示）。
        items:
          type: string
        type: array
      cover_assets:
        description: CoverAssets 封面图绑定结果（role=cover）。
        items:
          $ref: '#/definitions/models.ContentAsset'
        type: array
      main_assets:
        description: MainAssets 主资源绑定结果（role=main；可能包含音频/视频/图片）。
        items:
          $ref: '#/definitions/models.ContentAsset'
        type: array
      price:
        allOf:
        - $ref: '#/definitions/models.ContentPrice'
        description: Price 定价信息（单位分）。
    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.PasswordResetForm:
    properties:
      confirmPassword:
        description: ConfirmPassword 确认新密码；必须与 Password 一致。
        type: string
      password:
        description: Password 新密码（明文）。
        type: string
      resetToken:
        description: ResetToken 重置令牌；由验证码校验接口返回。
        type: string
    type: object
  dto.PasswordResetResponse:
    properties:
      ok:
        description: Ok 是否成功。
        type: boolean
    type: object
  dto.PasswordResetSendSMSForm:
    properties:
      phone:
        description: Phone 手机号；当前版本将其作为用户名使用（users.username）。
        type: string
    type: object
  dto.PasswordResetSendSMSResponse:
    properties:
      code:
        description: Code 验证码（预留：当前用于前端弹窗展示；正式接入短信后应移除/仅在开发环境返回）。
        type: string
      nextSendSeconds:
        description: NextSendSeconds 下次可发送剩余秒数（用于前端 60s 倒计时）。
        type: integer
    type: object
  dto.PasswordResetVerifyForm:
    properties:
      code:
        description: Code 短信验证码。
        type: string
      phone:
        description: Phone 手机号。
        type: string
    type: object
  dto.PasswordResetVerifyResponse:
    properties:
      resetToken:
        description: ResetToken 重置令牌；验证码校验通过后，用该令牌提交新密码。
        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.RegisterForm:
    properties:
      confirmPassword:
        description: ConfirmPassword 确认密码；必须与 Password 一致，避免误输入导致无法登录。
        type: string
      password:
        description: Password 明文密码；后端会在创建用户时自动加密（bcrypt）。
        type: string
      username:
        description: Username 用户名；需全局唯一（users.username）；建议仅允许字母/数字/下划线，且长度在合理范围内。
        type: string
      verifyCode:
        description: VerifyCode 验证码（预留字段）；当前版本仅透传/占位，不做后端校验。
        type: string
    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.TenantApplicationResponse:
    properties:
      createdAt:
        description: CreatedAt 申请创建时间（租户记录创建时间）。
        type: string
      hasApplication:
        description: HasApplication 是否已提交过申请（或已成为创作者）。
        type: boolean
      status:
        allOf:
        - $ref: '#/definitions/consts.TenantStatus'
        description: Status 租户状态（pending_verify/verified/banned）。
      statusDescription:
        description: StatusDescription 状态描述（便于前端展示）。
        type: string
      tenantCode:
        description: TenantCode 租户 Code。
        type: string
      tenantId:
        description: TenantID 租户ID。
        type: integer
      tenantName:
        description: TenantName 租户名称。
        type: string
    type: object
  dto.TenantApplyForm:
    properties:
      code:
        description: Code 租户 ID（用于 URL/系统标识）；全局唯一（tenants.code，忽略大小写）。
        type: string
      name:
        description: Name 租户名称（展示用）。
        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 才对外展示
      summary:
        description: 简介：用于列表/卡片展示的短文本；建议 <= 256 字符（由业务校验）
        type: string
      tags:
        description: 标签：JSON 数组（字符串列表）；用于分类/检索与聚合展示
        items:
          type: integer
        type: array
      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 <token>` 方式携带。'
        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/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/management/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/management/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/management/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/management/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/management/contents/publish:
    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.ContentPublishForm'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/dto.ContentPublishResponse'
      summary: 内容发布（创建+绑定资源+定价）
      tags:
      - Tenant
  /t/{tenantCode}/v1/management/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/management/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/management/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/management/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/management/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/management/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/management/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/management/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/management/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/management/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/management/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/management/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/management/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/management/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/management/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/management/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/management/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/management/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/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/password/reset:
    post:
      consumes:
      - application/json
      parameters:
      - description: form
        in: body
        name: form
        required: true
        schema:
          $ref: '#/definitions/dto.PasswordResetForm'
      produces:
      - application/json
      responses:
        "200":
          description: 成功
          schema:
            $ref: '#/definitions/dto.PasswordResetResponse'
      summary: 找回密码-重置密码
      tags:
      - Web
  /v1/auth/password/reset/sms:
    post:
      consumes:
      - application/json
      parameters:
      - description: form
        in: body
        name: form
        required: true
        schema:
          $ref: '#/definitions/dto.PasswordResetSendSMSForm'
      produces:
      - application/json
      responses:
        "200":
          description: 成功
          schema:
            $ref: '#/definitions/dto.PasswordResetSendSMSResponse'
      summary: 找回密码-发送短信验证码
      tags:
      - Web
  /v1/auth/password/reset/verify:
    post:
      consumes:
      - application/json
      parameters:
      - description: form
        in: body
        name: form
        required: true
        schema:
          $ref: '#/definitions/dto.PasswordResetVerifyForm'
      produces:
      - application/json
      responses:
        "200":
          description: 成功
          schema:
            $ref: '#/definitions/dto.PasswordResetVerifyResponse'
      summary: 找回密码-校验验证码
      tags:
      - Web
  /v1/auth/register:
    post:
      consumes:
      - application/json
      parameters:
      - description: form
        in: body
        name: form
        required: true
        schema:
          $ref: '#/definitions/dto.RegisterForm'
      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
  /v1/tenant/application:
    get:
      consumes:
      - application/json
      produces:
      - application/json
      responses:
        "200":
          description: 成功
          schema:
            $ref: '#/definitions/dto.TenantApplicationResponse'
      summary: 获取租户申请信息（申请创作者）
      tags:
      - Web
  /v1/tenant/apply:
    post:
      consumes:
      - application/json
      parameters:
      - description: form
        in: body
        name: form
        required: true
        schema:
          $ref: '#/definitions/dto.TenantApplyForm'
      produces:
      - application/json
      responses:
        "200":
          description: 成功
          schema:
            $ref: '#/definitions/dto.TenantApplicationResponse'
      summary: 提交租户申请（申请创作者）
      tags:
      - Web
securityDefinitions:
  BasicAuth:
    type: basic
swagger: "2.0"
