- Implemented TenantDetail.vue to display tenant information, manage tenant status, and handle tenant renewals. - Added user management features in UserDetail.vue, including user status updates and role management. - Integrated data loading for tenant users and orders in TenantDetail.vue. - Included search and pagination functionalities for owned and joined tenants in UserDetail.vue. - Enhanced user experience with toast notifications for success and error messages.
5552 lines
202 KiB
Go
5552 lines
202 KiB
Go
// Package docs Code generated by swaggo/swag. DO NOT EDIT
|
||
package docs
|
||
|
||
import "github.com/rogeecn/swag"
|
||
|
||
const docTemplate = `{
|
||
"schemes": {{ marshal .Schemes }},
|
||
"swagger": "2.0",
|
||
"info": {
|
||
"description": "{{escape .Description}}",
|
||
"title": "{{.Title}}",
|
||
"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": "{{.Version}}"
|
||
},
|
||
"host": "{{.Host}}",
|
||
"basePath": "{{.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/orders": {
|
||
"get": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Super"
|
||
],
|
||
"summary": "订单列表",
|
||
"parameters": [
|
||
{
|
||
"type": "integer",
|
||
"name": "amount_paid_max",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"name": "amount_paid_min",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "Asc specifies comma-separated field names to sort ascending by.",
|
||
"name": "asc",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"name": "content_id",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"name": "content_title",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"name": "created_at_from",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"name": "created_at_to",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "Desc specifies comma-separated field names to sort descending by.",
|
||
"name": "desc",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"name": "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",
|
||
"name": "paid_at_from",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"name": "paid_at_to",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"enum": [
|
||
"created",
|
||
"paid",
|
||
"refunding",
|
||
"refunded",
|
||
"canceled",
|
||
"failed"
|
||
],
|
||
"type": "string",
|
||
"x-enum-varnames": [
|
||
"OrderStatusCreated",
|
||
"OrderStatusPaid",
|
||
"OrderStatusRefunding",
|
||
"OrderStatusRefunded",
|
||
"OrderStatusCanceled",
|
||
"OrderStatusFailed"
|
||
],
|
||
"name": "status",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"name": "tenant_code",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"name": "tenant_id",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"name": "tenant_name",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"enum": [
|
||
"content_purchase"
|
||
],
|
||
"type": "string",
|
||
"x-enum-varnames": [
|
||
"OrderTypeContentPurchase"
|
||
],
|
||
"name": "type",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"name": "user_id",
|
||
"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.SuperOrderItem"
|
||
}
|
||
}
|
||
}
|
||
]
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/super/v1/orders/statistics": {
|
||
"get": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Super"
|
||
],
|
||
"summary": "订单统计信息",
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"$ref": "#/definitions/dto.OrderStatisticsResponse"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/super/v1/orders/{orderID}": {
|
||
"get": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Super"
|
||
],
|
||
"summary": "订单详情",
|
||
"parameters": [
|
||
{
|
||
"type": "integer",
|
||
"format": "int64",
|
||
"description": "OrderID",
|
||
"name": "orderID",
|
||
"in": "path",
|
||
"required": true
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"$ref": "#/definitions/dto.SuperOrderDetail"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/super/v1/orders/{orderID}/refund": {
|
||
"post": {
|
||
"description": "该接口只负责将订单从 paid 推进到 refunding,并提交异步退款任务;退款入账与权益回收由 worker 异步完成。",
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Super"
|
||
],
|
||
"summary": "订单退款(平台)",
|
||
"parameters": [
|
||
{
|
||
"type": "integer",
|
||
"format": "int64",
|
||
"description": "OrderID",
|
||
"name": "orderID",
|
||
"in": "path",
|
||
"required": true
|
||
},
|
||
{
|
||
"description": "Form",
|
||
"name": "form",
|
||
"in": "body",
|
||
"required": true,
|
||
"schema": {
|
||
"$ref": "#/definitions/dto.SuperOrderRefundForm"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"$ref": "#/definitions/models.Order"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/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",
|
||
"name": "code",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"name": "created_at_from",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"name": "created_at_to",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "Desc specifies comma-separated field names to sort descending by.",
|
||
"name": "desc",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"name": "expired_at_from",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"name": "expired_at_to",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"name": "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": "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"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"name": "user_id",
|
||
"in": "query"
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/requests.Pager"
|
||
},
|
||
{
|
||
"type": "object",
|
||
"properties": {
|
||
"items": {
|
||
"$ref": "#/definitions/dto.TenantItem"
|
||
}
|
||
}
|
||
}
|
||
]
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"post": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Super"
|
||
],
|
||
"summary": "创建租户并设置租户管理员",
|
||
"parameters": [
|
||
{
|
||
"description": "Form",
|
||
"name": "form",
|
||
"in": "body",
|
||
"required": true,
|
||
"schema": {
|
||
"$ref": "#/definitions/dto.TenantCreateForm"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"$ref": "#/definitions/models.Tenant"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/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}": {
|
||
"get": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Super"
|
||
],
|
||
"summary": "租户详情",
|
||
"parameters": [
|
||
{
|
||
"type": "integer",
|
||
"format": "int64",
|
||
"description": "TenantID",
|
||
"name": "tenantID",
|
||
"in": "path",
|
||
"required": true
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"$ref": "#/definitions/dto.TenantItem"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"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/tenants/{tenantID}/users": {
|
||
"get": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Super"
|
||
],
|
||
"summary": "租户成员列表(平台侧)",
|
||
"parameters": [
|
||
{
|
||
"type": "integer",
|
||
"format": "int64",
|
||
"description": "TenantID",
|
||
"name": "tenantID",
|
||
"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.SuperTenantUserItem"
|
||
}
|
||
}
|
||
}
|
||
]
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/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",
|
||
"name": "created_at_from",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"name": "created_at_to",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "Desc specifies comma-separated field names to sort descending by.",
|
||
"name": "desc",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"name": "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"
|
||
},
|
||
{
|
||
"enum": [
|
||
"user",
|
||
"super_admin"
|
||
],
|
||
"type": "string",
|
||
"x-enum-varnames": [
|
||
"RoleUser",
|
||
"RoleSuperAdmin"
|
||
],
|
||
"description": "Role filters users containing a role (user/super_admin).",
|
||
"name": "role",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"enum": [
|
||
"pending_verify",
|
||
"verified",
|
||
"banned"
|
||
],
|
||
"type": "string",
|
||
"x-enum-varnames": [
|
||
"UserStatusPendingVerify",
|
||
"UserStatusVerified",
|
||
"UserStatusBanned"
|
||
],
|
||
"name": "status",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"description": "TenantID filters users by membership in the given tenant.",
|
||
"name": "tenant_id",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"name": "username",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"name": "verified_at_from",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"name": "verified_at_to",
|
||
"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}": {
|
||
"get": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Super"
|
||
],
|
||
"summary": "用户详情",
|
||
"parameters": [
|
||
{
|
||
"type": "integer",
|
||
"format": "int64",
|
||
"description": "UserID",
|
||
"name": "userID",
|
||
"in": "path",
|
||
"required": true
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"$ref": "#/definitions/dto.UserItem"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/super/v1/users/{userID}/roles": {
|
||
"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.UserRolesUpdateForm"
|
||
}
|
||
}
|
||
],
|
||
"responses": {}
|
||
}
|
||
},
|
||
"/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": {}
|
||
}
|
||
},
|
||
"/super/v1/users/{userID}/tenants": {
|
||
"get": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Super"
|
||
],
|
||
"summary": "用户加入的租户列表",
|
||
"parameters": [
|
||
{
|
||
"type": "integer",
|
||
"format": "int64",
|
||
"description": "UserID",
|
||
"name": "userID",
|
||
"in": "path",
|
||
"required": true
|
||
},
|
||
{
|
||
"type": "string",
|
||
"name": "code",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"name": "created_at_from",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"name": "created_at_to",
|
||
"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": [
|
||
"member",
|
||
"tenant_admin"
|
||
],
|
||
"type": "string",
|
||
"x-enum-varnames": [
|
||
"TenantUserRoleMember",
|
||
"TenantUserRoleTenantAdmin"
|
||
],
|
||
"description": "Role filters tenant_users.role containing a role (tenant_admin/member).",
|
||
"name": "role",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"enum": [
|
||
"pending_verify",
|
||
"verified",
|
||
"banned"
|
||
],
|
||
"type": "string",
|
||
"x-enum-varnames": [
|
||
"UserStatusPendingVerify",
|
||
"UserStatusVerified",
|
||
"UserStatusBanned"
|
||
],
|
||
"description": "Status filters tenant_users.status.",
|
||
"name": "status",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"name": "tenant_id",
|
||
"in": "query"
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/requests.Pager"
|
||
},
|
||
{
|
||
"type": "object",
|
||
"properties": {
|
||
"items": {
|
||
"$ref": "#/definitions/dto.UserTenantItem"
|
||
}
|
||
}
|
||
}
|
||
]
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/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/ledgers": {
|
||
"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": "BizRefID 按业务引用ID过滤(可选)。",
|
||
"name": "biz_ref_id",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "BizRefType 按业务引用类型过滤(可选)。\n约定:当前业务写入为 \"order\";未来可扩展为 refund 等。",
|
||
"name": "biz_ref_type",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "CreatedAtFrom 创建时间起(可选)。",
|
||
"name": "created_at_from",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "CreatedAtTo 创建时间止(可选)。",
|
||
"name": "created_at_to",
|
||
"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": "OperatorUserID 按操作者用户ID过滤(可选)。\n典型场景:后台检索“某个管理员发起的退款/调账”等敏感操作流水。",
|
||
"name": "operator_user_id",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"description": "OrderID 按关联订单过滤(可选)。",
|
||
"name": "order_id",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"description": "Page is 1-based page index; values \u003c= 0 are normalized to 1.",
|
||
"name": "page",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"enum": [
|
||
"debit_purchase",
|
||
"credit_refund",
|
||
"freeze",
|
||
"unfreeze",
|
||
"adjustment"
|
||
],
|
||
"type": "string",
|
||
"x-enum-varnames": [
|
||
"TenantLedgerTypeDebitPurchase",
|
||
"TenantLedgerTypeCreditRefund",
|
||
"TenantLedgerTypeFreeze",
|
||
"TenantLedgerTypeUnfreeze",
|
||
"TenantLedgerTypeAdjustment"
|
||
],
|
||
"description": "Type 按流水类型过滤(可选)。",
|
||
"name": "type",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"description": "UserID 按余额账户归属用户ID过滤(可选)。\n典型场景:查看某个租户成员的资金变化全链路。",
|
||
"name": "user_id",
|
||
"in": "query"
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/requests.Pager"
|
||
},
|
||
{
|
||
"type": "object",
|
||
"properties": {
|
||
"items": {
|
||
"$ref": "#/definitions/dto.AdminLedgerItem"
|
||
}
|
||
}
|
||
}
|
||
]
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/t/{tenantCode}/v1/admin/media_assets": {
|
||
"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": "Asc specifies comma-separated field names to sort ascending by.",
|
||
"name": "asc",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "CreatedAtFrom filters assets by created_at \u003e= this time; optional.",
|
||
"name": "created_at_from",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "CreatedAtTo filters assets by created_at \u003c= this time; optional.",
|
||
"name": "created_at_to",
|
||
"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": [
|
||
"uploaded",
|
||
"processing",
|
||
"ready",
|
||
"failed",
|
||
"deleted"
|
||
],
|
||
"type": "string",
|
||
"x-enum-varnames": [
|
||
"MediaAssetStatusUploaded",
|
||
"MediaAssetStatusProcessing",
|
||
"MediaAssetStatusReady",
|
||
"MediaAssetStatusFailed",
|
||
"MediaAssetStatusDeleted"
|
||
],
|
||
"description": "Status filters by processing status (uploaded/processing/ready/failed/deleted); optional.",
|
||
"name": "status",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"enum": [
|
||
"video",
|
||
"audio",
|
||
"image"
|
||
],
|
||
"type": "string",
|
||
"x-enum-varnames": [
|
||
"MediaAssetTypeVideo",
|
||
"MediaAssetTypeAudio",
|
||
"MediaAssetTypeImage"
|
||
],
|
||
"description": "Type filters by media type (video/audio/image); optional.",
|
||
"name": "type",
|
||
"in": "query"
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/requests.Pager"
|
||
},
|
||
{
|
||
"type": "object",
|
||
"properties": {
|
||
"items": {
|
||
"$ref": "#/definitions/models.MediaAsset"
|
||
}
|
||
}
|
||
}
|
||
]
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/t/{tenantCode}/v1/admin/media_assets/upload_init": {
|
||
"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.AdminMediaAssetUploadInitForm"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"$ref": "#/definitions/dto.AdminMediaAssetUploadInitResponse"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/t/{tenantCode}/v1/admin/media_assets/{assetID}": {
|
||
"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": "AssetID",
|
||
"name": "assetID",
|
||
"in": "path",
|
||
"required": true
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"$ref": "#/definitions/models.MediaAsset"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"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": "AssetID",
|
||
"name": "assetID",
|
||
"in": "path",
|
||
"required": true
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"$ref": "#/definitions/models.MediaAsset"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/t/{tenantCode}/v1/admin/media_assets/{assetID}/upload_complete": {
|
||
"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": "AssetID",
|
||
"name": "assetID",
|
||
"in": "path",
|
||
"required": true
|
||
},
|
||
{
|
||
"description": "Form",
|
||
"name": "form",
|
||
"in": "body",
|
||
"schema": {
|
||
"$ref": "#/definitions/dto.AdminMediaAssetUploadCompleteForm"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"$ref": "#/definitions/models.MediaAsset"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/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 实付金额上限(可选):amount_paid \u003c= 该值(单位分)。",
|
||
"name": "amount_paid_max",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"description": "AmountPaidMin 实付金额下限(可选):amount_paid \u003e= 该值(单位分)。",
|
||
"name": "amount_paid_min",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "Asc specifies comma-separated field names to sort ascending by.",
|
||
"name": "asc",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"description": "ContentID 内容ID(可选):通过 order_items 关联过滤。",
|
||
"name": "content_id",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "ContentTitle 内容标题关键字(可选):通过 order_items + contents 关联,模糊匹配 contents.title(like)。",
|
||
"name": "content_title",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "CreatedAtFrom 创建时间起(可选):created_at \u003e= 该时间(用于按创建时间筛选)。",
|
||
"name": "created_at_from",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "CreatedAtTo 创建时间止(可选):created_at \u003c= 该时间(用于按创建时间筛选)。",
|
||
"name": "created_at_to",
|
||
"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"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "PaidAtFrom 支付时间起(可选):paid_at \u003e= 该时间(用于按支付时间筛选)。",
|
||
"name": "paid_at_from",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "PaidAtTo 支付时间止(可选):paid_at \u003c= 该时间(用于按支付时间筛选)。",
|
||
"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 订单状态(可选):created/paid/refunding/refunded/canceled/failed。",
|
||
"name": "status",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"enum": [
|
||
"content_purchase"
|
||
],
|
||
"type": "string",
|
||
"x-enum-varnames": [
|
||
"OrderTypeContentPurchase"
|
||
],
|
||
"description": "Type 订单类型(可选):content_purchase 等。",
|
||
"name": "type",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"description": "UserID 下单用户ID(可选):按买家用户ID精确过滤。",
|
||
"name": "user_id",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "Username 下单用户用户名关键字(可选):模糊匹配 users.username(like)。",
|
||
"name": "username",
|
||
"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/export": {
|
||
"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 实付金额上限(可选):amount_paid \u003c= 该值(单位分)。",
|
||
"name": "amount_paid_max",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"description": "AmountPaidMin 实付金额下限(可选):amount_paid \u003e= 该值(单位分)。",
|
||
"name": "amount_paid_min",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "Asc specifies comma-separated field names to sort ascending by.",
|
||
"name": "asc",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"description": "ContentID 内容ID(可选):通过 order_items 关联过滤。",
|
||
"name": "content_id",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "ContentTitle 内容标题关键字(可选):通过 order_items + contents 关联,模糊匹配 contents.title(like)。",
|
||
"name": "content_title",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "CreatedAtFrom 创建时间起(可选):created_at \u003e= 该时间(用于按创建时间筛选)。",
|
||
"name": "created_at_from",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "CreatedAtTo 创建时间止(可选):created_at \u003c= 该时间(用于按创建时间筛选)。",
|
||
"name": "created_at_to",
|
||
"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"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "PaidAtFrom 支付时间起(可选):paid_at \u003e= 该时间(用于按支付时间筛选)。",
|
||
"name": "paid_at_from",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "PaidAtTo 支付时间止(可选):paid_at \u003c= 该时间(用于按支付时间筛选)。",
|
||
"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 订单状态(可选):created/paid/refunding/refunded/canceled/failed。",
|
||
"name": "status",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"enum": [
|
||
"content_purchase"
|
||
],
|
||
"type": "string",
|
||
"x-enum-varnames": [
|
||
"OrderTypeContentPurchase"
|
||
],
|
||
"description": "Type 订单类型(可选):content_purchase 等。",
|
||
"name": "type",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"description": "UserID 下单用户ID(可选):按买家用户ID精确过滤。",
|
||
"name": "user_id",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "Username 下单用户用户名关键字(可选):模糊匹配 users.username(like)。",
|
||
"name": "username",
|
||
"in": "query"
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"$ref": "#/definitions/dto.AdminOrderExportResponse"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/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": {
|
||
"description": "该接口只负责将订单从 paid 推进到 refunding,并提交异步退款任务;退款入账与权益回收由 worker 异步完成。\n重复请求幂等:订单处于 refunding/refunded 时会返回当前订单状态,不会重复入账/重复回收权益。",
|
||
"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/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/media/play": {
|
||
"get": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"TenantMedia"
|
||
],
|
||
"summary": "媒体播放入口(短时效 token)",
|
||
"parameters": [
|
||
{
|
||
"type": "string",
|
||
"description": "Tenant Code",
|
||
"name": "tenantCode",
|
||
"in": "path",
|
||
"required": true
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "Play token",
|
||
"name": "token",
|
||
"in": "query",
|
||
"required": true
|
||
}
|
||
],
|
||
"responses": {}
|
||
}
|
||
},
|
||
"/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"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/t/{tenantCode}/v1/public/contents": {
|
||
"get": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"TenantPublic"
|
||
],
|
||
"summary": "公开内容列表(已发布 + public)",
|
||
"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/public/contents/{contentID}": {
|
||
"get": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"TenantPublic"
|
||
],
|
||
"summary": "公开内容详情(已发布 + public)",
|
||
"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/public/contents/{contentID}/assets": {
|
||
"get": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"TenantPublic"
|
||
],
|
||
"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/public/contents/{contentID}/preview": {
|
||
"get": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"TenantPublic"
|
||
],
|
||
"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"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"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.MediaAssetVariant": {
|
||
"type": "string",
|
||
"enum": [
|
||
"main",
|
||
"preview"
|
||
],
|
||
"x-enum-varnames": [
|
||
"MediaAssetVariantMain",
|
||
"MediaAssetVariantPreview"
|
||
]
|
||
},
|
||
"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"
|
||
],
|
||
"x-enum-varnames": [
|
||
"OrderTypeContentPurchase"
|
||
]
|
||
},
|
||
"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": [
|
||
"debit_purchase",
|
||
"credit_refund",
|
||
"freeze",
|
||
"unfreeze",
|
||
"adjustment"
|
||
],
|
||
"x-enum-varnames": [
|
||
"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.AdminLedgerItem": {
|
||
"type": "object",
|
||
"properties": {
|
||
"ledger": {
|
||
"description": "Ledger 流水记录(租户内隔离)。",
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/models.TenantLedger"
|
||
}
|
||
]
|
||
},
|
||
"type_description": {
|
||
"description": "TypeDescription 流水类型中文说明(用于前端展示)。",
|
||
"type": "string"
|
||
}
|
||
}
|
||
},
|
||
"dto.AdminMediaAssetUploadCompleteForm": {
|
||
"type": "object",
|
||
"properties": {
|
||
"content_type": {
|
||
"description": "ContentType is the MIME type observed during upload; optional.\nServer may record it for audit and later processing decisions.",
|
||
"type": "string"
|
||
},
|
||
"etag": {
|
||
"description": "ETag is the storage returned ETag (or similar checksum); optional.\nUsed for audit/debugging and later integrity verification.",
|
||
"type": "string"
|
||
},
|
||
"file_size": {
|
||
"description": "FileSize is the uploaded object size in bytes; optional.\nServer records it for quota/audit and later validation.",
|
||
"type": "integer"
|
||
},
|
||
"sha256": {
|
||
"description": "SHA256 is the hex-encoded sha256 of the uploaded object; optional.\nServer records it for integrity checks/deduplication.",
|
||
"type": "string"
|
||
}
|
||
}
|
||
},
|
||
"dto.AdminMediaAssetUploadInitForm": {
|
||
"type": "object",
|
||
"properties": {
|
||
"content_type": {
|
||
"description": "ContentType is the MIME type reported by the client (e.g. video/mp4); optional.\nServer should not fully trust it, but can use it as a hint for validation/logging.",
|
||
"type": "string"
|
||
},
|
||
"file_size": {
|
||
"description": "FileSize is the expected file size in bytes; optional.\nUsed for quota/limit checks and audit; client may omit when unknown.",
|
||
"type": "integer"
|
||
},
|
||
"sha256": {
|
||
"description": "SHA256 is the hex-encoded sha256 of the file; optional.\nUsed for deduplication/audit; server may validate it later during upload-complete.",
|
||
"type": "string"
|
||
},
|
||
"source_asset_id": {
|
||
"description": "SourceAssetID links a preview product to its main asset; only meaningful when variant=preview.",
|
||
"type": "integer"
|
||
},
|
||
"type": {
|
||
"description": "Type is the media asset type (video/audio/image).\nUsed to decide processing pipeline and validation rules; required.",
|
||
"type": "string"
|
||
},
|
||
"variant": {
|
||
"description": "Variant indicates whether this asset is a main or preview product.\nAllowed: main/preview; default is main.",
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/consts.MediaAssetVariant"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
},
|
||
"dto.AdminMediaAssetUploadInitResponse": {
|
||
"type": "object",
|
||
"properties": {
|
||
"asset_id": {
|
||
"description": "AssetID is the created media asset id.",
|
||
"type": "integer"
|
||
},
|
||
"bucket": {
|
||
"description": "Bucket is the target bucket/container; for debugging/audit (may be empty in stub mode).",
|
||
"type": "string"
|
||
},
|
||
"expires_at": {
|
||
"description": "ExpiresAt indicates when UploadURL/FormFields expire; optional.",
|
||
"type": "string"
|
||
},
|
||
"form_fields": {
|
||
"description": "FormFields are form fields required for multipart form upload (S3 POST policy); optional.",
|
||
"type": "object",
|
||
"additionalProperties": {
|
||
"type": "string"
|
||
}
|
||
},
|
||
"headers": {
|
||
"description": "Headers are additional headers required for upload (e.g. signed headers); optional.",
|
||
"type": "object",
|
||
"additionalProperties": {
|
||
"type": "string"
|
||
}
|
||
},
|
||
"object_key": {
|
||
"description": "ObjectKey is the server-generated object key/path; client must NOT choose it.",
|
||
"type": "string"
|
||
},
|
||
"provider": {
|
||
"description": "Provider is the storage provider identifier (e.g. s3/minio/oss/local); for debugging/audit.",
|
||
"type": "string"
|
||
},
|
||
"upload_url": {
|
||
"description": "UploadURL is the URL the client should upload to (signed URL or service endpoint).",
|
||
"type": "string"
|
||
}
|
||
}
|
||
},
|
||
"dto.AdminOrderDetail": {
|
||
"type": "object",
|
||
"properties": {
|
||
"order": {
|
||
"description": "Order is the order with items preloaded.",
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/models.Order"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
},
|
||
"dto.AdminOrderExportResponse": {
|
||
"type": "object",
|
||
"properties": {
|
||
"content_type": {
|
||
"description": "ContentType 内容类型:当前固定为 text/csv。",
|
||
"type": "string"
|
||
},
|
||
"csv": {
|
||
"description": "CSV CSV 文本内容:UTF-8 编码,包含表头与数据行;前端可直接下载为文件。",
|
||
"type": "string"
|
||
},
|
||
"filename": {
|
||
"description": "Filename 建议文件名:前端可用于下载时的默认文件名。",
|
||
"type": "string"
|
||
}
|
||
}
|
||
},
|
||
"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.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 playable assets for the requested role (preview/main).",
|
||
"type": "array",
|
||
"items": {
|
||
"$ref": "#/definitions/dto.ContentPlayableAsset"
|
||
}
|
||
},
|
||
"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.ContentPlayableAsset": {
|
||
"type": "object",
|
||
"properties": {
|
||
"asset_id": {
|
||
"type": "integer"
|
||
},
|
||
"expires_at": {
|
||
"description": "ExpiresAt indicates when PlayURL/token expires; optional.",
|
||
"type": "string"
|
||
},
|
||
"meta": {
|
||
"description": "Meta is a display-safe whitelist (currently passthrough JSON); optional.",
|
||
"type": "array",
|
||
"items": {
|
||
"type": "integer"
|
||
}
|
||
},
|
||
"play_url": {
|
||
"description": "PlayURL is a short-lived URL; do NOT expose bucket/object_key directly.",
|
||
"type": "string"
|
||
},
|
||
"type": {
|
||
"$ref": "#/definitions/consts.MediaAssetType"
|
||
}
|
||
}
|
||
},
|
||
"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.OrderBuyerLite": {
|
||
"type": "object",
|
||
"properties": {
|
||
"id": {
|
||
"type": "integer"
|
||
},
|
||
"username": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
},
|
||
"dto.OrderStatisticsResponse": {
|
||
"type": "object",
|
||
"properties": {
|
||
"by_status": {
|
||
"type": "array",
|
||
"items": {
|
||
"$ref": "#/definitions/dto.OrderStatisticsRow"
|
||
}
|
||
},
|
||
"total_amount_paid_sum": {
|
||
"type": "integer"
|
||
},
|
||
"total_count": {
|
||
"type": "integer"
|
||
}
|
||
}
|
||
},
|
||
"dto.OrderStatisticsRow": {
|
||
"type": "object",
|
||
"properties": {
|
||
"amount_paid_sum": {
|
||
"type": "integer"
|
||
},
|
||
"count": {
|
||
"type": "integer"
|
||
},
|
||
"status": {
|
||
"$ref": "#/definitions/consts.OrderStatus"
|
||
},
|
||
"status_description": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
},
|
||
"dto.OrderTenantLite": {
|
||
"type": "object",
|
||
"properties": {
|
||
"code": {
|
||
"type": "string"
|
||
},
|
||
"id": {
|
||
"type": "integer"
|
||
},
|
||
"name": {
|
||
"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.SuperOrderDetail": {
|
||
"type": "object",
|
||
"properties": {
|
||
"buyer": {
|
||
"$ref": "#/definitions/dto.OrderBuyerLite"
|
||
},
|
||
"order": {
|
||
"$ref": "#/definitions/models.Order"
|
||
},
|
||
"tenant": {
|
||
"$ref": "#/definitions/dto.OrderTenantLite"
|
||
}
|
||
}
|
||
},
|
||
"dto.SuperOrderItem": {
|
||
"type": "object",
|
||
"properties": {
|
||
"amount_discount": {
|
||
"type": "integer"
|
||
},
|
||
"amount_original": {
|
||
"type": "integer"
|
||
},
|
||
"amount_paid": {
|
||
"type": "integer"
|
||
},
|
||
"buyer": {
|
||
"$ref": "#/definitions/dto.OrderBuyerLite"
|
||
},
|
||
"created_at": {
|
||
"type": "string"
|
||
},
|
||
"currency": {
|
||
"$ref": "#/definitions/consts.Currency"
|
||
},
|
||
"id": {
|
||
"type": "integer"
|
||
},
|
||
"paid_at": {
|
||
"type": "string"
|
||
},
|
||
"refunded_at": {
|
||
"type": "string"
|
||
},
|
||
"status": {
|
||
"$ref": "#/definitions/consts.OrderStatus"
|
||
},
|
||
"status_description": {
|
||
"type": "string"
|
||
},
|
||
"tenant": {
|
||
"$ref": "#/definitions/dto.OrderTenantLite"
|
||
},
|
||
"type": {
|
||
"$ref": "#/definitions/consts.OrderType"
|
||
},
|
||
"updated_at": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
},
|
||
"dto.SuperOrderRefundForm": {
|
||
"type": "object",
|
||
"properties": {
|
||
"force": {
|
||
"description": "Force indicates bypassing the default refund window check (paid_at + 24h).",
|
||
"type": "boolean"
|
||
},
|
||
"idempotency_key": {
|
||
"description": "IdempotencyKey ensures refund request is processed at most once.",
|
||
"type": "string"
|
||
},
|
||
"reason": {
|
||
"description": "Reason is the human-readable refund reason used for audit.",
|
||
"type": "string"
|
||
}
|
||
}
|
||
},
|
||
"dto.SuperTenantUserItem": {
|
||
"type": "object",
|
||
"properties": {
|
||
"tenant_user": {
|
||
"$ref": "#/definitions/models.TenantUser"
|
||
},
|
||
"user": {
|
||
"$ref": "#/definitions/dto.SuperUserLite"
|
||
}
|
||
}
|
||
},
|
||
"dto.SuperUserLite": {
|
||
"type": "object",
|
||
"properties": {
|
||
"created_at": {
|
||
"type": "string"
|
||
},
|
||
"id": {
|
||
"type": "integer"
|
||
},
|
||
"roles": {
|
||
"type": "array",
|
||
"items": {
|
||
"$ref": "#/definitions/consts.Role"
|
||
}
|
||
},
|
||
"status": {
|
||
"$ref": "#/definitions/consts.UserStatus"
|
||
},
|
||
"status_description": {
|
||
"type": "string"
|
||
},
|
||
"updated_at": {
|
||
"type": "string"
|
||
},
|
||
"username": {
|
||
"type": "string"
|
||
},
|
||
"verified_at": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
},
|
||
"dto.TenantAdminUserLite": {
|
||
"type": "object",
|
||
"properties": {
|
||
"id": {
|
||
"type": "integer"
|
||
},
|
||
"username": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
},
|
||
"dto.TenantCreateForm": {
|
||
"type": "object",
|
||
"required": [
|
||
"admin_user_id",
|
||
"code",
|
||
"duration",
|
||
"name"
|
||
],
|
||
"properties": {
|
||
"admin_user_id": {
|
||
"type": "integer"
|
||
},
|
||
"code": {
|
||
"type": "string",
|
||
"maxLength": 64
|
||
},
|
||
"duration": {
|
||
"description": "Duration 租户有效期(天),从“创建时刻”起算;与续期接口保持一致。",
|
||
"type": "integer",
|
||
"enum": [
|
||
7,
|
||
30,
|
||
90,
|
||
180,
|
||
365
|
||
]
|
||
},
|
||
"name": {
|
||
"type": "string",
|
||
"maxLength": 128
|
||
}
|
||
}
|
||
},
|
||
"dto.TenantExpireUpdateForm": {
|
||
"type": "object",
|
||
"required": [
|
||
"duration"
|
||
],
|
||
"properties": {
|
||
"duration": {
|
||
"type": "integer",
|
||
"enum": [
|
||
7,
|
||
30,
|
||
90,
|
||
180,
|
||
365
|
||
]
|
||
}
|
||
}
|
||
},
|
||
"dto.TenantItem": {
|
||
"type": "object",
|
||
"properties": {
|
||
"admin_users": {
|
||
"type": "array",
|
||
"items": {
|
||
"$ref": "#/definitions/dto.TenantAdminUserLite"
|
||
}
|
||
},
|
||
"code": {
|
||
"type": "string"
|
||
},
|
||
"config": {
|
||
"type": "array",
|
||
"items": {
|
||
"type": "integer"
|
||
}
|
||
},
|
||
"created_at": {
|
||
"type": "string"
|
||
},
|
||
"expired_at": {
|
||
"type": "string"
|
||
},
|
||
"id": {
|
||
"type": "integer"
|
||
},
|
||
"income_amount_paid_sum": {
|
||
"description": "IncomeAmountPaidSum 累计收入金额(单位:分,CNY):按 orders 聚合得到的已支付净收入(不含退款中/已退款订单)。",
|
||
"type": "integer"
|
||
},
|
||
"name": {
|
||
"type": "string"
|
||
},
|
||
"owner": {
|
||
"$ref": "#/definitions/dto.TenantOwnerUserLite"
|
||
},
|
||
"status": {
|
||
"$ref": "#/definitions/consts.TenantStatus"
|
||
},
|
||
"status_description": {
|
||
"type": "string"
|
||
},
|
||
"updated_at": {
|
||
"type": "string"
|
||
},
|
||
"user_count": {
|
||
"type": "integer"
|
||
},
|
||
"user_id": {
|
||
"type": "integer"
|
||
},
|
||
"users": {
|
||
"type": "array",
|
||
"items": {
|
||
"$ref": "#/definitions/models.User"
|
||
}
|
||
},
|
||
"uuid": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
},
|
||
"dto.TenantOwnerUserLite": {
|
||
"type": "object",
|
||
"properties": {
|
||
"id": {
|
||
"type": "integer"
|
||
},
|
||
"username": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
},
|
||
"dto.TenantStatusUpdateForm": {
|
||
"type": "object",
|
||
"required": [
|
||
"status"
|
||
],
|
||
"properties": {
|
||
"status": {
|
||
"enum": [
|
||
"normal",
|
||
"disabled"
|
||
],
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/consts.TenantStatus"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
},
|
||
"dto.UserItem": {
|
||
"type": "object",
|
||
"properties": {
|
||
"balance": {
|
||
"type": "integer"
|
||
},
|
||
"balance_frozen": {
|
||
"type": "integer"
|
||
},
|
||
"created_at": {
|
||
"type": "string"
|
||
},
|
||
"id": {
|
||
"type": "integer"
|
||
},
|
||
"joined_tenant_count": {
|
||
"type": "integer"
|
||
},
|
||
"owned_tenant_count": {
|
||
"type": "integer"
|
||
},
|
||
"roles": {
|
||
"type": "array",
|
||
"items": {
|
||
"$ref": "#/definitions/consts.Role"
|
||
}
|
||
},
|
||
"status": {
|
||
"$ref": "#/definitions/consts.UserStatus"
|
||
},
|
||
"status_description": {
|
||
"type": "string"
|
||
},
|
||
"updated_at": {
|
||
"type": "string"
|
||
},
|
||
"username": {
|
||
"type": "string"
|
||
},
|
||
"verified_at": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
},
|
||
"dto.UserRolesUpdateForm": {
|
||
"type": "object",
|
||
"required": [
|
||
"roles"
|
||
],
|
||
"properties": {
|
||
"roles": {
|
||
"type": "array",
|
||
"minItems": 1,
|
||
"items": {
|
||
"$ref": "#/definitions/consts.Role"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"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"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
},
|
||
"dto.UserTenantItem": {
|
||
"type": "object",
|
||
"properties": {
|
||
"code": {
|
||
"type": "string"
|
||
},
|
||
"expired_at": {
|
||
"type": "string"
|
||
},
|
||
"joined_at": {
|
||
"type": "string"
|
||
},
|
||
"member_status": {
|
||
"$ref": "#/definitions/consts.UserStatus"
|
||
},
|
||
"member_status_description": {
|
||
"type": "string"
|
||
},
|
||
"name": {
|
||
"type": "string"
|
||
},
|
||
"owner": {
|
||
"$ref": "#/definitions/dto.TenantOwnerUserLite"
|
||
},
|
||
"role": {
|
||
"type": "array",
|
||
"items": {
|
||
"$ref": "#/definitions/consts.TenantUserRole"
|
||
}
|
||
},
|
||
"tenant_id": {
|
||
"type": "integer"
|
||
},
|
||
"tenant_status": {
|
||
"$ref": "#/definitions/consts.TenantStatus"
|
||
},
|
||
"tenant_status_description": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
},
|
||
"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"
|
||
},
|
||
"source_asset_id": {
|
||
"description": "派生来源资源ID:preview 产物可指向对应 main 资源;用于建立 preview/main 的 1:1 追溯关系",
|
||
"type": "integer"
|
||
},
|
||
"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"
|
||
},
|
||
"variant": {
|
||
"description": "产物类型:main/preview;用于强制试看资源必须绑定独立产物,避免用正片绕过",
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/consts.MediaAssetVariant"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
},
|
||
"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 标题/定价/折扣、请求来源等,避免改价影响历史展示",
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/types.JSONType-fields_OrdersSnapshot"
|
||
}
|
||
]
|
||
},
|
||
"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(购买内容)等;当前默认 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 等,用于历史展示与审计",
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/types.JSONType-fields_OrderItemsSnapshot"
|
||
}
|
||
]
|
||
},
|
||
"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"
|
||
},
|
||
"biz_ref_id": {
|
||
"description": "业务引用ID:与 biz_ref_type 配合使用(例如 orders.id);用于对账与审计",
|
||
"type": "integer"
|
||
},
|
||
"biz_ref_type": {
|
||
"description": "业务引用类型:order/refund/etc;与 biz_ref_id 组成可选的结构化幂等/追溯键",
|
||
"type": "string"
|
||
},
|
||
"created_at": {
|
||
"description": "创建时间:默认 now()",
|
||
"type": "string"
|
||
},
|
||
"frozen_after": {
|
||
"description": "变更后冻结余额:用于审计与对账回放",
|
||
"type": "integer"
|
||
},
|
||
"frozen_before": {
|
||
"description": "变更前冻结余额:用于审计与对账回放",
|
||
"type": "integer"
|
||
},
|
||
"id": {
|
||
"description": "主键ID:自增",
|
||
"type": "integer"
|
||
},
|
||
"idempotency_key": {
|
||
"description": "幂等键:同一租户同一用户同一业务操作固定;用于防止重复落账(建议由业务层生成)",
|
||
"type": "string"
|
||
},
|
||
"operator_user_id": {
|
||
"description": "操作者用户ID:谁触发该流水(admin/buyer/system);用于审计与追责;可为空(历史数据或无法识别时)",
|
||
"type": "integer"
|
||
},
|
||
"order": {
|
||
"$ref": "#/definitions/models.Order"
|
||
},
|
||
"order_id": {
|
||
"description": "关联订单ID:购买/退款类流水应关联 orders.id;非订单类可为空",
|
||
"type": "integer"
|
||
},
|
||
"remark": {
|
||
"description": "备注:业务说明/后台操作原因等;用于审计",
|
||
"type": "string"
|
||
},
|
||
"tenant_id": {
|
||
"description": "租户ID:多租户隔离关键字段;必须与 tenant_users.tenant_id 一致",
|
||
"type": "integer"
|
||
},
|
||
"type": {
|
||
"description": "流水类型: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": {
|
||
"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": {
|
||
"balance": {
|
||
"description": "全局可用余额:分/最小货币单位;用户在所有已加入租户内共享该余额;默认 0",
|
||
"type": "integer"
|
||
},
|
||
"balance_frozen": {
|
||
"description": "全局冻结余额:分/最小货币单位;用于下单冻结等;默认 0",
|
||
"type": "integer"
|
||
},
|
||
"created_at": {
|
||
"type": "string"
|
||
},
|
||
"deleted_at": {
|
||
"$ref": "#/definitions/gorm.DeletedAt"
|
||
},
|
||
"id": {
|
||
"type": "integer"
|
||
},
|
||
"metas": {
|
||
"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"
|
||
}
|
||
}
|
||
},
|
||
"types.JSONType-fields_OrderItemsSnapshot": {
|
||
"type": "object"
|
||
},
|
||
"types.JSONType-fields_OrdersSnapshot": {
|
||
"type": "object"
|
||
}
|
||
},
|
||
"securityDefinitions": {
|
||
"BasicAuth": {
|
||
"type": "basic"
|
||
}
|
||
},
|
||
"externalDocs": {
|
||
"description": "OpenAPI",
|
||
"url": "https://swagger.io/resources/open-api/"
|
||
}
|
||
}`
|
||
|
||
// SwaggerInfo holds exported Swagger Info so clients can modify it
|
||
var SwaggerInfo = &swag.Spec{
|
||
Version: "1.0",
|
||
Host: "localhost:8080",
|
||
BasePath: "/",
|
||
Schemes: []string{},
|
||
Title: "ApiDoc",
|
||
Description: "Multi-tenant media platform backend API.",
|
||
InfoInstanceName: "swagger",
|
||
SwaggerTemplate: docTemplate,
|
||
LeftDelim: "{{",
|
||
RightDelim: "}}",
|
||
}
|
||
|
||
func init() {
|
||
swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo)
|
||
}
|