1709 lines
55 KiB
JSON
1709 lines
55 KiB
JSON
{
|
||
"swagger": "2.0",
|
||
"info": {
|
||
"description": "Multi-tenant media platform backend API.",
|
||
"title": "ApiDoc",
|
||
"termsOfService": "http://swagger.io/terms/",
|
||
"contact": {
|
||
"name": "UserName",
|
||
"url": "http://www.swagger.io/support",
|
||
"email": "support@swagger.io"
|
||
},
|
||
"license": {
|
||
"name": "Apache 2.0",
|
||
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
|
||
},
|
||
"version": "1.0"
|
||
},
|
||
"host": "localhost:8080",
|
||
"basePath": "/t/{tenantCode}/v1",
|
||
"paths": {
|
||
"/super/v1/auth/login": {
|
||
"post": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Super"
|
||
],
|
||
"parameters": [
|
||
{
|
||
"description": "form",
|
||
"name": "form",
|
||
"in": "body",
|
||
"required": true,
|
||
"schema": {
|
||
"$ref": "#/definitions/dto.LoginForm"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "成功",
|
||
"schema": {
|
||
"$ref": "#/definitions/dto.LoginResponse"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/super/v1/auth/token": {
|
||
"get": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Super"
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "成功",
|
||
"schema": {
|
||
"$ref": "#/definitions/dto.LoginResponse"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/super/v1/tenants": {
|
||
"get": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Super"
|
||
],
|
||
"summary": "租户列表",
|
||
"parameters": [
|
||
{
|
||
"type": "string",
|
||
"description": "Asc specifies comma-separated field names to sort ascending by.",
|
||
"name": "asc",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "Desc specifies comma-separated field names to sort descending by.",
|
||
"name": "desc",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"description": "Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10).",
|
||
"name": "limit",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"name": "name",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"description": "Page is 1-based page index; values \u003c= 0 are normalized to 1.",
|
||
"name": "page",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"enum": [
|
||
"pending_verify",
|
||
"verified",
|
||
"banned"
|
||
],
|
||
"type": "string",
|
||
"x-enum-varnames": [
|
||
"TenantStatusPendingVerify",
|
||
"TenantStatusVerified",
|
||
"TenantStatusBanned"
|
||
],
|
||
"name": "status",
|
||
"in": "query"
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/requests.Pager"
|
||
},
|
||
{
|
||
"type": "object",
|
||
"properties": {
|
||
"items": {
|
||
"$ref": "#/definitions/dto.TenantItem"
|
||
}
|
||
}
|
||
}
|
||
]
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/super/v1/tenants/statuses": {
|
||
"get": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Super"
|
||
],
|
||
"summary": "租户状态列表",
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"type": "array",
|
||
"items": {
|
||
"$ref": "#/definitions/requests.KV"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/super/v1/tenants/{tenantID}": {
|
||
"patch": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Super"
|
||
],
|
||
"summary": "更新过期时间",
|
||
"parameters": [
|
||
{
|
||
"type": "integer",
|
||
"format": "int64",
|
||
"description": "TenantID",
|
||
"name": "tenantID",
|
||
"in": "path",
|
||
"required": true
|
||
},
|
||
{
|
||
"description": "Form",
|
||
"name": "form",
|
||
"in": "body",
|
||
"required": true,
|
||
"schema": {
|
||
"$ref": "#/definitions/dto.TenantExpireUpdateForm"
|
||
}
|
||
}
|
||
],
|
||
"responses": {}
|
||
}
|
||
},
|
||
"/super/v1/tenants/{tenantID}/status": {
|
||
"patch": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Super"
|
||
],
|
||
"summary": "更新租户状态",
|
||
"parameters": [
|
||
{
|
||
"type": "integer",
|
||
"format": "int64",
|
||
"description": "TenantID",
|
||
"name": "tenantID",
|
||
"in": "path",
|
||
"required": true
|
||
},
|
||
{
|
||
"description": "Form",
|
||
"name": "form",
|
||
"in": "body",
|
||
"required": true,
|
||
"schema": {
|
||
"$ref": "#/definitions/dto.TenantStatusUpdateForm"
|
||
}
|
||
}
|
||
],
|
||
"responses": {}
|
||
}
|
||
},
|
||
"/super/v1/users": {
|
||
"get": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Super"
|
||
],
|
||
"summary": "租户列表",
|
||
"parameters": [
|
||
{
|
||
"type": "string",
|
||
"description": "Asc specifies comma-separated field names to sort ascending by.",
|
||
"name": "asc",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"description": "Desc specifies comma-separated field names to sort descending by.",
|
||
"name": "desc",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"description": "Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10).",
|
||
"name": "limit",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"description": "Page is 1-based page index; values \u003c= 0 are normalized to 1.",
|
||
"name": "page",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"enum": [
|
||
"pending_verify",
|
||
"verified",
|
||
"banned"
|
||
],
|
||
"type": "string",
|
||
"x-enum-varnames": [
|
||
"UserStatusPendingVerify",
|
||
"UserStatusVerified",
|
||
"UserStatusBanned"
|
||
],
|
||
"name": "status",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"name": "tenantID",
|
||
"in": "query"
|
||
},
|
||
{
|
||
"type": "string",
|
||
"name": "username",
|
||
"in": "query"
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/requests.Pager"
|
||
},
|
||
{
|
||
"type": "object",
|
||
"properties": {
|
||
"items": {
|
||
"$ref": "#/definitions/dto.UserItem"
|
||
}
|
||
}
|
||
}
|
||
]
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/super/v1/users/statistics": {
|
||
"get": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Super"
|
||
],
|
||
"summary": "用户统计信息",
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"type": "array",
|
||
"items": {
|
||
"$ref": "#/definitions/dto.UserStatistics"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/super/v1/users/statuses": {
|
||
"get": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Super"
|
||
],
|
||
"summary": "用户状态列表",
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"type": "array",
|
||
"items": {
|
||
"$ref": "#/definitions/requests.KV"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/super/v1/users/{userID}/status": {
|
||
"patch": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Super"
|
||
],
|
||
"summary": "更新用户状态",
|
||
"parameters": [
|
||
{
|
||
"type": "integer",
|
||
"format": "int64",
|
||
"description": "UserID",
|
||
"name": "userID",
|
||
"in": "path",
|
||
"required": true
|
||
},
|
||
{
|
||
"description": "Form",
|
||
"name": "form",
|
||
"in": "body",
|
||
"required": true,
|
||
"schema": {
|
||
"$ref": "#/definitions/dto.UserStatusUpdateForm"
|
||
}
|
||
}
|
||
],
|
||
"responses": {}
|
||
}
|
||
},
|
||
"/t/{tenantCode}/v1/admin/contents": {
|
||
"post": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Tenant"
|
||
],
|
||
"summary": "创建内容(草稿)",
|
||
"parameters": [
|
||
{
|
||
"type": "string",
|
||
"description": "Tenant Code",
|
||
"name": "tenantCode",
|
||
"in": "path",
|
||
"required": true
|
||
},
|
||
{
|
||
"description": "Form",
|
||
"name": "form",
|
||
"in": "body",
|
||
"required": true,
|
||
"schema": {
|
||
"$ref": "#/definitions/dto.ContentCreateForm"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"$ref": "#/definitions/models.Content"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/t/{tenantCode}/v1/admin/contents/{contentID}": {
|
||
"patch": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Tenant"
|
||
],
|
||
"summary": "更新内容(标题/描述/状态等)",
|
||
"parameters": [
|
||
{
|
||
"type": "string",
|
||
"description": "Tenant Code",
|
||
"name": "tenantCode",
|
||
"in": "path",
|
||
"required": true
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"format": "int64",
|
||
"description": "ContentID",
|
||
"name": "contentID",
|
||
"in": "path",
|
||
"required": true
|
||
},
|
||
{
|
||
"description": "Form",
|
||
"name": "form",
|
||
"in": "body",
|
||
"required": true,
|
||
"schema": {
|
||
"$ref": "#/definitions/dto.ContentUpdateForm"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"$ref": "#/definitions/models.Content"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/t/{tenantCode}/v1/admin/contents/{contentID}/assets": {
|
||
"post": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Tenant"
|
||
],
|
||
"summary": "绑定媒体资源到内容(main/cover/preview)",
|
||
"parameters": [
|
||
{
|
||
"type": "string",
|
||
"description": "Tenant Code",
|
||
"name": "tenantCode",
|
||
"in": "path",
|
||
"required": true
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"format": "int64",
|
||
"description": "ContentID",
|
||
"name": "contentID",
|
||
"in": "path",
|
||
"required": true
|
||
},
|
||
{
|
||
"description": "Form",
|
||
"name": "form",
|
||
"in": "body",
|
||
"required": true,
|
||
"schema": {
|
||
"$ref": "#/definitions/dto.ContentAssetAttachForm"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"$ref": "#/definitions/models.ContentAsset"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/t/{tenantCode}/v1/admin/contents/{contentID}/price": {
|
||
"put": {
|
||
"consumes": [
|
||
"application/json"
|
||
],
|
||
"produces": [
|
||
"application/json"
|
||
],
|
||
"tags": [
|
||
"Tenant"
|
||
],
|
||
"summary": "设置内容价格与折扣",
|
||
"parameters": [
|
||
{
|
||
"type": "string",
|
||
"description": "Tenant Code",
|
||
"name": "tenantCode",
|
||
"in": "path",
|
||
"required": true
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"format": "int64",
|
||
"description": "ContentID",
|
||
"name": "contentID",
|
||
"in": "path",
|
||
"required": true
|
||
},
|
||
{
|
||
"description": "Form",
|
||
"name": "form",
|
||
"in": "body",
|
||
"required": true,
|
||
"schema": {
|
||
"$ref": "#/definitions/dto.ContentPriceUpsertForm"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "OK",
|
||
"schema": {
|
||
"$ref": "#/definitions/models.ContentPrice"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/t/{tenantCode}/v1/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/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"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"definitions": {
|
||
"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.Role": {
|
||
"type": "string",
|
||
"enum": [
|
||
"user",
|
||
"super_admin"
|
||
],
|
||
"x-enum-varnames": [
|
||
"RoleUser",
|
||
"RoleSuperAdmin"
|
||
]
|
||
},
|
||
"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.ContentAssetAttachForm": {
|
||
"type": "object",
|
||
"properties": {
|
||
"asset_id": {
|
||
"description": "AssetID is the media asset id to attach.",
|
||
"type": "integer"
|
||
},
|
||
"role": {
|
||
"description": "Role indicates how this asset is used (main/cover/preview).",
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/consts.ContentAssetRole"
|
||
}
|
||
]
|
||
},
|
||
"sort": {
|
||
"description": "Sort controls ordering under the same role.",
|
||
"type": "integer"
|
||
}
|
||
}
|
||
},
|
||
"dto.ContentAssetsResponse": {
|
||
"type": "object",
|
||
"properties": {
|
||
"assets": {
|
||
"description": "Assets is the list of media assets for the requested role (preview/main).",
|
||
"type": "array",
|
||
"items": {
|
||
"$ref": "#/definitions/models.MediaAsset"
|
||
}
|
||
},
|
||
"content": {
|
||
"description": "Content is the content entity.",
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/models.Content"
|
||
}
|
||
]
|
||
},
|
||
"preview_seconds": {
|
||
"description": "PreviewSeconds indicates the max preview duration (only meaningful for preview response).",
|
||
"type": "integer"
|
||
}
|
||
}
|
||
},
|
||
"dto.ContentCreateForm": {
|
||
"type": "object",
|
||
"properties": {
|
||
"description": {
|
||
"description": "Description is the content description.",
|
||
"type": "string"
|
||
},
|
||
"preview_seconds": {
|
||
"description": "PreviewSeconds controls preview duration (defaults to 60 when omitted).",
|
||
"type": "integer"
|
||
},
|
||
"title": {
|
||
"description": "Title is the content title.",
|
||
"type": "string"
|
||
},
|
||
"visibility": {
|
||
"description": "Visibility controls who can view the content detail (main assets still require free/purchase).",
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/consts.ContentVisibility"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
},
|
||
"dto.ContentDetail": {
|
||
"type": "object",
|
||
"properties": {
|
||
"content": {
|
||
"description": "Content is the content entity.",
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/models.Content"
|
||
}
|
||
]
|
||
},
|
||
"has_access": {
|
||
"description": "HasAccess indicates whether current user can access main assets (free/owner/purchased).",
|
||
"type": "boolean"
|
||
},
|
||
"price": {
|
||
"description": "Price is the current price settings for the content (may be nil if not set).",
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/models.ContentPrice"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
},
|
||
"dto.ContentItem": {
|
||
"type": "object",
|
||
"properties": {
|
||
"content": {
|
||
"description": "Content is the content entity.",
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/models.Content"
|
||
}
|
||
]
|
||
},
|
||
"has_access": {
|
||
"description": "HasAccess indicates whether current user can access main assets (free/owner/purchased).",
|
||
"type": "boolean"
|
||
},
|
||
"price": {
|
||
"description": "Price is the current price settings for the content (may be nil if not set).",
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/models.ContentPrice"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
},
|
||
"dto.ContentPriceUpsertForm": {
|
||
"type": "object",
|
||
"properties": {
|
||
"currency": {
|
||
"description": "Currency is fixed to CNY for now.",
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/consts.Currency"
|
||
}
|
||
]
|
||
},
|
||
"discount_end_at": {
|
||
"description": "DiscountEndAt disables discount after this time (optional).",
|
||
"type": "string"
|
||
},
|
||
"discount_start_at": {
|
||
"description": "DiscountStartAt enables discount from this time (optional).",
|
||
"type": "string"
|
||
},
|
||
"discount_type": {
|
||
"description": "DiscountType defines the discount algorithm (none/percent/amount).",
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/consts.DiscountType"
|
||
}
|
||
]
|
||
},
|
||
"discount_value": {
|
||
"description": "DiscountValue is interpreted based on DiscountType.",
|
||
"type": "integer"
|
||
},
|
||
"price_amount": {
|
||
"description": "PriceAmount is the base price in cents (CNY 分).",
|
||
"type": "integer"
|
||
}
|
||
}
|
||
},
|
||
"dto.ContentUpdateForm": {
|
||
"type": "object",
|
||
"properties": {
|
||
"description": {
|
||
"description": "Description updates the description when provided.",
|
||
"type": "string"
|
||
},
|
||
"preview_seconds": {
|
||
"description": "PreviewSeconds updates preview duration when provided (must be \u003e 0).",
|
||
"type": "integer"
|
||
},
|
||
"status": {
|
||
"description": "Status updates the content status when provided (e.g. publish/unpublish).",
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/consts.ContentStatus"
|
||
}
|
||
]
|
||
},
|
||
"title": {
|
||
"description": "Title updates the title when provided.",
|
||
"type": "string"
|
||
},
|
||
"visibility": {
|
||
"description": "Visibility updates the visibility when provided.",
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/consts.ContentVisibility"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
},
|
||
"dto.LoginForm": {
|
||
"type": "object",
|
||
"properties": {
|
||
"password": {
|
||
"type": "string"
|
||
},
|
||
"username": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
},
|
||
"dto.LoginResponse": {
|
||
"type": "object",
|
||
"properties": {
|
||
"token": {
|
||
"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.TenantExpireUpdateForm": {
|
||
"type": "object",
|
||
"required": [
|
||
"duration"
|
||
],
|
||
"properties": {
|
||
"duration": {
|
||
"type": "integer",
|
||
"enum": [
|
||
7,
|
||
30,
|
||
90,
|
||
180,
|
||
365
|
||
]
|
||
}
|
||
}
|
||
},
|
||
"dto.TenantItem": {
|
||
"type": "object",
|
||
"properties": {
|
||
"code": {
|
||
"type": "string"
|
||
},
|
||
"config": {
|
||
"type": "array",
|
||
"items": {
|
||
"type": "integer"
|
||
}
|
||
},
|
||
"created_at": {
|
||
"type": "string"
|
||
},
|
||
"expired_at": {
|
||
"type": "string"
|
||
},
|
||
"id": {
|
||
"type": "integer"
|
||
},
|
||
"name": {
|
||
"type": "string"
|
||
},
|
||
"status": {
|
||
"$ref": "#/definitions/consts.TenantStatus"
|
||
},
|
||
"status_description": {
|
||
"type": "string"
|
||
},
|
||
"updated_at": {
|
||
"type": "string"
|
||
},
|
||
"user_balance": {
|
||
"type": "integer"
|
||
},
|
||
"user_count": {
|
||
"type": "integer"
|
||
},
|
||
"user_id": {
|
||
"type": "integer"
|
||
},
|
||
"users": {
|
||
"type": "array",
|
||
"items": {
|
||
"$ref": "#/definitions/models.User"
|
||
}
|
||
},
|
||
"uuid": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
},
|
||
"dto.TenantStatusUpdateForm": {
|
||
"type": "object",
|
||
"required": [
|
||
"status"
|
||
],
|
||
"properties": {
|
||
"status": {
|
||
"enum": [
|
||
"normal",
|
||
"disabled"
|
||
],
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/consts.TenantStatus"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
},
|
||
"dto.UserItem": {
|
||
"type": "object",
|
||
"properties": {
|
||
"created_at": {
|
||
"type": "string"
|
||
},
|
||
"deleted_at": {
|
||
"$ref": "#/definitions/gorm.DeletedAt"
|
||
},
|
||
"id": {
|
||
"type": "integer"
|
||
},
|
||
"metas": {
|
||
"type": "array",
|
||
"items": {
|
||
"type": "integer"
|
||
}
|
||
},
|
||
"owned": {
|
||
"$ref": "#/definitions/models.Tenant"
|
||
},
|
||
"password": {
|
||
"type": "string"
|
||
},
|
||
"roles": {
|
||
"type": "array",
|
||
"items": {
|
||
"$ref": "#/definitions/consts.Role"
|
||
}
|
||
},
|
||
"status": {
|
||
"$ref": "#/definitions/consts.UserStatus"
|
||
},
|
||
"status_description": {
|
||
"type": "string"
|
||
},
|
||
"tenants": {
|
||
"type": "array",
|
||
"items": {
|
||
"$ref": "#/definitions/models.Tenant"
|
||
}
|
||
},
|
||
"updated_at": {
|
||
"type": "string"
|
||
},
|
||
"username": {
|
||
"type": "string"
|
||
},
|
||
"verified_at": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
},
|
||
"dto.UserStatistics": {
|
||
"type": "object",
|
||
"properties": {
|
||
"count": {
|
||
"type": "integer"
|
||
},
|
||
"status": {
|
||
"$ref": "#/definitions/consts.UserStatus"
|
||
},
|
||
"status_description": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
},
|
||
"dto.UserStatusUpdateForm": {
|
||
"type": "object",
|
||
"required": [
|
||
"status"
|
||
],
|
||
"properties": {
|
||
"status": {
|
||
"enum": [
|
||
"normal",
|
||
"disabled"
|
||
],
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/consts.UserStatus"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
},
|
||
"gorm.DeletedAt": {
|
||
"type": "object",
|
||
"properties": {
|
||
"time": {
|
||
"type": "string"
|
||
},
|
||
"valid": {
|
||
"description": "Valid is true if Time is not NULL",
|
||
"type": "boolean"
|
||
}
|
||
}
|
||
},
|
||
"models.Content": {
|
||
"type": "object",
|
||
"properties": {
|
||
"created_at": {
|
||
"type": "string"
|
||
},
|
||
"deleted_at": {
|
||
"$ref": "#/definitions/gorm.DeletedAt"
|
||
},
|
||
"description": {
|
||
"type": "string"
|
||
},
|
||
"id": {
|
||
"type": "integer"
|
||
},
|
||
"preview_downloadable": {
|
||
"type": "boolean"
|
||
},
|
||
"preview_seconds": {
|
||
"type": "integer"
|
||
},
|
||
"published_at": {
|
||
"type": "string"
|
||
},
|
||
"status": {
|
||
"$ref": "#/definitions/consts.ContentStatus"
|
||
},
|
||
"tenant_id": {
|
||
"type": "integer"
|
||
},
|
||
"title": {
|
||
"type": "string"
|
||
},
|
||
"updated_at": {
|
||
"type": "string"
|
||
},
|
||
"user_id": {
|
||
"type": "integer"
|
||
},
|
||
"visibility": {
|
||
"$ref": "#/definitions/consts.ContentVisibility"
|
||
}
|
||
}
|
||
},
|
||
"models.ContentAsset": {
|
||
"type": "object",
|
||
"properties": {
|
||
"asset_id": {
|
||
"type": "integer"
|
||
},
|
||
"content_id": {
|
||
"type": "integer"
|
||
},
|
||
"created_at": {
|
||
"type": "string"
|
||
},
|
||
"id": {
|
||
"type": "integer"
|
||
},
|
||
"role": {
|
||
"$ref": "#/definitions/consts.ContentAssetRole"
|
||
},
|
||
"sort": {
|
||
"type": "integer"
|
||
},
|
||
"tenant_id": {
|
||
"type": "integer"
|
||
},
|
||
"updated_at": {
|
||
"type": "string"
|
||
},
|
||
"user_id": {
|
||
"type": "integer"
|
||
}
|
||
}
|
||
},
|
||
"models.ContentPrice": {
|
||
"type": "object",
|
||
"properties": {
|
||
"content_id": {
|
||
"type": "integer"
|
||
},
|
||
"created_at": {
|
||
"type": "string"
|
||
},
|
||
"currency": {
|
||
"$ref": "#/definitions/consts.Currency"
|
||
},
|
||
"discount_end_at": {
|
||
"type": "string"
|
||
},
|
||
"discount_start_at": {
|
||
"type": "string"
|
||
},
|
||
"discount_type": {
|
||
"$ref": "#/definitions/consts.DiscountType"
|
||
},
|
||
"discount_value": {
|
||
"type": "integer"
|
||
},
|
||
"id": {
|
||
"type": "integer"
|
||
},
|
||
"price_amount": {
|
||
"type": "integer"
|
||
},
|
||
"tenant_id": {
|
||
"type": "integer"
|
||
},
|
||
"updated_at": {
|
||
"type": "string"
|
||
},
|
||
"user_id": {
|
||
"type": "integer"
|
||
}
|
||
}
|
||
},
|
||
"models.MediaAsset": {
|
||
"type": "object",
|
||
"properties": {
|
||
"bucket": {
|
||
"type": "string"
|
||
},
|
||
"created_at": {
|
||
"type": "string"
|
||
},
|
||
"deleted_at": {
|
||
"$ref": "#/definitions/gorm.DeletedAt"
|
||
},
|
||
"id": {
|
||
"type": "integer"
|
||
},
|
||
"meta": {
|
||
"type": "array",
|
||
"items": {
|
||
"type": "integer"
|
||
}
|
||
},
|
||
"object_key": {
|
||
"type": "string"
|
||
},
|
||
"provider": {
|
||
"type": "string"
|
||
},
|
||
"status": {
|
||
"$ref": "#/definitions/consts.MediaAssetStatus"
|
||
},
|
||
"tenant_id": {
|
||
"type": "integer"
|
||
},
|
||
"type": {
|
||
"$ref": "#/definitions/consts.MediaAssetType"
|
||
},
|
||
"updated_at": {
|
||
"type": "string"
|
||
},
|
||
"user_id": {
|
||
"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.TenantUser": {
|
||
"type": "object",
|
||
"properties": {
|
||
"balance": {
|
||
"type": "integer"
|
||
},
|
||
"created_at": {
|
||
"type": "string"
|
||
},
|
||
"id": {
|
||
"type": "integer"
|
||
},
|
||
"role": {
|
||
"type": "array",
|
||
"items": {
|
||
"$ref": "#/definitions/consts.TenantUserRole"
|
||
}
|
||
},
|
||
"status": {
|
||
"$ref": "#/definitions/consts.UserStatus"
|
||
},
|
||
"tenant_id": {
|
||
"type": "integer"
|
||
},
|
||
"updated_at": {
|
||
"type": "string"
|
||
},
|
||
"user_id": {
|
||
"type": "integer"
|
||
}
|
||
}
|
||
},
|
||
"models.User": {
|
||
"type": "object",
|
||
"properties": {
|
||
"created_at": {
|
||
"type": "string"
|
||
},
|
||
"deleted_at": {
|
||
"$ref": "#/definitions/gorm.DeletedAt"
|
||
},
|
||
"id": {
|
||
"type": "integer"
|
||
},
|
||
"metas": {
|
||
"type": "array",
|
||
"items": {
|
||
"type": "integer"
|
||
}
|
||
},
|
||
"owned": {
|
||
"$ref": "#/definitions/models.Tenant"
|
||
},
|
||
"password": {
|
||
"type": "string"
|
||
},
|
||
"roles": {
|
||
"type": "array",
|
||
"items": {
|
||
"$ref": "#/definitions/consts.Role"
|
||
}
|
||
},
|
||
"status": {
|
||
"$ref": "#/definitions/consts.UserStatus"
|
||
},
|
||
"tenants": {
|
||
"type": "array",
|
||
"items": {
|
||
"$ref": "#/definitions/models.Tenant"
|
||
}
|
||
},
|
||
"updated_at": {
|
||
"type": "string"
|
||
},
|
||
"username": {
|
||
"type": "string"
|
||
},
|
||
"verified_at": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
},
|
||
"requests.KV": {
|
||
"type": "object",
|
||
"properties": {
|
||
"key": {
|
||
"description": "Key is a machine-readable value, usually an enum string.",
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"description": "Value is the label payload, often a human-readable string."
|
||
}
|
||
}
|
||
},
|
||
"requests.Pager": {
|
||
"type": "object",
|
||
"properties": {
|
||
"items": {
|
||
"description": "Items is the paged result list; concrete type depends on endpoint."
|
||
},
|
||
"limit": {
|
||
"description": "Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10).",
|
||
"type": "integer"
|
||
},
|
||
"page": {
|
||
"description": "Page is 1-based page index; values \u003c= 0 are normalized to 1.",
|
||
"type": "integer"
|
||
},
|
||
"total": {
|
||
"description": "Total is the total number of items matching current filter (before paging).",
|
||
"type": "integer"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"securityDefinitions": {
|
||
"BasicAuth": {
|
||
"type": "basic"
|
||
}
|
||
},
|
||
"externalDocs": {
|
||
"description": "OpenAPI",
|
||
"url": "https://swagger.io/resources/open-api/"
|
||
}
|
||
} |