{
    "swagger": "2.0",
    "info": {
        "description": "Multi-tenant media platform backend API.",
        "title": "ApiDoc",
        "termsOfService": "http://swagger.io/terms/",
        "contact": {
            "name": "UserName",
            "url": "http://www.swagger.io/support",
            "email": "support@swagger.io"
        },
        "license": {
            "name": "Apache 2.0",
            "url": "http://www.apache.org/licenses/LICENSE-2.0.html"
        },
        "version": "1.0"
    },
    "host": "localhost:8080",
    "basePath": "/",
    "paths": {
        "/super/v1/auth/login": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Super"
                ],
                "parameters": [
                    {
                        "description": "form",
                        "name": "form",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/dto.LoginForm"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "成功",
                        "schema": {
                            "$ref": "#/definitions/dto.LoginResponse"
                        }
                    }
                }
            }
        },
        "/super/v1/auth/token": {
            "get": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Super"
                ],
                "responses": {
                    "200": {
                        "description": "成功",
                        "schema": {
                            "$ref": "#/definitions/dto.LoginResponse"
                        }
                    }
                }
            }
        },
        "/super/v1/tenants": {
            "get": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Super"
                ],
                "summary": "租户列表",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Asc specifies comma-separated field names to sort ascending by.",
                        "name": "asc",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Desc specifies comma-separated field names to sort descending by.",
                        "name": "desc",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10).",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "name": "name",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Page is 1-based page index; values \u003c= 0 are normalized to 1.",
                        "name": "page",
                        "in": "query"
                    },
                    {
                        "enum": [
                            "pending_verify",
                            "verified",
                            "banned"
                        ],
                        "type": "string",
                        "x-enum-varnames": [
                            "TenantStatusPendingVerify",
                            "TenantStatusVerified",
                            "TenantStatusBanned"
                        ],
                        "name": "status",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/requests.Pager"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "items": {
                                            "$ref": "#/definitions/dto.TenantItem"
                                        }
                                    }
                                }
                            ]
                        }
                    }
                }
            }
        },
        "/super/v1/tenants/statuses": {
            "get": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Super"
                ],
                "summary": "租户状态列表",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/requests.KV"
                            }
                        }
                    }
                }
            }
        },
        "/super/v1/tenants/{tenantID}": {
            "patch": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Super"
                ],
                "summary": "更新过期时间",
                "parameters": [
                    {
                        "type": "integer",
                        "format": "int64",
                        "description": "TenantID",
                        "name": "tenantID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Form",
                        "name": "form",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/dto.TenantExpireUpdateForm"
                        }
                    }
                ],
                "responses": {}
            }
        },
        "/super/v1/tenants/{tenantID}/status": {
            "patch": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Super"
                ],
                "summary": "更新租户状态",
                "parameters": [
                    {
                        "type": "integer",
                        "format": "int64",
                        "description": "TenantID",
                        "name": "tenantID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Form",
                        "name": "form",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/dto.TenantStatusUpdateForm"
                        }
                    }
                ],
                "responses": {}
            }
        },
        "/super/v1/users": {
            "get": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Super"
                ],
                "summary": "租户列表",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Asc specifies comma-separated field names to sort ascending by.",
                        "name": "asc",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Desc specifies comma-separated field names to sort descending by.",
                        "name": "desc",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10).",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Page is 1-based page index; values \u003c= 0 are normalized to 1.",
                        "name": "page",
                        "in": "query"
                    },
                    {
                        "enum": [
                            "pending_verify",
                            "verified",
                            "banned"
                        ],
                        "type": "string",
                        "x-enum-varnames": [
                            "UserStatusPendingVerify",
                            "UserStatusVerified",
                            "UserStatusBanned"
                        ],
                        "name": "status",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "name": "tenantID",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "name": "username",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/requests.Pager"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "items": {
                                            "$ref": "#/definitions/dto.UserItem"
                                        }
                                    }
                                }
                            ]
                        }
                    }
                }
            }
        },
        "/super/v1/users/statistics": {
            "get": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Super"
                ],
                "summary": "用户统计信息",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/dto.UserStatistics"
                            }
                        }
                    }
                }
            }
        },
        "/super/v1/users/statuses": {
            "get": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Super"
                ],
                "summary": "用户状态列表",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/requests.KV"
                            }
                        }
                    }
                }
            }
        },
        "/super/v1/users/{userID}/status": {
            "patch": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Super"
                ],
                "summary": "更新用户状态",
                "parameters": [
                    {
                        "type": "integer",
                        "format": "int64",
                        "description": "UserID",
                        "name": "userID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Form",
                        "name": "form",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/dto.UserStatusUpdateForm"
                        }
                    }
                ],
                "responses": {}
            }
        },
        "/t/{tenantCode}/v1/admin/contents": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "创建内容（草稿）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Form",
                        "name": "form",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/dto.ContentCreateForm"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/models.Content"
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/admin/contents/{contentID}": {
            "patch": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "更新内容（标题/描述/状态等）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "format": "int64",
                        "description": "ContentID",
                        "name": "contentID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Form",
                        "name": "form",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/dto.ContentUpdateForm"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/models.Content"
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/admin/contents/{contentID}/assets": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "绑定媒体资源到内容（main/cover/preview）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "format": "int64",
                        "description": "ContentID",
                        "name": "contentID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Form",
                        "name": "form",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/dto.ContentAssetAttachForm"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/models.ContentAsset"
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/admin/contents/{contentID}/price": {
            "put": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "设置内容价格与折扣",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "format": "int64",
                        "description": "ContentID",
                        "name": "contentID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Form",
                        "name": "form",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/dto.ContentPriceUpsertForm"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/models.ContentPrice"
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/admin/invites": {
            "get": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "邀请码列表（租户管理）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Code 按邀请码模糊过滤（可选）：支持部分匹配（like）。",
                        "name": "code",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10).",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Page is 1-based page index; values \u003c= 0 are normalized to 1.",
                        "name": "page",
                        "in": "query"
                    },
                    {
                        "enum": [
                            "active",
                            "disabled",
                            "expired"
                        ],
                        "type": "string",
                        "x-enum-varnames": [
                            "TenantInviteStatusActive",
                            "TenantInviteStatusDisabled",
                            "TenantInviteStatusExpired"
                        ],
                        "description": "Status 按状态过滤（可选）：active/disabled/expired。",
                        "name": "status",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/requests.Pager"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "items": {
                                            "$ref": "#/definitions/models.TenantInvite"
                                        }
                                    }
                                }
                            ]
                        }
                    }
                }
            },
            "post": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "创建邀请码（租户管理）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Form",
                        "name": "form",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/dto.AdminTenantInviteCreateForm"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/models.TenantInvite"
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/admin/invites/{inviteID}/disable": {
            "patch": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "禁用邀请码（租户管理）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "format": "int64",
                        "description": "InviteID",
                        "name": "inviteID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Form",
                        "name": "form",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/dto.AdminTenantInviteDisableForm"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/models.TenantInvite"
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/admin/join-requests": {
            "get": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "加入申请列表（租户管理）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10).",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Page is 1-based page index; values \u003c= 0 are normalized to 1.",
                        "name": "page",
                        "in": "query"
                    },
                    {
                        "enum": [
                            "pending",
                            "approved",
                            "rejected"
                        ],
                        "type": "string",
                        "x-enum-varnames": [
                            "TenantJoinRequestStatusPending",
                            "TenantJoinRequestStatusApproved",
                            "TenantJoinRequestStatusRejected"
                        ],
                        "description": "Status 按申请状态过滤（可选）：pending/approved/rejected。",
                        "name": "status",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "UserID 按申请人用户ID过滤（可选）。",
                        "name": "user_id",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/requests.Pager"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "items": {
                                            "$ref": "#/definitions/models.TenantJoinRequest"
                                        }
                                    }
                                }
                            ]
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/admin/join-requests/{requestID}/approve": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "通过加入申请（租户管理）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "format": "int64",
                        "description": "RequestID",
                        "name": "requestID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Form",
                        "name": "form",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/dto.AdminTenantJoinRequestDecideForm"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/models.TenantJoinRequest"
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/admin/join-requests/{requestID}/reject": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "拒绝加入申请（租户管理）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "format": "int64",
                        "description": "RequestID",
                        "name": "requestID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Form",
                        "name": "form",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/dto.AdminTenantJoinRequestDecideForm"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/models.TenantJoinRequest"
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/admin/orders": {
            "get": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "订单列表（租户管理）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "AmountPaidMax filters orders by amount_paid \u003c= this amount (cents).",
                        "name": "amount_paid_max",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "AmountPaidMin filters orders by amount_paid \u003e= this amount (cents).",
                        "name": "amount_paid_min",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "ContentID filters orders by purchased content id (via order_items join).",
                        "name": "content_id",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10).",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Page is 1-based page index; values \u003c= 0 are normalized to 1.",
                        "name": "page",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "PaidAtFrom filters orders by paid_at \u003e= this time.",
                        "name": "paid_at_from",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "PaidAtTo filters orders by paid_at \u003c= this time.",
                        "name": "paid_at_to",
                        "in": "query"
                    },
                    {
                        "enum": [
                            "created",
                            "paid",
                            "refunding",
                            "refunded",
                            "canceled",
                            "failed"
                        ],
                        "type": "string",
                        "x-enum-varnames": [
                            "OrderStatusCreated",
                            "OrderStatusPaid",
                            "OrderStatusRefunding",
                            "OrderStatusRefunded",
                            "OrderStatusCanceled",
                            "OrderStatusFailed"
                        ],
                        "description": "Status filters orders by order status.",
                        "name": "status",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "UserID filters orders by buyer user id.",
                        "name": "user_id",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/requests.Pager"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "items": {
                                            "$ref": "#/definitions/models.Order"
                                        }
                                    }
                                }
                            ]
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/admin/orders/{orderID}": {
            "get": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "订单详情（租户管理）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "format": "int64",
                        "description": "OrderID",
                        "name": "orderID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/dto.AdminOrderDetail"
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/admin/orders/{orderID}/refund": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "订单退款（租户管理）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "format": "int64",
                        "description": "OrderID",
                        "name": "orderID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Form",
                        "name": "form",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/dto.AdminOrderRefundForm"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/models.Order"
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/admin/users": {
            "get": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "成员列表（租户管理）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10).",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Page is 1-based page index; values \u003c= 0 are normalized to 1.",
                        "name": "page",
                        "in": "query"
                    },
                    {
                        "enum": [
                            "member",
                            "tenant_admin"
                        ],
                        "type": "string",
                        "x-enum-varnames": [
                            "TenantUserRoleMember",
                            "TenantUserRoleTenantAdmin"
                        ],
                        "description": "Role 按角色过滤（可选）：member/tenant_admin。",
                        "name": "role",
                        "in": "query"
                    },
                    {
                        "enum": [
                            "pending_verify",
                            "verified",
                            "banned"
                        ],
                        "type": "string",
                        "x-enum-varnames": [
                            "UserStatusPendingVerify",
                            "UserStatusVerified",
                            "UserStatusBanned"
                        ],
                        "description": "Status 按成员状态过滤（可选）：pending_verify/verified/banned。",
                        "name": "status",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "UserID 按用户ID过滤（可选）。",
                        "name": "user_id",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Username 按用户名模糊查询（可选，支持包含匹配）。",
                        "name": "username",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/requests.Pager"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "items": {
                                            "$ref": "#/definitions/dto.AdminTenantUserItem"
                                        }
                                    }
                                }
                            ]
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/admin/users/{userID}": {
            "delete": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "移除租户成员（租户管理）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "format": "int64",
                        "description": "UserID",
                        "name": "userID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/requests.Pager"
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/admin/users/{userID}/join": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "添加租户成员（租户管理）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "format": "int64",
                        "description": "UserID",
                        "name": "userID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/dto.AdminTenantUserJoinResponse"
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/admin/users/{userID}/role": {
            "patch": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "设置成员角色（租户管理）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "format": "int64",
                        "description": "UserID",
                        "name": "userID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Form",
                        "name": "form",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/dto.AdminTenantUserRoleUpdateForm"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/dto.AdminTenantUserJoinResponse"
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/admin/users/{userID}/topup": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "为租户成员充值（租户管理）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "format": "int64",
                        "description": "UserID",
                        "name": "userID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Form",
                        "name": "form",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/dto.AdminTopupForm"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/models.Order"
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/contents": {
            "get": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "内容列表（已发布）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Keyword filters by title keyword (LIKE).",
                        "name": "keyword",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10).",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Page is 1-based page index; values \u003c= 0 are normalized to 1.",
                        "name": "page",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/requests.Pager"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "items": {
                                            "$ref": "#/definitions/dto.ContentItem"
                                        }
                                    }
                                }
                            ]
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/contents/{contentID}": {
            "get": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "内容详情（可见性+权益校验）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "format": "int64",
                        "description": "ContentID",
                        "name": "contentID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/dto.ContentDetail"
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/contents/{contentID}/assets": {
            "get": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "获取正片资源（main role，需要已购或免费）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "format": "int64",
                        "description": "ContentID",
                        "name": "contentID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/dto.ContentAssetsResponse"
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/contents/{contentID}/preview": {
            "get": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "获取试看资源（preview role）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "format": "int64",
                        "description": "ContentID",
                        "name": "contentID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/dto.ContentAssetsResponse"
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/contents/{contentID}/purchase": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "购买内容（余额支付）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "format": "int64",
                        "description": "ContentID",
                        "name": "contentID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Form",
                        "name": "form",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/dto.PurchaseContentForm"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/dto.PurchaseContentResponse"
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/join/invite": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "TenantJoin"
                ],
                "summary": "通过邀请码加入租户",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Form",
                        "name": "form",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/dto.JoinByInviteForm"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/models.TenantUser"
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/join/request": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "TenantJoin"
                ],
                "summary": "提交加入租户申请",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Form",
                        "name": "form",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/dto.JoinRequestCreateForm"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/models.TenantJoinRequest"
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/me": {
            "get": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "当前租户上下文信息",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/dto.MeResponse"
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/me/balance": {
            "get": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "当前租户余额信息",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/dto.MeBalanceResponse"
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/me/ledgers": {
            "get": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "当前租户余额流水（分页）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/requests.Pager"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "items": {
                                            "$ref": "#/definitions/dto.MyLedgerItem"
                                        }
                                    }
                                }
                            ]
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/orders": {
            "get": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "我的订单列表（当前租户）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "ContentID filters orders by purchased content id (via order_items join).",
                        "name": "content_id",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10).",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Page is 1-based page index; values \u003c= 0 are normalized to 1.",
                        "name": "page",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "PaidAtFrom filters orders by paid_at \u003e= this time.",
                        "name": "paid_at_from",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "PaidAtTo filters orders by paid_at \u003c= this time.",
                        "name": "paid_at_to",
                        "in": "query"
                    },
                    {
                        "enum": [
                            "created",
                            "paid",
                            "refunding",
                            "refunded",
                            "canceled",
                            "failed"
                        ],
                        "type": "string",
                        "x-enum-varnames": [
                            "OrderStatusCreated",
                            "OrderStatusPaid",
                            "OrderStatusRefunding",
                            "OrderStatusRefunded",
                            "OrderStatusCanceled",
                            "OrderStatusFailed"
                        ],
                        "description": "Status filters orders by order status.",
                        "name": "status",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/requests.Pager"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "items": {
                                            "$ref": "#/definitions/models.Order"
                                        }
                                    }
                                }
                            ]
                        }
                    }
                }
            }
        },
        "/t/{tenantCode}/v1/orders/{orderID}": {
            "get": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tenant"
                ],
                "summary": "我的订单详情（当前租户）",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tenant Code",
                        "name": "tenantCode",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "format": "int64",
                        "description": "OrderID",
                        "name": "orderID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/models.Order"
                        }
                    }
                }
            }
        }
    },
    "definitions": {
        "consts.ContentAccessStatus": {
            "type": "string",
            "enum": [
                "active",
                "revoked",
                "expired"
            ],
            "x-enum-varnames": [
                "ContentAccessStatusActive",
                "ContentAccessStatusRevoked",
                "ContentAccessStatusExpired"
            ]
        },
        "consts.ContentAssetRole": {
            "type": "string",
            "enum": [
                "main",
                "cover",
                "preview"
            ],
            "x-enum-varnames": [
                "ContentAssetRoleMain",
                "ContentAssetRoleCover",
                "ContentAssetRolePreview"
            ]
        },
        "consts.ContentStatus": {
            "type": "string",
            "enum": [
                "draft",
                "reviewing",
                "published",
                "unpublished",
                "blocked"
            ],
            "x-enum-varnames": [
                "ContentStatusDraft",
                "ContentStatusReviewing",
                "ContentStatusPublished",
                "ContentStatusUnpublished",
                "ContentStatusBlocked"
            ]
        },
        "consts.ContentVisibility": {
            "type": "string",
            "enum": [
                "public",
                "tenant_only",
                "private"
            ],
            "x-enum-varnames": [
                "ContentVisibilityPublic",
                "ContentVisibilityTenantOnly",
                "ContentVisibilityPrivate"
            ]
        },
        "consts.Currency": {
            "type": "string",
            "enum": [
                "CNY"
            ],
            "x-enum-varnames": [
                "CurrencyCNY"
            ]
        },
        "consts.DiscountType": {
            "type": "string",
            "enum": [
                "none",
                "percent",
                "amount"
            ],
            "x-enum-varnames": [
                "DiscountTypeNone",
                "DiscountTypePercent",
                "DiscountTypeAmount"
            ]
        },
        "consts.MediaAssetStatus": {
            "type": "string",
            "enum": [
                "uploaded",
                "processing",
                "ready",
                "failed",
                "deleted"
            ],
            "x-enum-varnames": [
                "MediaAssetStatusUploaded",
                "MediaAssetStatusProcessing",
                "MediaAssetStatusReady",
                "MediaAssetStatusFailed",
                "MediaAssetStatusDeleted"
            ]
        },
        "consts.MediaAssetType": {
            "type": "string",
            "enum": [
                "video",
                "audio",
                "image"
            ],
            "x-enum-varnames": [
                "MediaAssetTypeVideo",
                "MediaAssetTypeAudio",
                "MediaAssetTypeImage"
            ]
        },
        "consts.OrderStatus": {
            "type": "string",
            "enum": [
                "created",
                "paid",
                "refunding",
                "refunded",
                "canceled",
                "failed"
            ],
            "x-enum-varnames": [
                "OrderStatusCreated",
                "OrderStatusPaid",
                "OrderStatusRefunding",
                "OrderStatusRefunded",
                "OrderStatusCanceled",
                "OrderStatusFailed"
            ]
        },
        "consts.OrderType": {
            "type": "string",
            "enum": [
                "content_purchase",
                "topup"
            ],
            "x-enum-varnames": [
                "OrderTypeContentPurchase",
                "OrderTypeTopup"
            ]
        },
        "consts.Role": {
            "type": "string",
            "enum": [
                "user",
                "super_admin"
            ],
            "x-enum-varnames": [
                "RoleUser",
                "RoleSuperAdmin"
            ]
        },
        "consts.TenantInviteStatus": {
            "type": "string",
            "enum": [
                "active",
                "disabled",
                "expired"
            ],
            "x-enum-varnames": [
                "TenantInviteStatusActive",
                "TenantInviteStatusDisabled",
                "TenantInviteStatusExpired"
            ]
        },
        "consts.TenantJoinRequestStatus": {
            "type": "string",
            "enum": [
                "pending",
                "approved",
                "rejected"
            ],
            "x-enum-varnames": [
                "TenantJoinRequestStatusPending",
                "TenantJoinRequestStatusApproved",
                "TenantJoinRequestStatusRejected"
            ]
        },
        "consts.TenantLedgerType": {
            "type": "string",
            "enum": [
                "credit_topup",
                "debit_purchase",
                "credit_refund",
                "freeze",
                "unfreeze",
                "adjustment"
            ],
            "x-enum-varnames": [
                "TenantLedgerTypeCreditTopup",
                "TenantLedgerTypeDebitPurchase",
                "TenantLedgerTypeCreditRefund",
                "TenantLedgerTypeFreeze",
                "TenantLedgerTypeUnfreeze",
                "TenantLedgerTypeAdjustment"
            ]
        },
        "consts.TenantStatus": {
            "type": "string",
            "enum": [
                "pending_verify",
                "verified",
                "banned"
            ],
            "x-enum-varnames": [
                "TenantStatusPendingVerify",
                "TenantStatusVerified",
                "TenantStatusBanned"
            ]
        },
        "consts.TenantUserRole": {
            "type": "string",
            "enum": [
                "member",
                "tenant_admin"
            ],
            "x-enum-varnames": [
                "TenantUserRoleMember",
                "TenantUserRoleTenantAdmin"
            ]
        },
        "consts.UserStatus": {
            "type": "string",
            "enum": [
                "pending_verify",
                "verified",
                "banned"
            ],
            "x-enum-varnames": [
                "UserStatusPendingVerify",
                "UserStatusVerified",
                "UserStatusBanned"
            ]
        },
        "dto.AdminOrderDetail": {
            "type": "object",
            "properties": {
                "order": {
                    "description": "Order is the order with items preloaded.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/models.Order"
                        }
                    ]
                }
            }
        },
        "dto.AdminOrderRefundForm": {
            "type": "object",
            "properties": {
                "force": {
                    "description": "Force indicates bypassing the default refund window check (paid_at + 24h).\n强制退款：true 表示绕过默认退款时间窗限制（需审计）。",
                    "type": "boolean"
                },
                "idempotency_key": {
                    "description": "IdempotencyKey ensures refund request is processed at most once.\n幂等键：同一笔退款重复请求时返回一致结果，避免重复退款/重复回滚。",
                    "type": "string"
                },
                "reason": {
                    "description": "Reason is the human-readable refund reason used for audit.\n退款原因：建议必填（由业务侧校验）；用于审计与追责。",
                    "type": "string"
                }
            }
        },
        "dto.AdminTenantInviteCreateForm": {
            "type": "object",
            "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"
                }
            }
        },
        "dto.AdminTenantInviteDisableForm": {
            "type": "object",
            "properties": {
                "reason": {
                    "description": "Reason 禁用原因（可选）：用于审计与追溯。",
                    "type": "string"
                }
            }
        },
        "dto.AdminTenantJoinRequestDecideForm": {
            "type": "object",
            "properties": {
                "reason": {
                    "description": "Reason 审核说明（可选）：用于审计记录通过/拒绝原因。",
                    "type": "string"
                }
            }
        },
        "dto.AdminTenantUserItem": {
            "type": "object",
            "properties": {
                "tenant_user": {
                    "description": "TenantUser 租户成员关系记录。",
                    "allOf": [
                        {
                            "$ref": "#/definitions/models.TenantUser"
                        }
                    ]
                },
                "user": {
                    "description": "User 用户基础信息（用于展示 username 等）。",
                    "allOf": [
                        {
                            "$ref": "#/definitions/models.User"
                        }
                    ]
                }
            }
        },
        "dto.AdminTenantUserJoinResponse": {
            "type": "object",
            "properties": {
                "tenant_user": {
                    "description": "TenantUser 租户成员关系记录。",
                    "allOf": [
                        {
                            "$ref": "#/definitions/models.TenantUser"
                        }
                    ]
                }
            }
        },
        "dto.AdminTenantUserRoleUpdateForm": {
            "type": "object",
            "properties": {
                "role": {
                    "description": "Role 角色：member/tenant_admin。",
                    "type": "string"
                }
            }
        },
        "dto.AdminTopupForm": {
            "type": "object",
            "properties": {
                "amount": {
                    "description": "Amount is the topup amount in cents (CNY 分); must be \u003e 0.",
                    "type": "integer"
                },
                "idempotency_key": {
                    "description": "IdempotencyKey ensures the topup request is processed at most once.",
                    "type": "string"
                },
                "reason": {
                    "description": "Reason is the human-readable topup reason used for audit.",
                    "type": "string"
                }
            }
        },
        "dto.ContentAssetAttachForm": {
            "type": "object",
            "properties": {
                "asset_id": {
                    "description": "AssetID is the media asset id to attach.",
                    "type": "integer"
                },
                "role": {
                    "description": "Role indicates how this asset is used (main/cover/preview).",
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.ContentAssetRole"
                        }
                    ]
                },
                "sort": {
                    "description": "Sort controls ordering under the same role.",
                    "type": "integer"
                }
            }
        },
        "dto.ContentAssetsResponse": {
            "type": "object",
            "properties": {
                "assets": {
                    "description": "Assets is the list of media assets for the requested role (preview/main).",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/models.MediaAsset"
                    }
                },
                "content": {
                    "description": "Content is the content entity.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/models.Content"
                        }
                    ]
                },
                "preview_seconds": {
                    "description": "PreviewSeconds indicates the max preview duration (only meaningful for preview response).",
                    "type": "integer"
                }
            }
        },
        "dto.ContentCreateForm": {
            "type": "object",
            "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": {
                    "description": "Visibility controls who can view the content detail (main assets still require free/purchase).",
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.ContentVisibility"
                        }
                    ]
                }
            }
        },
        "dto.ContentDetail": {
            "type": "object",
            "properties": {
                "content": {
                    "description": "Content is the content entity.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/models.Content"
                        }
                    ]
                },
                "has_access": {
                    "description": "HasAccess indicates whether current user can access main assets (free/owner/purchased).",
                    "type": "boolean"
                },
                "price": {
                    "description": "Price is the current price settings for the content (may be nil if not set).",
                    "allOf": [
                        {
                            "$ref": "#/definitions/models.ContentPrice"
                        }
                    ]
                }
            }
        },
        "dto.ContentItem": {
            "type": "object",
            "properties": {
                "content": {
                    "description": "Content is the content entity.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/models.Content"
                        }
                    ]
                },
                "has_access": {
                    "description": "HasAccess indicates whether current user can access main assets (free/owner/purchased).",
                    "type": "boolean"
                },
                "price": {
                    "description": "Price is the current price settings for the content (may be nil if not set).",
                    "allOf": [
                        {
                            "$ref": "#/definitions/models.ContentPrice"
                        }
                    ]
                }
            }
        },
        "dto.ContentPriceUpsertForm": {
            "type": "object",
            "properties": {
                "currency": {
                    "description": "Currency is fixed to CNY for now.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.Currency"
                        }
                    ]
                },
                "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": {
                    "description": "DiscountType defines the discount algorithm (none/percent/amount).",
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.DiscountType"
                        }
                    ]
                },
                "discount_value": {
                    "description": "DiscountValue is interpreted based on DiscountType.",
                    "type": "integer"
                },
                "price_amount": {
                    "description": "PriceAmount is the base price in cents (CNY 分).",
                    "type": "integer"
                }
            }
        },
        "dto.ContentUpdateForm": {
            "type": "object",
            "properties": {
                "description": {
                    "description": "Description updates the description when provided.",
                    "type": "string"
                },
                "preview_seconds": {
                    "description": "PreviewSeconds updates preview duration when provided (must be \u003e 0).",
                    "type": "integer"
                },
                "status": {
                    "description": "Status updates the content status when provided (e.g. publish/unpublish).",
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.ContentStatus"
                        }
                    ]
                },
                "title": {
                    "description": "Title updates the title when provided.",
                    "type": "string"
                },
                "visibility": {
                    "description": "Visibility updates the visibility when provided.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.ContentVisibility"
                        }
                    ]
                }
            }
        },
        "dto.JoinByInviteForm": {
            "type": "object",
            "properties": {
                "invite_code": {
                    "description": "InviteCode 邀请码：由租户管理员生成；用户提交后加入对应租户。",
                    "type": "string"
                }
            }
        },
        "dto.JoinRequestCreateForm": {
            "type": "object",
            "properties": {
                "reason": {
                    "description": "Reason 申请原因（可选）：用于向租户管理员说明申请加入的目的。",
                    "type": "string"
                }
            }
        },
        "dto.LoginForm": {
            "type": "object",
            "properties": {
                "password": {
                    "type": "string"
                },
                "username": {
                    "type": "string"
                }
            }
        },
        "dto.LoginResponse": {
            "type": "object",
            "properties": {
                "token": {
                    "type": "string"
                }
            }
        },
        "dto.MeBalanceResponse": {
            "type": "object",
            "properties": {
                "balance": {
                    "description": "Balance 可用余额：可用于购买/消费。",
                    "type": "integer"
                },
                "balance_frozen": {
                    "description": "BalanceFrozen 冻结余额：用于下单冻结/争议期等。",
                    "type": "integer"
                },
                "currency": {
                    "description": "Currency 币种：当前固定 CNY（金额单位为分）。",
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.Currency"
                        }
                    ]
                },
                "updated_at": {
                    "description": "UpdatedAt 更新时间：余额变更时更新。",
                    "type": "string"
                }
            }
        },
        "dto.MeResponse": {
            "type": "object",
            "properties": {
                "tenant": {
                    "description": "Tenant is the resolved tenant by `tenantCode`.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/models.Tenant"
                        }
                    ]
                },
                "tenant_user": {
                    "description": "TenantUser is the membership record of the authenticated user within the tenant.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/models.TenantUser"
                        }
                    ]
                },
                "user": {
                    "description": "User is the authenticated user derived from JWT `user_id`.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/models.User"
                        }
                    ]
                }
            }
        },
        "dto.MyLedgerItem": {
            "type": "object",
            "properties": {
                "ledger": {
                    "description": "Ledger 流水记录（租户内隔离）。",
                    "allOf": [
                        {
                            "$ref": "#/definitions/models.TenantLedger"
                        }
                    ]
                },
                "type_description": {
                    "description": "TypeDescription 流水类型中文说明（用于前端展示）。",
                    "type": "string"
                }
            }
        },
        "dto.PurchaseContentForm": {
            "type": "object",
            "properties": {
                "idempotency_key": {
                    "description": "IdempotencyKey is used to ensure the purchase request is processed at most once.\n建议由客户端生成并保持稳定：同一笔购买重复请求时返回相同结果，避免重复扣款/重复下单。",
                    "type": "string"
                }
            }
        },
        "dto.PurchaseContentResponse": {
            "type": "object",
            "properties": {
                "access": {
                    "description": "Access is the content access record after purchase grant.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/models.ContentAccess"
                        }
                    ]
                },
                "amount_paid": {
                    "description": "AmountPaid is the final paid amount in cents (CNY 分).",
                    "type": "integer"
                },
                "item": {
                    "description": "Item is the single order item of this purchase (current implementation is 1 order -\u003e 1 content).",
                    "allOf": [
                        {
                            "$ref": "#/definitions/models.OrderItem"
                        }
                    ]
                },
                "order": {
                    "description": "Order is the created or existing order record (may be nil for owner/free-path without order).",
                    "allOf": [
                        {
                            "$ref": "#/definitions/models.Order"
                        }
                    ]
                }
            }
        },
        "dto.TenantExpireUpdateForm": {
            "type": "object",
            "required": [
                "duration"
            ],
            "properties": {
                "duration": {
                    "type": "integer",
                    "enum": [
                        7,
                        30,
                        90,
                        180,
                        365
                    ]
                }
            }
        },
        "dto.TenantItem": {
            "type": "object",
            "properties": {
                "code": {
                    "type": "string"
                },
                "config": {
                    "type": "array",
                    "items": {
                        "type": "integer"
                    }
                },
                "created_at": {
                    "type": "string"
                },
                "expired_at": {
                    "type": "string"
                },
                "id": {
                    "type": "integer"
                },
                "name": {
                    "type": "string"
                },
                "status": {
                    "$ref": "#/definitions/consts.TenantStatus"
                },
                "status_description": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                },
                "user_balance": {
                    "type": "integer"
                },
                "user_count": {
                    "type": "integer"
                },
                "user_id": {
                    "type": "integer"
                },
                "users": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/models.User"
                    }
                },
                "uuid": {
                    "type": "string"
                }
            }
        },
        "dto.TenantStatusUpdateForm": {
            "type": "object",
            "required": [
                "status"
            ],
            "properties": {
                "status": {
                    "enum": [
                        "normal",
                        "disabled"
                    ],
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.TenantStatus"
                        }
                    ]
                }
            }
        },
        "dto.UserItem": {
            "type": "object",
            "properties": {
                "created_at": {
                    "type": "string"
                },
                "deleted_at": {
                    "$ref": "#/definitions/gorm.DeletedAt"
                },
                "id": {
                    "type": "integer"
                },
                "metas": {
                    "type": "array",
                    "items": {
                        "type": "integer"
                    }
                },
                "owned": {
                    "$ref": "#/definitions/models.Tenant"
                },
                "password": {
                    "type": "string"
                },
                "roles": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/consts.Role"
                    }
                },
                "status": {
                    "$ref": "#/definitions/consts.UserStatus"
                },
                "status_description": {
                    "type": "string"
                },
                "tenants": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/models.Tenant"
                    }
                },
                "updated_at": {
                    "type": "string"
                },
                "username": {
                    "type": "string"
                },
                "verified_at": {
                    "type": "string"
                }
            }
        },
        "dto.UserStatistics": {
            "type": "object",
            "properties": {
                "count": {
                    "type": "integer"
                },
                "status": {
                    "$ref": "#/definitions/consts.UserStatus"
                },
                "status_description": {
                    "type": "string"
                }
            }
        },
        "dto.UserStatusUpdateForm": {
            "type": "object",
            "required": [
                "status"
            ],
            "properties": {
                "status": {
                    "enum": [
                        "normal",
                        "disabled"
                    ],
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.UserStatus"
                        }
                    ]
                }
            }
        },
        "gorm.DeletedAt": {
            "type": "object",
            "properties": {
                "time": {
                    "type": "string"
                },
                "valid": {
                    "description": "Valid is true if Time is not NULL",
                    "type": "boolean"
                }
            }
        },
        "models.Content": {
            "type": "object",
            "properties": {
                "created_at": {
                    "description": "创建时间：默认 now()；用于审计与排序",
                    "type": "string"
                },
                "deleted_at": {
                    "description": "软删除时间：非空表示已删除；对外接口需过滤",
                    "allOf": [
                        {
                            "$ref": "#/definitions/gorm.DeletedAt"
                        }
                    ]
                },
                "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": {
                    "description": "状态：draft/reviewing/published/unpublished/blocked；published 才对外展示",
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.ContentStatus"
                        }
                    ]
                },
                "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": {
                    "description": "可见性：public/tenant_only/private；仅控制详情可见，正片资源仍需按价格/权益校验",
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.ContentVisibility"
                        }
                    ]
                }
            }
        },
        "models.ContentAccess": {
            "type": "object",
            "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": {
                    "description": "权益状态：active/revoked/expired；revoked 表示立即失效（例如退款/违规）",
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.ContentAccessStatus"
                        }
                    ]
                },
                "tenant_id": {
                    "description": "租户ID：多租户隔离；与内容、用户归属一致",
                    "type": "integer"
                },
                "updated_at": {
                    "description": "更新时间：默认 now()；更新 status 时写入",
                    "type": "string"
                },
                "user_id": {
                    "description": "用户ID：权益所属用户；用于访问校验",
                    "type": "integer"
                }
            }
        },
        "models.ContentAsset": {
            "type": "object",
            "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": {
                    "description": "资源角色：main/cover/preview；preview 必须为独立资源以满足禁下载与防绕过",
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.ContentAssetRole"
                        }
                    ]
                },
                "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"
                }
            }
        },
        "models.ContentPrice": {
            "type": "object",
            "properties": {
                "content_id": {
                    "description": "内容ID：唯一约束 (tenant_id, content_id)；一个内容在一个租户内仅一份定价",
                    "type": "integer"
                },
                "created_at": {
                    "description": "创建时间：默认 now()；用于审计",
                    "type": "string"
                },
                "currency": {
                    "description": "币种：当前固定 CNY；金额单位为分",
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.Currency"
                        }
                    ]
                },
                "discount_end_at": {
                    "description": "折扣结束时间：可为空；为空表示长期有效（由业务逻辑解释）",
                    "type": "string"
                },
                "discount_start_at": {
                    "description": "折扣开始时间：可为空；为空表示立即生效（由业务逻辑解释）",
                    "type": "string"
                },
                "discount_type": {
                    "description": "折扣类型：none/percent/amount；仅影响下单时成交价，需写入订单快照",
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.DiscountType"
                        }
                    ]
                },
                "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"
                }
            }
        },
        "models.MediaAsset": {
            "type": "object",
            "properties": {
                "bucket": {
                    "description": "存储桶：对象所在 bucket；与 provider 组合确定存储定位",
                    "type": "string"
                },
                "created_at": {
                    "description": "创建时间：默认 now()；用于审计与排序",
                    "type": "string"
                },
                "deleted_at": {
                    "description": "软删除时间：非空表示已删除；对外接口需过滤",
                    "allOf": [
                        {
                            "$ref": "#/definitions/gorm.DeletedAt"
                        }
                    ]
                },
                "id": {
                    "description": "主键ID：自增；仅用于内部关联",
                    "type": "integer"
                },
                "meta": {
                    "description": "元数据：JSON；包含 hash、duration、width、height、bitrate、codec 等；用于展示与计费/风控",
                    "type": "array",
                    "items": {
                        "type": "integer"
                    }
                },
                "object_key": {
                    "description": "对象键：对象在 bucket 内的 key；不得暴露可长期复用的直链（通过签名URL/token下发）",
                    "type": "string"
                },
                "provider": {
                    "description": "存储提供方：例如 s3/minio/oss；便于多存储扩展",
                    "type": "string"
                },
                "status": {
                    "description": "处理状态：uploaded/processing/ready/failed/deleted；ready 才可被内容引用对外提供",
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.MediaAssetStatus"
                        }
                    ]
                },
                "tenant_id": {
                    "description": "租户ID：多租户隔离关键字段；所有查询/写入必须限定 tenant_id",
                    "type": "integer"
                },
                "type": {
                    "description": "资源类型：video/audio/image；决定后续处理流程（转码/缩略图/封面等）",
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.MediaAssetType"
                        }
                    ]
                },
                "updated_at": {
                    "description": "更新时间：默认 now()；更新状态/元数据时写入",
                    "type": "string"
                },
                "user_id": {
                    "description": "用户ID：资源上传者；用于审计与权限控制",
                    "type": "integer"
                }
            }
        },
        "models.Order": {
            "type": "object",
            "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": {
                    "description": "币种：当前固定 CNY；金额单位为分",
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.Currency"
                        }
                    ]
                },
                "id": {
                    "description": "主键ID：自增；用于关联订单明细、账本流水、权益等",
                    "type": "integer"
                },
                "idempotency_key": {
                    "description": "幂等键：同一租户同一用户同一业务请求可用；用于防重复下单/重复扣款（建议由客户端生成）",
                    "type": "string"
                },
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/models.OrderItem"
                    }
                },
                "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": {
                    "description": "订单快照：JSON；建议包含 content 标题/定价/折扣、请求来源等，避免改价影响历史展示",
                    "type": "array",
                    "items": {
                        "type": "integer"
                    }
                },
                "status": {
                    "description": "订单状态：created/paid/refunding/refunded/canceled/failed；状态变更需与账本/权益保持一致",
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.OrderStatus"
                        }
                    ]
                },
                "tenant_id": {
                    "description": "租户ID：多租户隔离关键字段；所有查询/写入必须限定 tenant_id",
                    "type": "integer"
                },
                "type": {
                    "description": "订单类型：content_purchase（购买内容）/topup（充值）等；当前默认 content_purchase",
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.OrderType"
                        }
                    ]
                },
                "updated_at": {
                    "description": "更新时间：默认 now()；状态变更/退款写入时更新",
                    "type": "string"
                },
                "user_id": {
                    "description": "用户ID：下单用户（buyer）；余额扣款与权益归属以该 user_id 为准",
                    "type": "integer"
                }
            }
        },
        "models.OrderItem": {
            "type": "object",
            "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": {
                    "description": "内容快照：JSON；建议包含 title/price/discount 等，用于历史展示与审计",
                    "type": "array",
                    "items": {
                        "type": "integer"
                    }
                },
                "tenant_id": {
                    "description": "租户ID：多租户隔离关键字段；必须与 orders.tenant_id 一致",
                    "type": "integer"
                },
                "updated_at": {
                    "description": "更新时间：默认 now()",
                    "type": "string"
                },
                "user_id": {
                    "description": "用户ID：下单用户（buyer）；冗余字段用于查询加速与审计",
                    "type": "integer"
                }
            }
        },
        "models.Tenant": {
            "type": "object",
            "properties": {
                "code": {
                    "type": "string"
                },
                "config": {
                    "type": "array",
                    "items": {
                        "type": "integer"
                    }
                },
                "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": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/models.User"
                    }
                },
                "uuid": {
                    "type": "string"
                }
            }
        },
        "models.TenantInvite": {
            "type": "object",
            "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 表示不限制；\u003e0 时 used_count 达到该值后视为失效",
                    "type": "integer"
                },
                "remark": {
                    "description": "备注：生成/禁用原因等（审计用）",
                    "type": "string"
                },
                "status": {
                    "description": "邀请状态：active/disabled/expired；expired 也可由 expires_at 推导，业务侧需保持一致",
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.TenantInviteStatus"
                        }
                    ]
                },
                "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"
                }
            }
        },
        "models.TenantJoinRequest": {
            "type": "object",
            "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": {
                    "description": "申请状态：pending/approved/rejected；状态变更需记录 decided_at 与 decided_operator_user_id",
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.TenantJoinRequestStatus"
                        }
                    ]
                },
                "tenant_id": {
                    "description": "租户ID：多租户隔离关键字段；所有查询/写入必须限定 tenant_id",
                    "type": "integer"
                },
                "updated_at": {
                    "description": "更新时间：默认 now()",
                    "type": "string"
                },
                "user_id": {
                    "description": "申请人用户ID：发起加入申请的用户",
                    "type": "integer"
                }
            }
        },
        "models.TenantLedger": {
            "type": "object",
            "properties": {
                "amount": {
                    "description": "流水金额：分/最小货币单位；通常为正数，方向由 type 决定（由业务层约束）",
                    "type": "integer"
                },
                "balance_after": {
                    "description": "变更后可用余额：用于审计与对账回放",
                    "type": "integer"
                },
                "balance_before": {
                    "description": "变更前可用余额：用于审计与对账回放",
                    "type": "integer"
                },
                "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"
                },
                "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": {
                    "description": "流水类型：credit_topup/debit_purchase/credit_refund/freeze/unfreeze/adjustment；不同类型决定余额/冻结余额的变更方向",
                    "allOf": [
                        {
                            "$ref": "#/definitions/consts.TenantLedgerType"
                        }
                    ]
                },
                "updated_at": {
                    "description": "更新时间：默认 now()",
                    "type": "string"
                },
                "user_id": {
                    "description": "用户ID：余额账户归属用户；对应 tenant_users.user_id",
                    "type": "integer"
                }
            }
        },
        "models.TenantUser": {
            "type": "object",
            "properties": {
                "balance": {
                    "type": "integer"
                },
                "balance_frozen": {
                    "description": "冻结余额：分/最小货币单位；下单冻结时从可用余额转入，最终扣款或回滚时转出；默认 0",
                    "type": "integer"
                },
                "created_at": {
                    "type": "string"
                },
                "id": {
                    "type": "integer"
                },
                "role": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/consts.TenantUserRole"
                    }
                },
                "status": {
                    "$ref": "#/definitions/consts.UserStatus"
                },
                "tenant_id": {
                    "type": "integer"
                },
                "updated_at": {
                    "type": "string"
                },
                "user_id": {
                    "type": "integer"
                }
            }
        },
        "models.User": {
            "type": "object",
            "properties": {
                "created_at": {
                    "type": "string"
                },
                "deleted_at": {
                    "$ref": "#/definitions/gorm.DeletedAt"
                },
                "id": {
                    "type": "integer"
                },
                "metas": {
                    "type": "array",
                    "items": {
                        "type": "integer"
                    }
                },
                "owned": {
                    "$ref": "#/definitions/models.Tenant"
                },
                "password": {
                    "type": "string"
                },
                "roles": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/consts.Role"
                    }
                },
                "status": {
                    "$ref": "#/definitions/consts.UserStatus"
                },
                "tenants": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/models.Tenant"
                    }
                },
                "updated_at": {
                    "type": "string"
                },
                "username": {
                    "type": "string"
                },
                "verified_at": {
                    "type": "string"
                }
            }
        },
        "requests.KV": {
            "type": "object",
            "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."
                }
            }
        },
        "requests.Pager": {
            "type": "object",
            "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 \u003c= 0 are normalized to 1.",
                    "type": "integer"
                },
                "total": {
                    "description": "Total is the total number of items matching current filter (before paging).",
                    "type": "integer"
                }
            }
        }
    },
    "securityDefinitions": {
        "BasicAuth": {
            "type": "basic"
        }
    },
    "externalDocs": {
        "description": "OpenAPI",
        "url": "https://swagger.io/resources/open-api/"
    }
}