7421 lines
291 KiB
YAML
7421 lines
291 KiB
YAML
openapi: 3.0.3
|
||
info:
|
||
title: Genealogy APP API
|
||
version: 1.0.0
|
||
description: |
|
||
家谱业务 APP/PC 用户侧接口文档,用于 Apifox 导入。
|
||
|
||
导入方式:Apifox -> 导入 API 数据 -> OpenAPI/Swagger -> 选择本文件。
|
||
|
||
约定:
|
||
- APP 路径前缀为 `/genealogy/app`
|
||
- PC/H5 路径前缀为 `/genealogy/pc`
|
||
- 后台管理接口不包含在本文件内
|
||
- 登录后接口需要携带 token,且请求 Header 需携带 `clientid`
|
||
servers:
|
||
- url: https://backend-api.ddxcjp.cn
|
||
description: Production API
|
||
- url: http://127.0.0.1:8080
|
||
description: Local Java backend
|
||
- url: http://127.0.0.1:9527/dev-api
|
||
description: Local frontend proxy
|
||
tags:
|
||
- name: 业务字典
|
||
description: APP/PC 当前租户可公开的业务选项
|
||
- name: 验证中心
|
||
description: 统一验证码、天爱行为验证码和系统图形验证码
|
||
- name: 认证登录
|
||
description: APP/PC 登录注册与账号资料
|
||
- name: 文件上传
|
||
description: APP/PC 统一文件上传与业务引用绑定
|
||
- name: 行政区划
|
||
description: 行政区划
|
||
- name: 家谱
|
||
description: 家谱主体、加入申请与概览
|
||
- name: 家谱成员
|
||
description: 家谱成员
|
||
- name: 字辈谱
|
||
description: 字辈谱
|
||
- name: 世系人物
|
||
description: 世系人物与世系树
|
||
- name: 人生大事
|
||
description: 世系人物的人生事件时间轴
|
||
- name: 家族圈
|
||
description: 家族圈动态、点赞、评论
|
||
- name: 内容文章
|
||
description: 谱文、官网文章、帮助、推广
|
||
- name: 相册
|
||
description: 相册与照片
|
||
- name: 视频
|
||
description: 家谱视频
|
||
- name: 祭祀
|
||
description: 祭祀与献礼
|
||
- name: 族务记录
|
||
description: 成长、备忘、亲友、功德等记录
|
||
- name: VIP
|
||
description: VIP 套餐与订单
|
||
- name: 消息通知
|
||
description: 消息通知
|
||
- name: 意见反馈
|
||
description: 意见反馈
|
||
security:
|
||
- SaToken: []
|
||
paths:
|
||
/genealogy/app/dictionaries/{dictType}:
|
||
get:
|
||
tags: [业务字典]
|
||
summary: 查询当前租户业务字典
|
||
description: 仅允许公开白名单类型;tenantId 查询参数不会改变登录租户。
|
||
parameters:
|
||
- name: dictType
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: string
|
||
example: gen_feedback_type
|
||
responses:
|
||
'200':
|
||
description: 当前登录租户的业务字典选项
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RBusinessDictionaryOptions'
|
||
'400':
|
||
description: 业务字典类型不支持
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RBusinessDictionaryError'
|
||
example:
|
||
code: 400
|
||
msg: 业务字典类型不支持
|
||
data: null
|
||
'401':
|
||
description: 未登录或登录已失效
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RBusinessDictionaryError'
|
||
example:
|
||
code: 401
|
||
msg: 认证失败,无法访问系统资源
|
||
data: null
|
||
/genealogy/app/auth/verification/{operationCode}/require:
|
||
get:
|
||
tags: [验证中心]
|
||
summary: 查询 APP 认证动作是否需要验证
|
||
description: 服务端按 operationCode 对应 APP 路由的当前激活绑定解析验证场景,前端不得提交 sceneCode。
|
||
security: []
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- name: operationCode
|
||
description: APP 认证业务动作
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: string
|
||
enum: [password-login, sms-login, register, forgot-password, phone-change, account-deactivate]
|
||
- name: tenantId
|
||
description: 租户ID,用于区分不同租户的数据和验证策略
|
||
in: query
|
||
required: true
|
||
schema:
|
||
type: string
|
||
example: "000000"
|
||
- name: subject
|
||
description: 验证主体,通常为手机号、用户ID或登录账号
|
||
in: query
|
||
schema:
|
||
type: string
|
||
example: "13800000000"
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VerificationRequireResult'
|
||
/genealogy/app/auth/verification/{operationCode}/challenge:
|
||
post:
|
||
tags: [验证中心]
|
||
summary: 生成 APP 认证动作验证挑战
|
||
description: 服务端按 operationCode 的激活绑定解析场景。tenantId、subject 必须完整提交;clientid 仅从 Header 读取,前端不得提交 clientId 或 sceneCode。
|
||
security: []
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- name: operationCode
|
||
description: APP 认证业务动作
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: string
|
||
enum: [password-login, sms-login, register, forgot-password, phone-change, account-deactivate]
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/VerificationChallenge'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VerificationChallengeResult'
|
||
/genealogy/app/auth/verification/{operationCode}/verify:
|
||
post:
|
||
tags: [验证中心]
|
||
summary: 校验 APP 认证动作验证结果并换取 validToken
|
||
description: 必须使用生成挑战时相同的 operationCode、tenantId、subject 和 challengeId。clientid 仅从 Header 读取;服务端重新解析同一路由的激活场景,前端不得提交 clientId 或 sceneCode。
|
||
security: []
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- name: operationCode
|
||
description: APP 认证业务动作
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: string
|
||
enum: [password-login, sms-login, register, forgot-password, phone-change, account-deactivate]
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/VerificationCheck'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VerificationCheckResult'
|
||
/genealogy/app/auth/register:
|
||
post:
|
||
tags: [认证登录]
|
||
summary: APP 用户注册
|
||
security: []
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/PasswordRegister'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/LoginResult'
|
||
'400':
|
||
description: 短信验证码必须为 4 位数字;验证码错误、过期、重复使用,或租户、客户端、场景不匹配时拒绝;携带 validToken、code、uuid、供应商配置等旧字段返回 HTTP 400。
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RVoid'
|
||
/genealogy/app/auth/login:
|
||
post:
|
||
tags: [认证登录]
|
||
summary: APP 密码登录
|
||
security: []
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/PasswordLogin'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/LoginResult'
|
||
'400':
|
||
description: 后端按 APP_PASSWORD_LOGIN 路由的当前激活绑定解析场景;该场景策略要求验证时必须提交匹配的 validToken,不要求验证时 validToken 可为空;请求携带已废弃的 sceneCode 或其他未知字段返回 HTTP 400。
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RVoid'
|
||
/genealogy/app/auth/login/sms:
|
||
post:
|
||
tags: [认证登录]
|
||
summary: APP 短信登录
|
||
security: []
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/SmsLogin'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/LoginResult'
|
||
'400':
|
||
description: 短信验证码必须为 4 位数字;验证码错误、过期、重复使用,或租户、客户端、场景不匹配时拒绝;携带 validToken、code、uuid、供应商配置等旧字段返回 HTTP 400。
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RVoid'
|
||
/genealogy/app/auth/login/wechat:
|
||
post:
|
||
tags: [认证登录]
|
||
summary: APP 微信授权码登录
|
||
description: 请求体只接收微信一次性 code;clientid、tenant-id 只从 Header 读取。未绑定返回 ACCOUNT_BINDING_REQUIRED,服务端不会自动创建重复账号。
|
||
security: []
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/TenantIdHeader'
|
||
requestBody: { $ref: '#/components/requestBodies/WechatCode' }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/WechatLoginResult' }
|
||
/genealogy/app/auth/wechat/bind:
|
||
post:
|
||
tags: [认证登录]
|
||
summary: 当前 APP 用户绑定微信身份
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
requestBody: { $ref: '#/components/requestBodies/WechatCode' }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/VoidResult' }
|
||
/genealogy/app/referrals/me:
|
||
get:
|
||
tags: [认证登录]
|
||
summary: 当前 APP 用户推荐卡
|
||
description: 推荐关系独立于家谱邀请;响应不暴露内部用户 ID。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
responses:
|
||
'200': { $ref: '#/components/responses/ReferralMeResult' }
|
||
/genealogy/app/auth/sms/{operationCode}/code:
|
||
post:
|
||
tags: [认证登录]
|
||
summary: APP 发送短信验证码
|
||
description: operationCode 决定短信业务动作,服务端按对应 APP 路由的激活绑定解析验证场景。策略开启时需提交 validToken,关闭时可为空;前端不得提交 sceneCode 或短信供应商配置 ID。
|
||
security: []
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- name: operationCode
|
||
description: 支持发送短信验证码的 APP 认证业务动作
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: string
|
||
enum: [sms-login, register, forgot-password, phone-change, account-deactivate]
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/SmsCode'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VoidResult'
|
||
'400':
|
||
description: 拒绝原因:票据缺失;票据与租户不匹配(错租户);票据与客户端不匹配(错客户端);票据与场景不匹配(错场景);票据过期;票据已被使用(重复使用);手机号主体不匹配;请求携带供应商配置或历史字段。
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RVoid'
|
||
/genealogy/app/auth/profile:
|
||
get:
|
||
tags: [认证登录]
|
||
summary: APP 当前用户资料
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppProfileResult'
|
||
put:
|
||
tags: [认证登录]
|
||
summary: APP 修改用户资料
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/ProfileUpdate'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppProfileResult'
|
||
/genealogy/app/auth/password:
|
||
put:
|
||
tags: [认证登录]
|
||
summary: APP 修改密码
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/PasswordChange'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VoidResult'
|
||
/genealogy/app/auth/password/reset:
|
||
put:
|
||
tags: [认证登录]
|
||
summary: APP 找回密码
|
||
security: []
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/PasswordReset'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VoidResult'
|
||
'400':
|
||
description: 短信验证码必须为 4 位数字;验证码错误、过期、重复使用,或租户、客户端、场景不匹配时拒绝;携带 validToken、code、uuid、供应商配置等旧字段返回 HTTP 400。
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RVoid'
|
||
/genealogy/app/auth/phone:
|
||
put:
|
||
tags: [认证登录]
|
||
summary: APP 换绑手机号
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/PhoneChange'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/ObjectResult'
|
||
'400':
|
||
description: 短信验证码必须为 4 位数字;验证码错误、过期、重复使用,或租户、客户端、场景不匹配时拒绝;携带 validToken、code、uuid、供应商配置等旧字段返回 HTTP 400。
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RVoid'
|
||
/genealogy/app/auth/account/deactivate:
|
||
post:
|
||
tags: [认证登录]
|
||
summary: APP 注销账号
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/AccountDeactivate'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VoidResult'
|
||
'400':
|
||
description: 短信验证码必须为 4 位数字;验证码错误、过期、重复使用,或租户、客户端、场景不匹配时拒绝;携带 validToken、code、uuid、供应商配置等旧字段返回 HTTP 400。
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RVoid'
|
||
/genealogy/app/auth/logout:
|
||
delete:
|
||
tags: [认证登录]
|
||
summary: APP 退出登录
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VoidResult'
|
||
|
||
/genealogy/app/files/resumable/init:
|
||
post:
|
||
tags: [文件上传]
|
||
summary: APP 分片上传初始化
|
||
description: 所有文件统一使用分片上传;普通小文件可设置为一个分片。返回 instant=true 时直接使用返回的 OSS 信息,跳过分片上传和合并。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/ResumableInit'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/ObjectResult'
|
||
/genealogy/app/files/resumable/chunk:
|
||
post:
|
||
tags: [文件上传]
|
||
summary: APP 上传分片
|
||
description: uploadId 已绑定初始化契约。除最后一片外,分片实际大小必须等于 chunkSize;最后一片必须等于剩余字节数。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/ChunkUpload'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VoidResult'
|
||
/genealogy/app/files/resumable/complete:
|
||
post:
|
||
tags: [文件上传]
|
||
summary: APP 完成分片上传
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/ResumableComplete'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/FileUploadResult'
|
||
/genealogy/app/region/children:
|
||
get:
|
||
tags: [行政区划]
|
||
summary: 查询下级行政区划
|
||
security: []
|
||
parameters:
|
||
- name: parentCode
|
||
description: 父级行政区划编码,不传或传0查省级
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: string
|
||
example: "51"
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/ListResult'
|
||
/genealogy/app/region/path/{regionCode}:
|
||
get:
|
||
tags: [行政区划]
|
||
summary: 查询行政区划路径
|
||
security: []
|
||
parameters:
|
||
- $ref: '#/components/parameters/RegionCode'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/ListResult'
|
||
/genealogy/app/region/search:
|
||
get:
|
||
tags: [行政区划]
|
||
summary: 搜索行政区划
|
||
security: []
|
||
parameters:
|
||
- name: keyword
|
||
description: 搜索关键词,支持地区名称或编码模糊查询
|
||
in: query
|
||
required: true
|
||
schema:
|
||
type: string
|
||
example: 北京
|
||
- name: level
|
||
description: 行政区划级别,1省、2市、3区县、4乡镇街道、5村社区
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
example: 3
|
||
- name: limit
|
||
description: 返回数量上限
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
example: 20
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/ListResult'
|
||
/genealogy/app/region/{regionCode}:
|
||
get:
|
||
tags: [行政区划]
|
||
summary: 查询行政区划详情
|
||
security: []
|
||
parameters:
|
||
- $ref: '#/components/parameters/RegionCode'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/ObjectResult'
|
||
/genealogy/app/site/articles:
|
||
get:
|
||
tags: [官网内容]
|
||
summary: APP 查询官网文章
|
||
security: []
|
||
parameters:
|
||
- name: articleType
|
||
description: 文章类型,不传则查询全部已发布文章
|
||
in: query
|
||
required: false
|
||
schema: { type: string }
|
||
- name: limit
|
||
description: 返回数量上限
|
||
in: query
|
||
required: false
|
||
schema: { type: integer }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/AppArticleListResult' }
|
||
/genealogy/app/site/pages/{pageKey}:
|
||
get:
|
||
tags: [官网内容]
|
||
summary: APP 查询官网单页
|
||
security: []
|
||
parameters:
|
||
- name: pageKey
|
||
description: 单页唯一标识
|
||
in: path
|
||
required: true
|
||
schema: { type: string }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/ObjectResult' }
|
||
|
||
/genealogy/app/genealogies:
|
||
post:
|
||
tags: [家谱]
|
||
summary: APP 创建家谱
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/GenealogyCreate'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppGenealogyResult'
|
||
/genealogy/app/genealogies/mine:
|
||
get:
|
||
tags: [家谱]
|
||
summary: APP 我的家谱
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppGenealogyListResult'
|
||
/genealogy/app/genealogies/mine/order:
|
||
put:
|
||
tags: [家谱]
|
||
summary: APP 保存我的家谱排序
|
||
description: 必须提交当前可见家谱的完整、无重复编号集合;保存后返回后端确认的精确顺序。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/GenealogyUserOrder'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppGenealogyListResult'
|
||
/genealogy/app/genealogies/quota:
|
||
get:
|
||
tags: [家谱]
|
||
summary: APP 查询当前用户家谱配额
|
||
description: 查询已创建和已加入的家谱数量、上限、剩余额度及是否还能继续操作。加入总数包含自己创建的家谱;limit 和 remaining 为 -1 时表示不限。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/GenealogyQuotaResult'
|
||
/genealogy/app/genealogies/public:
|
||
get:
|
||
tags: [家谱]
|
||
summary: APP 公开家谱
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppGenealogyListResult'
|
||
/genealogy/app/genealogies/options:
|
||
get:
|
||
tags: [家谱]
|
||
summary: APP 家谱下拉选项
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/ListResult'
|
||
/genealogy/app/genealogies/{genealogyId}:
|
||
get:
|
||
tags: [家谱]
|
||
summary: APP 家谱详情
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppGenealogyResult'
|
||
put:
|
||
tags: [家谱]
|
||
summary: APP 修改家谱
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/GenealogyUpdate'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppGenealogyResult'
|
||
/genealogy/app/genealogies/{genealogyId}/overview:
|
||
get:
|
||
tags: [家谱]
|
||
summary: APP 家谱概览
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/ObjectResult'
|
||
/genealogy/app/genealogies/{genealogyId}/completeness:
|
||
get:
|
||
tags: [家谱]
|
||
summary: APP 查询家谱资料完整度
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/GenealogyCompletenessResult'
|
||
/genealogy/app/genealogies/{genealogyId}/archive:
|
||
put:
|
||
tags: [家谱]
|
||
summary: APP 归档家谱
|
||
description: 仅谱主可操作;归档后家谱保持可读,内容写入被拒绝。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppGenealogyResult'
|
||
/genealogy/app/genealogies/{genealogyId}/restore:
|
||
put:
|
||
tags: [家谱]
|
||
summary: APP 恢复已归档家谱
|
||
description: 仅谱主可恢复;处于物理删除任务中的家谱不能恢复。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppGenealogyResult'
|
||
/genealogy/app/genealogies/{genealogyId}/join-applies:
|
||
post:
|
||
tags: [家谱]
|
||
summary: APP 申请加入家谱
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/GenealogyJoinApply'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/ObjectResult'
|
||
/genealogy/app/genealogies/{genealogyId}/invitations:
|
||
post:
|
||
tags: [家谱邀请]
|
||
summary: APP 签发一次性家谱邀请
|
||
description: 仅当前家谱有效成员可签发;原始 token 只在本次响应返回,有效期默认 7 天。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema: { $ref: '#/components/schemas/GenealogyInvitationIssueBody' }
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/GenealogyInvitationResult'
|
||
/genealogy/app/genealogies/invitations/preview:
|
||
get:
|
||
tags: [家谱邀请]
|
||
summary: APP 预览家谱邀请
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- name: token
|
||
in: query
|
||
required: true
|
||
schema: { type: string, maxLength: 128 }
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/GenealogyInvitationResult'
|
||
/genealogy/app/genealogies/invitations/redeem:
|
||
post:
|
||
tags: [家谱邀请]
|
||
summary: APP 兑换家谱邀请
|
||
description: 邀请只可成功兑换一次;结果服从家谱加入模式,服务端从 token 推导邀请人。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/GenealogyInvitationRedeemBody'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/GenealogyInvitationResult'
|
||
/genealogy/app/genealogies/invitations/mine:
|
||
get:
|
||
tags: [家谱邀请]
|
||
summary: APP 我的家谱邀请记录
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/GenealogyInvitationListResult'
|
||
/genealogy/app/genealogies/invitations/{inviteId}:
|
||
delete:
|
||
tags: [家谱邀请]
|
||
summary: APP 撤销本人发出的未使用邀请
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- name: inviteId
|
||
in: path
|
||
required: true
|
||
schema: { type: integer, format: int64 }
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VoidResult'
|
||
/genealogy/app/genealogies/join-applies/mine:
|
||
get:
|
||
tags: [家谱]
|
||
summary: APP 我的加入申请
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/ListResult'
|
||
/genealogy/app/genealogies/{genealogyId}/join-applies/pending:
|
||
get:
|
||
tags: [家谱]
|
||
summary: APP 待审核加入申请
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/ListResult'
|
||
/genealogy/app/genealogies/{genealogyId}/join-applies/{applyId}/audit:
|
||
put:
|
||
tags: [家谱]
|
||
summary: APP 审核加入申请
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: applyId
|
||
description: 加入家谱申请ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/GenealogyJoinAudit'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VoidResult'
|
||
/genealogy/app/genealogies/join-applies/{applyId}:
|
||
delete:
|
||
tags: [家谱]
|
||
summary: APP 撤销加入申请
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- name: applyId
|
||
description: 加入家谱申请ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VoidResult'
|
||
|
||
/genealogy/app/genealogies/{genealogyId}/members:
|
||
get:
|
||
tags: [家谱成员]
|
||
summary: APP 家谱成员列表
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppGenealogyMemberListResult'
|
||
/genealogy/app/genealogies/{genealogyId}/members/options:
|
||
get:
|
||
tags: [家谱成员]
|
||
summary: APP 家谱成员选项
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/GenealogyMemberOptionListResult'
|
||
/genealogy/app/genealogies/{genealogyId}/members/{memberId}:
|
||
put:
|
||
tags: [家谱成员]
|
||
summary: APP 修改成员
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/MemberId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/GenealogyMemberUpdate'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppGenealogyMemberResult'
|
||
delete:
|
||
tags: [家谱成员]
|
||
summary: APP 移除成员
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/MemberId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VoidResult'
|
||
/genealogy/app/genealogies/{genealogyId}/members/{memberId}/lineage-person:
|
||
delete:
|
||
tags: [家谱成员]
|
||
summary: APP 解除成员与世系人物绑定
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/MemberId'
|
||
responses:
|
||
'200': { $ref: '#/components/responses/VoidResult' }
|
||
/genealogy/app/genealogies/{genealogyId}/members/me:
|
||
delete:
|
||
tags: [家谱成员]
|
||
summary: APP 退出家谱
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VoidResult'
|
||
/genealogy/app/genealogies/{genealogyId}/members/owner-transfer:
|
||
put:
|
||
tags: [家谱成员]
|
||
summary: APP 转让家谱所有者
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/GenealogyOwnerTransfer'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VoidResult'
|
||
|
||
/genealogy/app/genealogies/{genealogyId}/generation-poems:
|
||
get:
|
||
tags: [字辈谱]
|
||
summary: APP 查询正常字辈谱
|
||
description: 对可查看家谱的业务用户开放;仅返回正常状态字辈,供世系人物录入和展示使用。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/GenerationPoemListResult'
|
||
post:
|
||
tags: [字辈谱]
|
||
summary: APP 新增字辈
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/GenerationPoem'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/GenerationPoemResult'
|
||
/genealogy/app/genealogies/{genealogyId}/generation-poems/management:
|
||
get:
|
||
tags: [字辈谱]
|
||
summary: APP 查询字辈维护列表
|
||
description: 仅家谱内容编辑者可访问,返回正常和停用字辈,用于恢复、纠错和排序调整。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/GenerationPoemListResult'
|
||
/genealogy/app/genealogies/{genealogyId}/generation-poems/batch/preview:
|
||
post:
|
||
tags: [字辈谱]
|
||
summary: APP 批量字辈预览
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/GenerationPoemBatch'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/GenerationPoemBatchPreviewResult'
|
||
/genealogy/app/genealogies/{genealogyId}/generation-poems/batch/save:
|
||
post:
|
||
tags: [字辈谱]
|
||
summary: APP 批量保存字辈
|
||
description: 保存时会重新按当前数据生成差异;停用不删除历史字辈记录。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/GenerationPoemBatch'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VoidResult'
|
||
/genealogy/app/genealogies/{genealogyId}/generation-poems/{poemId}:
|
||
put:
|
||
tags: [字辈谱]
|
||
summary: APP 修改、停用或恢复字辈
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: poemId
|
||
description: 字辈记录ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/GenerationPoem'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/GenerationPoemResult'
|
||
|
||
/genealogy/app/genealogies/{genealogyId}/lineage/persons:
|
||
get:
|
||
tags: [世系人物]
|
||
summary: APP 世系人物列表
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/LineagePersonListResult'
|
||
post:
|
||
tags: [世系人物]
|
||
summary: APP 新增世系人物
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/LineagePerson'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/LineagePersonDetailResult'
|
||
/genealogy/app/genealogies/{genealogyId}/lineage/persons/page:
|
||
get:
|
||
tags: [世系人物]
|
||
summary: APP 世系人物分页
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/PageNum'
|
||
- $ref: '#/components/parameters/PageSize'
|
||
- name: keyword
|
||
description: 姓名、别名或人物编号关键词
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: string
|
||
- name: generation
|
||
description: 世代序号
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
- name: personStatus
|
||
description: "字典 gen_lineage_person_status:0=健在,1=已故,2=未知"
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: string
|
||
enum: ["0", "1", "2"]
|
||
example: "0"
|
||
x-dict-type: gen_lineage_person_status
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/LineagePersonPageResult'
|
||
/genealogy/app/genealogies/{genealogyId}/lineage/persons/options:
|
||
get:
|
||
tags: [世系人物]
|
||
summary: APP 世系人物选项
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: keyword
|
||
description: 姓名、别名或人物编号关键词
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: string
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/LineagePersonListResult'
|
||
/genealogy/app/genealogies/{genealogyId}/lineage/ranks:
|
||
get:
|
||
tags: [世系人物]
|
||
summary: APP 世系人物排行选项
|
||
description: 按当前家谱、世代和性别返回可用排行。第一世可返回“始祖”,其他世代返回“长子、次子、长女、次女”等配置。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: generation
|
||
description: 世代序号
|
||
in: query
|
||
required: true
|
||
schema: { type: integer, format: int64, minimum: 1, example: 2 }
|
||
- name: sex
|
||
description: "字典 sys_user_sex:0=男,1=女,2=未知"
|
||
in: query
|
||
required: true
|
||
schema: { type: string, enum: ["0", "1", "2"], example: "0", x-dict-type: sys_user_sex }
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/LineageRankOptionListResult'
|
||
/genealogy/app/genealogies/{genealogyId}/lineage/tree:
|
||
get:
|
||
tags: [世系人物]
|
||
summary: APP 世系树
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/LineagePersonTreeResult'
|
||
/genealogy/app/genealogies/{genealogyId}/lineage/persons/{personId}:
|
||
get:
|
||
tags: [世系人物]
|
||
summary: APP 世系人物详情
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/PersonId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/LineagePersonDetailResult'
|
||
put:
|
||
tags: [世系人物]
|
||
summary: APP 修改世系人物
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/PersonId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/LineagePerson'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/LineagePersonDetailResult'
|
||
delete:
|
||
tags: [世系人物]
|
||
summary: APP 停用世系人物
|
||
description: 逻辑停用人物,不执行物理删除;存在正常子女时拒绝停用。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/PersonId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VoidResult'
|
||
/genealogy/app/genealogies/{genealogyId}/lineage/persons/{personId}/sensitive-profile:
|
||
get:
|
||
tags: [世系人物]
|
||
summary: APP 读取世系人物敏感健康资料
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/PersonId'
|
||
responses:
|
||
'200': { $ref: '#/components/responses/LineagePersonSensitiveProfileResult' }
|
||
put:
|
||
tags: [世系人物]
|
||
summary: APP 保存世系人物敏感健康资料
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/PersonId'
|
||
requestBody: { $ref: '#/components/requestBodies/LineagePersonSensitiveProfile' }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/LineagePersonSensitiveProfileResult' }
|
||
delete:
|
||
tags: [世系人物]
|
||
summary: APP 清空世系人物敏感健康资料
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/PersonId'
|
||
responses:
|
||
'200': { $ref: '#/components/responses/LineagePersonSensitiveProfileResult' }
|
||
/genealogy/app/genealogies/{genealogyId}/lineage/persons/{personId}/relations:
|
||
delete:
|
||
tags: [世系人物]
|
||
summary: APP 删除指定世系关系
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/PersonId'
|
||
requestBody: { $ref: '#/components/requestBodies/LineageRelationRemove' }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/VoidResult' }
|
||
/genealogy/app/genealogies/{genealogyId}/permission-catalog:
|
||
get:
|
||
tags: [家谱成员]
|
||
summary: APP 查询家谱管理员权限目录
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200': { $ref: '#/components/responses/GenealogyMemberPermissionCatalogListResult' }
|
||
/genealogy/app/genealogies/{genealogyId}/members/{memberId}/permissions:
|
||
get:
|
||
tags: [家谱成员]
|
||
summary: APP 查询家谱管理员权限
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/MemberId'
|
||
responses:
|
||
'200': { $ref: '#/components/responses/GenealogyMemberPermissionResult' }
|
||
put:
|
||
tags: [家谱成员]
|
||
summary: APP 完整替换家谱管理员权限
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/MemberId'
|
||
requestBody: { $ref: '#/components/requestBodies/GenealogyMemberPermission' }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/GenealogyMemberPermissionResult' }
|
||
/genealogy/app/genealogies/{genealogyId}/lineage/persons/{personId}/sort-order:
|
||
put:
|
||
tags: [世系人物]
|
||
summary: APP 调整世系人物排行
|
||
description: 仅家谱所有者或管理员可调用,只更新 sortOrder。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/PersonId'
|
||
requestBody: { $ref: '#/components/requestBodies/LineagePersonSortOrder' }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/LineagePersonResult' }
|
||
/genealogy/app/genealogies/{genealogyId}/lineage/persons/{personId}/children:
|
||
post:
|
||
tags: [世系人物]
|
||
summary: APP 给人物添加子女
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/PersonId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/LineagePerson'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/LineagePersonResult'
|
||
/genealogy/app/genealogies/{genealogyId}/lineage/persons/{personId}/parents:
|
||
post:
|
||
tags: [世系人物]
|
||
summary: APP 给人物添加父母
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/PersonId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/LineagePerson'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/LineagePersonResult'
|
||
/genealogy/app/genealogies/{genealogyId}/lineage/persons/{personId}/siblings:
|
||
post:
|
||
tags: [世系人物]
|
||
summary: APP 给人物添加兄弟姐妹
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/PersonId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/LineagePerson'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/LineagePersonResult'
|
||
/genealogy/app/genealogies/{genealogyId}/lineage/persons/{personId}/spouses:
|
||
post:
|
||
tags: [世系人物]
|
||
summary: APP 给人物添加配偶
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/PersonId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/LineagePerson'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/LineagePersonResult'
|
||
|
||
/genealogy/app/genealogies/{genealogyId}/feeds:
|
||
get:
|
||
tags: [家族圈]
|
||
summary: APP 家族圈动态列表
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/FamilyFeedListResult'
|
||
post:
|
||
tags: [家族圈]
|
||
summary: APP 发布家族圈动态
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/FamilyFeed'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/FamilyFeedResult'
|
||
/genealogy/app/genealogies/{genealogyId}/feeds/page:
|
||
get:
|
||
tags: [家族圈]
|
||
summary: APP 家族圈动态分页
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/PageNum'
|
||
- $ref: '#/components/parameters/PageSize'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/FamilyFeedPageResult'
|
||
/genealogy/app/genealogies/{genealogyId}/feeds/{feedId}:
|
||
get:
|
||
tags: [家族圈]
|
||
summary: APP 家族圈动态详情
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/FeedId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/FamilyFeedResult'
|
||
put:
|
||
tags: [家族圈]
|
||
summary: APP 修改家族圈动态
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/FeedId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/FamilyFeed'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/FamilyFeedResult'
|
||
delete:
|
||
tags: [家族圈]
|
||
summary: APP 删除家族圈动态
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/FeedId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VoidResult'
|
||
/genealogy/app/genealogies/{genealogyId}/feeds/{feedId}/likes:
|
||
post:
|
||
tags: [家族圈]
|
||
summary: APP 点赞动态
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/FeedId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VoidResult'
|
||
delete:
|
||
tags: [家族圈]
|
||
summary: APP 取消点赞动态
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/FeedId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VoidResult'
|
||
/genealogy/app/genealogies/{genealogyId}/feeds/{feedId}/comments:
|
||
get:
|
||
tags: [家族圈]
|
||
summary: APP 动态一级评论列表
|
||
description: 仅返回正常展示的一级评论;每条评论的 replyCount 为正常展示的直接回复数量。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/FeedId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/FamilyFeedCommentListResult'
|
||
post:
|
||
tags: [家族圈]
|
||
summary: APP 评论动态
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/FeedId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/FamilyFeedComment'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/FamilyFeedCommentResult'
|
||
/genealogy/app/genealogies/{genealogyId}/feeds/{feedId}/comments/page:
|
||
get:
|
||
tags: [家族圈]
|
||
summary: APP 动态一级评论分页
|
||
description: 仅返回正常展示的一级评论;展开回复时请调用 replies 接口。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/FeedId'
|
||
- $ref: '#/components/parameters/PageNum'
|
||
- $ref: '#/components/parameters/PageSize'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/FamilyFeedCommentPageResult'
|
||
/genealogy/app/genealogies/{genealogyId}/feeds/{feedId}/comments/{commentId}/replies:
|
||
get:
|
||
tags: [家族圈]
|
||
summary: APP 获取评论的直接回复列表
|
||
description: 仅返回指定正常评论的正常展示直接回复;回复的 replyCount 可用于继续按需展开下一层。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/FeedId'
|
||
- name: commentId
|
||
description: 父评论 ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/FamilyFeedCommentListResult'
|
||
/genealogy/app/genealogies/{genealogyId}/feeds/{feedId}/comments/{commentId}/replies/page:
|
||
get:
|
||
tags: [家族圈]
|
||
summary: APP 分页获取评论的直接回复
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/FeedId'
|
||
- name: commentId
|
||
description: 父评论 ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
- $ref: '#/components/parameters/PageNum'
|
||
- $ref: '#/components/parameters/PageSize'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/FamilyFeedCommentPageResult'
|
||
/genealogy/app/genealogies/{genealogyId}/feeds/{feedId}/comments/{commentId}:
|
||
delete:
|
||
tags: [家族圈]
|
||
summary: APP 删除本人动态评论;有回复时保留删除占位
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- $ref: '#/components/parameters/FeedId'
|
||
- name: commentId
|
||
description: 评论ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VoidResult'
|
||
|
||
/genealogy/app/genealogies/{genealogyId}/article-categories:
|
||
get:
|
||
tags: [内容文章]
|
||
summary: APP 谱文分类
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppArticleCategoryOptionListResult'
|
||
post:
|
||
tags: [内容文章]
|
||
summary: APP 新增谱文分类
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/ArticleCategory'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppArticleCategoryResult'
|
||
/genealogy/app/genealogies/{genealogyId}/article-categories/{categoryId}:
|
||
put:
|
||
tags: [内容文章]
|
||
summary: APP 修改谱文分类
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: categoryId
|
||
description: 谱文分类ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/ArticleCategory'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppArticleCategoryResult'
|
||
/genealogy/app/genealogies/{genealogyId}/articles:
|
||
get:
|
||
tags: [内容文章]
|
||
summary: APP 谱文列表
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppArticleListResult'
|
||
post:
|
||
tags: [内容文章]
|
||
summary: APP 新增谱文
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/Article'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppArticleResult'
|
||
/genealogy/app/genealogies/{genealogyId}/articles/{articleId}:
|
||
get:
|
||
tags: [内容文章]
|
||
summary: APP 谱文详情
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: X-Content-Access-Token, in: header, required: false, schema: { type: string }, description: 内容密码解锁后获得的短时访问令牌 }
|
||
- name: articleId
|
||
description: 谱文/官网文章ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppArticleResult'
|
||
put:
|
||
tags: [内容文章]
|
||
summary: APP 修改谱文
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: articleId
|
||
description: 谱文/官网文章ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/Article'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppArticleResult'
|
||
delete:
|
||
tags: [内容文章]
|
||
summary: APP 删除谱文
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: articleId
|
||
description: 要删除的谱文ID
|
||
in: path
|
||
required: true
|
||
schema: { type: integer, format: int64 }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/VoidResult' }
|
||
/genealogy/app/help-articles:
|
||
get:
|
||
tags: [内容文章]
|
||
summary: APP 帮助文章列表
|
||
security: []
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/HelpArticleListResult'
|
||
/genealogy/app/help-articles/{helpId}:
|
||
get:
|
||
tags: [内容文章]
|
||
summary: APP 帮助文章详情
|
||
security: []
|
||
parameters:
|
||
- name: helpId
|
||
description: 帮助文章ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/HelpArticleResult'
|
||
/genealogy/app/promotions:
|
||
get:
|
||
tags: [内容文章]
|
||
summary: APP 应用推广列表
|
||
security: []
|
||
parameters:
|
||
- name: platform
|
||
in: query
|
||
required: true
|
||
description: 客户端平台;all 仅供后台投放配置,客户端请求应传自身平台
|
||
schema: { type: string, enum: [app, pc, wechat] }
|
||
- name: placement
|
||
in: query
|
||
required: true
|
||
description: 推广位稳定编码
|
||
schema: { type: string, enum: [home_banner, home_bottom, message_bottom, profile_bottom] }
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppPromotionListResult'
|
||
|
||
/genealogy/app/genealogies/{genealogyId}/content-lifecycle/{resourceType}/{resourceId}:
|
||
get:
|
||
tags: [内容生命周期]
|
||
summary: APP 查询内容生命周期状态
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: resourceType, in: path, required: true, schema: { type: string, enum: [family_feed, video, growth_record, relative_record, memo, merit_record, article, album, album_photo, ceremony] } }
|
||
- { name: resourceId, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/ContentLifecycleStatusResult' }
|
||
/genealogy/app/genealogies/{genealogyId}/content-lifecycle/{resourceType}/{resourceId}/restore:
|
||
put:
|
||
tags: [内容生命周期]
|
||
summary: APP 恢复停用内容
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: resourceType, in: path, required: true, schema: { type: string, enum: [family_feed, video, growth_record, relative_record, memo, merit_record, article, album, album_photo, ceremony] } }
|
||
- { name: resourceId, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/ContentLifecycleStatusResult' }
|
||
|
||
/genealogy/app/genealogies/{genealogyId}/albums:
|
||
get:
|
||
tags: [相册]
|
||
summary: APP 相册列表
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppAlbumListResult'
|
||
post:
|
||
tags: [相册]
|
||
summary: APP 创建相册
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/Album'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppAlbumResult'
|
||
/genealogy/app/genealogies/{genealogyId}/albums/{albumId}:
|
||
put:
|
||
tags: [相册]
|
||
summary: APP 修改相册
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: albumId
|
||
description: 相册ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/Album'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppAlbumResult'
|
||
delete:
|
||
tags: [相册]
|
||
summary: APP 删除相册
|
||
description: 逻辑删除相册及其照片,并释放封面和照片文件引用。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: albumId
|
||
description: 要删除的相册ID
|
||
in: path
|
||
required: true
|
||
schema: { type: integer, format: int64 }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/VoidResult' }
|
||
/genealogy/app/genealogies/{genealogyId}/albums/{albumId}/photos:
|
||
get:
|
||
tags: [相册]
|
||
summary: APP 相册图片列表
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: albumId
|
||
description: 相册ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppAlbumPhotoListResult'
|
||
post:
|
||
tags: [相册]
|
||
summary: APP 上传相册图片记录
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: albumId
|
||
description: 相册ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/AlbumPhoto'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppAlbumPhotoResult'
|
||
/genealogy/app/genealogies/{genealogyId}/albums/{albumId}/photos/{photoId}:
|
||
delete:
|
||
tags: [相册]
|
||
summary: APP 删除单张相册图片
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: albumId
|
||
description: 相册ID
|
||
in: path
|
||
required: true
|
||
schema: { type: integer, format: int64 }
|
||
- name: photoId
|
||
description: 要删除的相册图片ID
|
||
in: path
|
||
required: true
|
||
schema: { type: integer, format: int64 }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/VoidResult' }
|
||
|
||
/genealogy/app/genealogies/{genealogyId}/videos:
|
||
get:
|
||
tags: [视频]
|
||
summary: APP 视频列表
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200': { $ref: '#/components/responses/AppVideoListResult' }
|
||
post:
|
||
tags: [视频]
|
||
summary: APP 新增视频
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/Video'
|
||
responses:
|
||
'200': { $ref: '#/components/responses/AppVideoResult' }
|
||
/genealogy/app/genealogies/{genealogyId}/videos/{videoId}:
|
||
get:
|
||
tags: [视频]
|
||
summary: APP 视频详情
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: videoId
|
||
description: 视频ID
|
||
in: path
|
||
required: true
|
||
schema: { type: integer, format: int64 }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/AppVideoResult' }
|
||
put:
|
||
tags: [视频]
|
||
summary: APP 修改视频
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: videoId
|
||
description: 视频ID
|
||
in: path
|
||
required: true
|
||
schema: { type: integer, format: int64 }
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/Video'
|
||
responses:
|
||
'200': { $ref: '#/components/responses/AppVideoResult' }
|
||
delete:
|
||
tags: [视频]
|
||
summary: APP 删除视频
|
||
description: 逻辑删除视频,并释放视频文件和封面文件引用。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: videoId
|
||
description: 要删除的视频ID
|
||
in: path
|
||
required: true
|
||
schema: { type: integer, format: int64 }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/VoidResult' }
|
||
|
||
/genealogy/app/genealogies/{genealogyId}/ceremonies:
|
||
get:
|
||
tags: [祭祀]
|
||
summary: APP 祭祀列表
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppCeremonyListResult'
|
||
post:
|
||
tags: [祭祀]
|
||
summary: APP 创建祭祀
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/Ceremony'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppCeremonyResult'
|
||
/genealogy/app/genealogies/{genealogyId}/ceremonies/{ceremonyId}:
|
||
get:
|
||
tags: [祭祀]
|
||
summary: APP 祭祀详情
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: ceremonyId
|
||
description: 祭祀/活动ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppCeremonyResult'
|
||
delete:
|
||
tags: [祭祀]
|
||
summary: APP 删除祭祀活动
|
||
description: 逻辑删除祭祀活动及其祭品,并释放活动封面文件引用。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: ceremonyId
|
||
description: 要删除的祭祀活动ID
|
||
in: path
|
||
required: true
|
||
schema: { type: integer, format: int64 }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/VoidResult' }
|
||
put:
|
||
tags: [祭祀]
|
||
summary: APP 修改祭祀
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: ceremonyId
|
||
description: 祭祀/活动ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/Ceremony'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppCeremonyResult'
|
||
/genealogy/app/genealogies/{genealogyId}/ceremonies/{ceremonyId}/gifts:
|
||
get:
|
||
tags: [祭祀]
|
||
summary: APP 祭祀献礼列表
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: ceremonyId
|
||
description: 祭祀/活动ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppCeremonyGiftListResult'
|
||
post:
|
||
tags: [祭祀]
|
||
summary: APP 新增祭祀献礼
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: ceremonyId
|
||
description: 祭祀/活动ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/CeremonyGift'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppCeremonyGiftResult'
|
||
/genealogy/app/genealogies/{genealogyId}/ceremonies/{ceremonyId}/gifts/{giftId}:
|
||
delete:
|
||
tags: [祭祀]
|
||
summary: APP 删除单条祭品
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: ceremonyId
|
||
description: 祭祀活动ID
|
||
in: path
|
||
required: true
|
||
schema: { type: integer, format: int64 }
|
||
- name: giftId
|
||
description: 要删除的祭品ID
|
||
in: path
|
||
required: true
|
||
schema: { type: integer, format: int64 }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/VoidResult' }
|
||
|
||
/genealogy/app/genealogies/{genealogyId}/ceremonies/{ceremonyId}/invitee-options:
|
||
get:
|
||
tags: [贺礼邀约]
|
||
summary: APP 查询可邀请成员候选
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: ceremonyId, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
- { name: keyword, in: query, required: false, schema: { type: string } }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/CeremonyInviteeOptionListResult' }
|
||
/genealogy/app/genealogies/{genealogyId}/ceremonies/{ceremonyId}/invitees:
|
||
put:
|
||
tags: [贺礼邀约]
|
||
summary: APP 替换活动受邀人
|
||
description: 使用完整名单替换当前待响应受邀人;仅家谱内容管理员可操作,受邀人必须是同一家谱的正常成员。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: ceremonyId, description: 贺礼活动ID, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/CeremonyInvitees'
|
||
responses:
|
||
'200': { $ref: '#/components/responses/CeremonyInvitationListResult' }
|
||
/genealogy/app/genealogies/{genealogyId}/ceremonies/{ceremonyId}/invitations:
|
||
get:
|
||
tags: [贺礼邀约]
|
||
summary: APP 查询活动邀请名单
|
||
description: 查询受邀人及其待响应、接受、拒绝或取消状态,仅家谱内容管理员可见。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: ceremonyId, description: 贺礼活动ID, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/CeremonyInvitationListResult' }
|
||
/genealogy/app/genealogies/{genealogyId}/ceremonies/{ceremonyId}/invitations/me:
|
||
put:
|
||
tags: [贺礼邀约]
|
||
summary: APP 响应当前用户的活动邀请
|
||
description: 当前登录用户接受或拒绝自己的待响应邀请,不能代替其他用户操作。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: ceremonyId, description: 贺礼活动ID, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/CeremonyInvitationResponse'
|
||
responses:
|
||
'200': { $ref: '#/components/responses/CeremonyInvitationResult' }
|
||
/genealogy/app/genealogies/ceremony-invitations/mine:
|
||
get:
|
||
tags: [贺礼邀约]
|
||
summary: APP 查询我的活动邀请
|
||
description: 查询当前租户下发给当前业务用户且活动仍正常的邀请。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
responses:
|
||
'200': { $ref: '#/components/responses/CeremonyInvitationListResult' }
|
||
|
||
/genealogy/app/genealogies/{genealogyId}/growth-records:
|
||
get:
|
||
tags: [族务记录]
|
||
summary: APP 成长记录列表
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppGrowthRecordListResult'
|
||
post:
|
||
tags: [族务记录]
|
||
summary: APP 新增成长记录
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/GrowthRecord'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppGrowthRecordResult'
|
||
/genealogy/app/genealogies/{genealogyId}/growth-records/{recordId}:
|
||
get:
|
||
tags: [族务记录]
|
||
summary: APP 成长记录详情
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: X-Content-Access-Token, in: header, required: false, schema: { type: string }, description: 内容密码解锁后获得的短时访问令牌 }
|
||
- name: recordId
|
||
description: 记录ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppGrowthRecordResult'
|
||
delete:
|
||
tags: [族务记录]
|
||
summary: APP 删除成长记录
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: recordId
|
||
description: 要删除的成长记录ID
|
||
in: path
|
||
required: true
|
||
schema: { type: integer, format: int64 }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/VoidResult' }
|
||
put:
|
||
tags: [族务记录]
|
||
summary: APP 修改成长记录
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: recordId
|
||
description: 记录ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/GrowthRecord'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppGrowthRecordResult'
|
||
/genealogy/app/genealogies/{genealogyId}/lineage-persons/{lineagePersonId}/life-events:
|
||
get:
|
||
tags: [人生大事]
|
||
summary: APP 查询世系人物人生大事
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: lineagePersonId, description: 世系人物ID, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/LifeEventListResult' }
|
||
post:
|
||
tags: [人生大事]
|
||
summary: APP 新增世系人物人生大事
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: lineagePersonId, description: 世系人物ID, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/LifeEvent'
|
||
responses:
|
||
'200': { $ref: '#/components/responses/LifeEventResult' }
|
||
/genealogy/app/genealogies/{genealogyId}/lineage-persons/{lineagePersonId}/life-events/{eventId}:
|
||
get:
|
||
tags: [人生大事]
|
||
summary: APP 查询人生大事详情
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: lineagePersonId, description: 世系人物ID, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
- { name: eventId, description: 人生大事ID, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/LifeEventResult' }
|
||
put:
|
||
tags: [人生大事]
|
||
summary: APP 修改世系人物人生大事
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: lineagePersonId, description: 世系人物ID, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
- { name: eventId, description: 人生大事ID, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/LifeEvent'
|
||
responses:
|
||
'200': { $ref: '#/components/responses/LifeEventResult' }
|
||
delete:
|
||
tags: [人生大事]
|
||
summary: APP 删除世系人物人生大事
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: lineagePersonId, description: 世系人物ID, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
- { name: eventId, description: 人生大事ID, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/VoidResult' }
|
||
/genealogy/app/genealogies/{genealogyId}/memos:
|
||
get:
|
||
tags: [族务记录]
|
||
summary: APP 备忘录列表
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppMemoListResult'
|
||
post:
|
||
tags: [族务记录]
|
||
summary: APP 新增备忘录
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/Memo'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppMemoResult'
|
||
/genealogy/app/genealogies/{genealogyId}/memos/{memoId}:
|
||
get:
|
||
tags: [族务记录]
|
||
summary: APP 备忘录详情
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: memoId
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppMemoResult'
|
||
delete:
|
||
tags: [族务记录]
|
||
summary: APP 删除备忘录
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: memoId
|
||
description: 要删除的备忘录ID
|
||
in: path
|
||
required: true
|
||
schema: { type: integer, format: int64 }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/VoidResult' }
|
||
put:
|
||
tags: [族务记录]
|
||
summary: APP 修改备忘录
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: memoId
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/Memo'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppMemoResult'
|
||
|
||
/genealogy/app/genealogies/{genealogyId}/relative-records:
|
||
get:
|
||
tags: [族务记录]
|
||
summary: APP 亲友记录列表
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200': { $ref: '#/components/responses/AppRelativeRecordListResult' }
|
||
post:
|
||
tags: [族务记录]
|
||
summary: APP 新增亲友记录
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/RelativeRecord'
|
||
responses:
|
||
'200': { $ref: '#/components/responses/AppRelativeRecordResult' }
|
||
/genealogy/app/genealogies/{genealogyId}/relative-records/{relativeId}:
|
||
get:
|
||
tags: [族务记录]
|
||
summary: APP 亲友记录详情
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: relativeId, description: 亲友记录ID, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/AppRelativeRecordResult' }
|
||
put:
|
||
tags: [族务记录]
|
||
summary: APP 修改亲友记录
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: relativeId, description: 亲友记录ID, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/RelativeRecord'
|
||
responses:
|
||
'200': { $ref: '#/components/responses/AppRelativeRecordResult' }
|
||
delete:
|
||
tags: [族务记录]
|
||
summary: APP 删除亲友记录
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: relativeId
|
||
description: 要删除的亲友记录ID
|
||
in: path
|
||
required: true
|
||
schema: { type: integer, format: int64 }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/VoidResult' }
|
||
/genealogy/app/genealogies/{genealogyId}/merit-records:
|
||
get:
|
||
tags: [族务记录]
|
||
summary: APP 功德记录列表
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppMeritRecordListResult'
|
||
post:
|
||
tags: [族务记录]
|
||
summary: APP 新增功德记录
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/MeritRecord'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppMeritRecordResult'
|
||
/genealogy/app/genealogies/{genealogyId}/merit-records/{meritId}:
|
||
get:
|
||
tags: [族务记录]
|
||
summary: APP 功德记录详情
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: meritId
|
||
description: 功德记录ID
|
||
in: path
|
||
required: true
|
||
schema: { type: integer, format: int64 }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/AppMeritRecordResult' }
|
||
put:
|
||
tags: [族务记录]
|
||
summary: APP 修改功德记录
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: meritId
|
||
description: 功德记录ID
|
||
in: path
|
||
required: true
|
||
schema: { type: integer, format: int64 }
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/MeritRecord'
|
||
responses:
|
||
'200': { $ref: '#/components/responses/AppMeritRecordResult' }
|
||
delete:
|
||
tags: [族务记录]
|
||
summary: APP 删除功德记录
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- name: meritId
|
||
description: 要删除的功德记录ID
|
||
in: path
|
||
required: true
|
||
schema: { type: integer, format: int64 }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/VoidResult' }
|
||
|
||
/genealogy/app/notifications:
|
||
get:
|
||
tags: [消息通知]
|
||
summary: APP 消息通知列表
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- name: readStatus
|
||
description: "字典 gen_notification_read_status:0=未读,1=已读;不传则查询全部"
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: string
|
||
enum: ['0', '1']
|
||
example: "0"
|
||
x-dict-type: gen_notification_read_status
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppNotificationListResult'
|
||
/genealogy/app/notifications/{notificationId}:
|
||
get:
|
||
tags: [消息通知]
|
||
summary: APP 消息通知详情
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- name: notificationId
|
||
description: 通知ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/AppNotificationResult'
|
||
/genealogy/app/notifications/{notificationId}/read:
|
||
post:
|
||
tags: [消息通知]
|
||
summary: APP 标记通知已读
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- name: notificationId
|
||
description: 通知ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VoidResult'
|
||
/genealogy/app/notifications/unread-count:
|
||
get:
|
||
tags: [消息通知]
|
||
summary: APP 查询未读通知数量
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/LongResult'
|
||
/genealogy/app/notifications/read-all:
|
||
post:
|
||
tags: [消息通知]
|
||
summary: APP 全部标记已读
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VoidResult'
|
||
/genealogy/app/feedback:
|
||
get:
|
||
tags: [意见反馈]
|
||
summary: APP 我的反馈列表
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/ListResult'
|
||
post:
|
||
tags: [意见反馈]
|
||
summary: APP 提交反馈
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/Feedback'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/ObjectResult'
|
||
|
||
/genealogy/app/vip/capability:
|
||
get:
|
||
tags: [VIP]
|
||
summary: 查询 APP VIP 购买能力
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VipPurchaseCapabilityResult'
|
||
/genealogy/app/vip/packages:
|
||
get:
|
||
tags: [VIP]
|
||
summary: APP VIP 套餐列表
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VipPackageListResult'
|
||
/genealogy/app/vip/orders:
|
||
get:
|
||
tags: [VIP]
|
||
summary: APP VIP 订单列表
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/VipOrderListResult'
|
||
post:
|
||
tags: [VIP]
|
||
summary: APP 创建 VIP 订单
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
requestBody:
|
||
$ref: '#/components/requestBodies/VipOrder'
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/PaymentOrderResult'
|
||
/genealogy/app/vip/orders/{transactionId}/payment:
|
||
get:
|
||
operationId: appGetVipOrderPayment
|
||
tags: [VIP]
|
||
summary: APP 查询 VIP 订单支付状态
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- name: transactionId
|
||
description: 支付流水ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/PaymentTransactionStatusResult'
|
||
/genealogy/app/vip/orders/{transactionId}/close:
|
||
post:
|
||
tags: [VIP]
|
||
summary: APP 关闭未支付 VIP 订单
|
||
description: 用户主动取消当前未支付订单。超过支付有效期仍为 CREATED/PAYING 的订单由内部 SnailJob 任务 paymentAutoCloseJob 自动关闭,不需要客户端调用本接口。
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- name: transactionId
|
||
description: 支付流水ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
responses:
|
||
'200':
|
||
$ref: '#/components/responses/PaymentTransactionStatusResult'
|
||
|
||
/genealogy/app/earnings/summary:
|
||
get:
|
||
tags: [收益与提现]
|
||
summary: 查询当前用户收益汇总
|
||
responses:
|
||
'200': { description: 收益汇总, content: { application/json: { schema: { $ref: '#/components/schemas/REarningSummary' } } } }
|
||
/genealogy/app/earnings/ledger:
|
||
get:
|
||
tags: [收益与提现]
|
||
summary: 查询当前用户不可变收益流水
|
||
parameters:
|
||
- { name: pageNum, in: query, schema: { type: integer, minimum: 1 } }
|
||
- { name: pageSize, in: query, schema: { type: integer, minimum: 1 } }
|
||
responses:
|
||
'200': { description: 收益流水分页, content: { application/json: { schema: { $ref: '#/components/schemas/EarningLedgerPage' } } } }
|
||
/genealogy/app/earnings/withdrawals:
|
||
get:
|
||
tags: [收益与提现]
|
||
summary: 查询当前用户提现记录
|
||
parameters:
|
||
- { name: pageNum, in: query, schema: { type: integer, minimum: 1 } }
|
||
- { name: pageSize, in: query, schema: { type: integer, minimum: 1 } }
|
||
responses:
|
||
'200': { description: 提现分页, content: { application/json: { schema: { $ref: '#/components/schemas/EarningWithdrawalPage' } } } }
|
||
post:
|
||
tags: [收益与提现]
|
||
summary: 申请提现并冻结可用收益
|
||
requestBody: { required: true, content: { application/json: { schema: { $ref: '#/components/schemas/EarningWithdrawalBody' } } } }
|
||
responses:
|
||
'200': { description: 提现申请, content: { application/json: { schema: { $ref: '#/components/schemas/REarningWithdrawal' } } } }
|
||
/genealogy/app/earnings/withdrawals/{withdrawalId}/cancel:
|
||
post:
|
||
tags: [收益与提现]
|
||
summary: 取消待审核提现并解冻余额
|
||
parameters:
|
||
- { name: withdrawalId, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
responses:
|
||
'200': { description: 已取消提现, content: { application/json: { schema: { $ref: '#/components/schemas/REarningWithdrawal' } } } }
|
||
|
||
/genealogy/app/genealogies/{genealogyId}/person-documents:
|
||
get:
|
||
tags: [重要证件档案]
|
||
summary: 查询人物证件档案
|
||
parameters:
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: lineagePersonId, in: query, required: false, schema: { type: integer, format: int64 } }
|
||
responses:
|
||
'200': { description: 档案列表, content: { application/json: { schema: { $ref: '#/components/schemas/RPersonDocumentList' } } } }
|
||
post:
|
||
tags: [重要证件档案]
|
||
summary: 创建人物证件档案
|
||
parameters: [ { $ref: '#/components/parameters/GenealogyId' } ]
|
||
requestBody: { required: true, content: { application/json: { schema: { $ref: '#/components/schemas/PersonDocumentBody' } } } }
|
||
responses:
|
||
'200': { description: 已创建档案, content: { application/json: { schema: { $ref: '#/components/schemas/RPersonDocument' } } } }
|
||
/genealogy/app/genealogies/{genealogyId}/person-documents/{documentId}:
|
||
parameters:
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: documentId, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
get:
|
||
tags: [重要证件档案]
|
||
summary: 查询证件档案详情
|
||
parameters: [ { $ref: '#/components/parameters/ContentAccessToken' } ]
|
||
responses:
|
||
'200': { description: 档案详情;未解锁时资源脱敏, content: { application/json: { schema: { $ref: '#/components/schemas/RPersonDocument' } } } }
|
||
put:
|
||
tags: [重要证件档案]
|
||
summary: 更新证件档案元数据
|
||
requestBody: { required: true, content: { application/json: { schema: { $ref: '#/components/schemas/PersonDocumentBody' } } } }
|
||
responses: { '200': { description: 已更新, content: { application/json: { schema: { $ref: '#/components/schemas/RPersonDocument' } } } } }
|
||
delete:
|
||
tags: [重要证件档案]
|
||
summary: 删除证件档案并释放文件引用
|
||
responses: { '200': { description: 已删除, content: { application/json: { schema: { $ref: '#/components/schemas/RVoid' } } } } }
|
||
/genealogy/app/genealogies/{genealogyId}/person-documents/{documentId}/resources:
|
||
post:
|
||
tags: [重要证件档案]
|
||
summary: 添加证件文件引用
|
||
parameters:
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: documentId, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
requestBody: { required: true, content: { application/json: { schema: { $ref: '#/components/schemas/PersonDocumentResourceBody' } } } }
|
||
responses: { '200': { description: 已添加, content: { application/json: { schema: { $ref: '#/components/schemas/RPersonDocumentResource' } } } } }
|
||
/genealogy/app/genealogies/{genealogyId}/person-documents/{documentId}/resources/{resourceId}:
|
||
parameters:
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: documentId, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
- { name: resourceId, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
put:
|
||
tags: [重要证件档案]
|
||
summary: 替换证件文件并释放旧引用
|
||
requestBody: { required: true, content: { application/json: { schema: { $ref: '#/components/schemas/PersonDocumentResourceBody' } } } }
|
||
responses: { '200': { description: 已替换, content: { application/json: { schema: { $ref: '#/components/schemas/RPersonDocumentResource' } } } } }
|
||
delete:
|
||
tags: [重要证件档案]
|
||
summary: 删除证件文件引用
|
||
responses: { '200': { description: 已删除, content: { application/json: { schema: { $ref: '#/components/schemas/RVoid' } } } } }
|
||
/genealogy/app/genealogies/{genealogyId}/person-documents/{documentId}/resources/{resourceId}/access:
|
||
get:
|
||
tags: [重要证件档案]
|
||
summary: 获取证件文件短时访问地址
|
||
parameters:
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: documentId, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
- { name: resourceId, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
- $ref: '#/components/parameters/ContentAccessToken'
|
||
responses: { '200': { description: 短时文件访问对象, content: { application/json: { schema: { $ref: '#/components/schemas/RBusinessFileAccess' } } } } }
|
||
/genealogy/app/genealogies/{genealogyId}/person-documents/{documentId}/content-protection:
|
||
parameters:
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: documentId, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
put:
|
||
tags: [内容密码保护]
|
||
summary: 设置或重置证件档案内容密码
|
||
requestBody: { required: true, content: { application/json: { schema: { $ref: '#/components/schemas/ContentPasswordBody' } } } }
|
||
responses: { '200': { description: 已设置, content: { application/json: { schema: { $ref: '#/components/schemas/RVoid' } } } } }
|
||
delete:
|
||
tags: [内容密码保护]
|
||
summary: 关闭证件档案内容密码
|
||
responses: { '200': { description: 已关闭, content: { application/json: { schema: { $ref: '#/components/schemas/RVoid' } } } } }
|
||
/genealogy/app/genealogies/{genealogyId}/person-documents/{documentId}/content-unlock:
|
||
post:
|
||
tags: [内容密码保护]
|
||
summary: 解锁证件档案内容
|
||
parameters:
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: documentId, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
requestBody: { required: true, content: { application/json: { schema: { $ref: '#/components/schemas/ContentPasswordBody' } } } }
|
||
responses: { '200': { description: 15 分钟访问授权, content: { application/json: { schema: { $ref: '#/components/schemas/RContentAccessGrant' } } } } }
|
||
/genealogy/app/genealogies/{genealogyId}/articles/{articleId}/content-protection:
|
||
parameters:
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: articleId, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
put: { tags: [内容密码保护], summary: 设置或重置谱文内容密码, requestBody: { required: true, content: { application/json: { schema: { $ref: '#/components/schemas/ContentPasswordBody' } } } }, responses: { '200': { description: 已设置, content: { application/json: { schema: { $ref: '#/components/schemas/RVoid' } } } } } }
|
||
delete: { tags: [内容密码保护], summary: 关闭谱文内容密码, responses: { '200': { description: 已关闭, content: { application/json: { schema: { $ref: '#/components/schemas/RVoid' } } } } } }
|
||
/genealogy/app/genealogies/{genealogyId}/articles/{articleId}/content-unlock:
|
||
post: { tags: [内容密码保护], summary: 解锁谱文内容, parameters: [ { $ref: '#/components/parameters/GenealogyId' }, { name: articleId, in: path, required: true, schema: { type: integer, format: int64 } } ], requestBody: { required: true, content: { application/json: { schema: { $ref: '#/components/schemas/ContentPasswordBody' } } } }, responses: { '200': { description: 15 分钟访问授权, content: { application/json: { schema: { $ref: '#/components/schemas/RContentAccessGrant' } } } } } }
|
||
/genealogy/app/genealogies/{genealogyId}/growth-records/{recordId}/content-protection:
|
||
parameters:
|
||
- $ref: '#/components/parameters/GenealogyId'
|
||
- { name: recordId, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
put: { tags: [内容密码保护], summary: 设置或重置成长记录内容密码, requestBody: { required: true, content: { application/json: { schema: { $ref: '#/components/schemas/ContentPasswordBody' } } } }, responses: { '200': { description: 已设置, content: { application/json: { schema: { $ref: '#/components/schemas/RVoid' } } } } } }
|
||
delete: { tags: [内容密码保护], summary: 关闭成长记录内容密码, responses: { '200': { description: 已关闭, content: { application/json: { schema: { $ref: '#/components/schemas/RVoid' } } } } } }
|
||
/genealogy/app/genealogies/{genealogyId}/growth-records/{recordId}/content-unlock:
|
||
post: { tags: [内容密码保护], summary: 解锁成长记录内容, parameters: [ { $ref: '#/components/parameters/GenealogyId' }, { name: recordId, in: path, required: true, schema: { type: integer, format: int64 } } ], requestBody: { required: true, content: { application/json: { schema: { $ref: '#/components/schemas/ContentPasswordBody' } } } }, responses: { '200': { description: 15 分钟访问授权, content: { application/json: { schema: { $ref: '#/components/schemas/RContentAccessGrant' } } } } } }
|
||
/genealogy/app/genealogies/{genealogyId}/content-password-recovery/{resourceType}/{resourceId}/capability:
|
||
get:
|
||
tags: [内容密码找回]
|
||
summary: 查询当前用户是否可通过实名手机号找回内容密码
|
||
parameters: [ { $ref: '#/components/parameters/GenealogyId' }, { name: resourceType, in: path, required: true, schema: { type: string, enum: [ARTICLE, GROWTH_RECORD, PERSON_DOCUMENT] } }, { name: resourceId, in: path, required: true, schema: { type: integer, format: int64 } } ]
|
||
responses: { '200': { description: 找回能力, content: { application/json: { schema: { $ref: '#/components/schemas/RContentPasswordRecoveryCapability' } } } } }
|
||
/genealogy/app/genealogies/{genealogyId}/content-password-recovery/{resourceType}/{resourceId}/code:
|
||
post:
|
||
tags: [内容密码找回]
|
||
summary: 向当前实名手机号发送内容密码找回验证码
|
||
parameters: [ { $ref: '#/components/parameters/GenealogyId' }, { name: resourceType, in: path, required: true, schema: { type: string, enum: [ARTICLE, GROWTH_RECORD, PERSON_DOCUMENT] } }, { name: resourceId, in: path, required: true, schema: { type: integer, format: int64 } } ]
|
||
requestBody: { required: false, content: { application/json: { schema: { $ref: '#/components/schemas/ContentPasswordRecoveryCodeBody' } } } }
|
||
responses: { '200': { $ref: '#/components/responses/VoidResult' } }
|
||
/genealogy/app/genealogies/{genealogyId}/content-password-recovery/{resourceType}/{resourceId}/reset:
|
||
post:
|
||
tags: [内容密码找回]
|
||
summary: 校验一次性短信码并重置内容密码
|
||
parameters: [ { $ref: '#/components/parameters/GenealogyId' }, { name: resourceType, in: path, required: true, schema: { type: string, enum: [ARTICLE, GROWTH_RECORD, PERSON_DOCUMENT] } }, { name: resourceId, in: path, required: true, schema: { type: integer, format: int64 } } ]
|
||
requestBody: { required: true, content: { application/json: { schema: { $ref: '#/components/schemas/ContentPasswordRecoveryResetBody' } } } }
|
||
responses: { '200': { $ref: '#/components/responses/VoidResult' } }
|
||
/genealogy/app/genealogies/{genealogyId}/permanent-deletion/capability:
|
||
get:
|
||
tags: [家谱永久删除]
|
||
summary: 查询家谱永久删除资格和阻断原因
|
||
parameters: [{ $ref: '#/components/parameters/GenealogyId' }]
|
||
responses: { '200': { description: 永久删除能力, content: { application/json: { schema: { $ref: '#/components/schemas/RGenealogyPermanentDeletionCapability' } } } } }
|
||
/genealogy/app/genealogies/{genealogyId}/permanent-deletion/code:
|
||
post:
|
||
tags: [家谱永久删除]
|
||
summary: 向家谱所有者实名手机号发送永久删除验证码
|
||
parameters: [{ $ref: '#/components/parameters/GenealogyId' }]
|
||
requestBody: { required: false, content: { application/json: { schema: { $ref: '#/components/schemas/GenealogyPermanentDeletionCodeBody' } } } }
|
||
responses: { '200': { $ref: '#/components/responses/VoidResult' } }
|
||
/genealogy/app/genealogies/{genealogyId}/permanent-deletion:
|
||
post:
|
||
tags: [家谱永久删除]
|
||
summary: 校验精确家谱名与一次性短信码后提交永久删除任务
|
||
parameters: [{ $ref: '#/components/parameters/GenealogyId' }]
|
||
requestBody: { required: true, content: { application/json: { schema: { $ref: '#/components/schemas/GenealogyPermanentDeletionBody' } } } }
|
||
responses: { '200': { description: 删除任务, content: { application/json: { schema: { $ref: '#/components/schemas/RGenealogyDeletionTask' } } } } }
|
||
/genealogy/app/recommendation-preference:
|
||
get: { tags: [个性化推荐], summary: 读取当前用户推荐偏好, responses: { '200': { description: 当前偏好, content: { application/json: { schema: { $ref: '#/components/schemas/RRecommendationPreference' } } } } } }
|
||
put: { tags: [个性化推荐], summary: 显式开启或关闭个性化推荐, requestBody: { required: true, content: { application/json: { schema: { $ref: '#/components/schemas/RecommendationPreferenceBody' } } } }, responses: { '200': { description: 已保存, content: { application/json: { schema: { $ref: '#/components/schemas/RRecommendationPreference' } } } } } }
|
||
/genealogy/app/genealogies/{genealogyId}/recommendation-events:
|
||
post: { tags: [个性化推荐], summary: 记录允许列表内的家族圈行为事件, description: 仅在用户显式开启且租户策略启用时记录;tenantId、appUserId 和目标类型由服务端确定。, parameters: [{ $ref: '#/components/parameters/GenealogyId' }], requestBody: { required: true, content: { application/json: { schema: { $ref: '#/components/schemas/RecommendationEventBody' } } } }, responses: { '200': { description: 幂等事件, content: { application/json: { schema: { $ref: '#/components/schemas/RRecommendationEvent' } } } } } }
|
||
/genealogy/app/genealogies/{genealogyId}/feed-recommendations:
|
||
get: { tags: [个性化推荐], summary: 获取授权且可解释的家族圈推荐, description: 候选集先鉴权;关闭个性化或无信号时回退人工排序和时间排序。, parameters: [{ $ref: '#/components/parameters/GenealogyId' }], responses: { '200': { description: 推荐结果, content: { application/json: { schema: { $ref: '#/components/schemas/RFamilyFeedRecommendationList' } } } } } }
|
||
/genealogy/app/compliance/documents/{documentKey}:
|
||
get:
|
||
tags: [合规文档]
|
||
summary: APP 查询当前生效的合规文档
|
||
security: []
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/TenantIdHeader'
|
||
- name: documentKey
|
||
in: path
|
||
required: true
|
||
schema: { type: string, enum: [user_agreement, privacy_policy] }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/ComplianceDocumentContentResult' }
|
||
/genealogy/app/compliance/documents/{documentKey}/versions/{versionNo}:
|
||
get:
|
||
tags: [合规文档]
|
||
summary: APP 查询合规文档历史版本
|
||
security: []
|
||
parameters:
|
||
- $ref: '#/components/parameters/ClientIdHeader'
|
||
- $ref: '#/components/parameters/TenantIdHeader'
|
||
- name: documentKey
|
||
in: path
|
||
required: true
|
||
schema: { type: string, enum: [user_agreement, privacy_policy] }
|
||
- name: versionNo
|
||
in: path
|
||
required: true
|
||
schema: { type: string }
|
||
responses:
|
||
'200': { $ref: '#/components/responses/ComplianceDocumentContentResult' }
|
||
/genealogy/app/genealogies/{genealogyId}/videos/{videoId}/likes:
|
||
post:
|
||
tags: [视频互动]
|
||
summary: 点赞家谱视频
|
||
parameters: [{ $ref: '#/components/parameters/ClientIdHeader' }, { $ref: '#/components/parameters/GenealogyId' }, { name: videoId, in: path, required: true, schema: { type: integer, format: int64 } }]
|
||
responses: { '200': { description: 成功, content: { application/json: { schema: { $ref: '#/components/schemas/RVideoLike' } } } } }
|
||
delete:
|
||
tags: [视频互动]
|
||
summary: 取消点赞家谱视频
|
||
parameters: [{ $ref: '#/components/parameters/ClientIdHeader' }, { $ref: '#/components/parameters/GenealogyId' }, { name: videoId, in: path, required: true, schema: { type: integer, format: int64 } }]
|
||
responses: { '200': { $ref: '#/components/responses/VoidResult' } }
|
||
/genealogy/app/genealogies/{genealogyId}/videos/{videoId}/comments:
|
||
get:
|
||
tags: [视频互动]
|
||
summary: 查询视频根评论
|
||
parameters: [{ $ref: '#/components/parameters/ClientIdHeader' }, { $ref: '#/components/parameters/GenealogyId' }, { name: videoId, in: path, required: true, schema: { type: integer, format: int64 } }]
|
||
responses: { '200': { description: 成功, content: { application/json: { schema: { $ref: '#/components/schemas/RVideoCommentList' } } } } }
|
||
post:
|
||
tags: [视频互动]
|
||
summary: 发表评论或回复
|
||
parameters: [{ $ref: '#/components/parameters/ClientIdHeader' }, { $ref: '#/components/parameters/GenealogyId' }, { name: videoId, in: path, required: true, schema: { type: integer, format: int64 } }]
|
||
requestBody: { required: true, content: { application/json: { schema: { $ref: '#/components/schemas/VideoCommentBody' } } } }
|
||
responses: { '200': { description: 成功, content: { application/json: { schema: { $ref: '#/components/schemas/RVideoComment' } } } } }
|
||
/genealogy/app/genealogies/{genealogyId}/videos/{videoId}/comments/{commentId}:
|
||
delete:
|
||
tags: [视频互动]
|
||
summary: 删除本人视频评论
|
||
parameters: [{ $ref: '#/components/parameters/ClientIdHeader' }, { $ref: '#/components/parameters/GenealogyId' }, { name: videoId, in: path, required: true, schema: { type: integer, format: int64 } }, { name: commentId, in: path, required: true, schema: { type: integer, format: int64 } }]
|
||
responses: { '200': { $ref: '#/components/responses/VoidResult' } }
|
||
/genealogy/app/genealogies/{genealogyId}/videos/{videoId}/comments/page:
|
||
get:
|
||
tags: [视频互动]
|
||
summary: 分页查询视频根评论
|
||
parameters: [{ $ref: '#/components/parameters/ClientIdHeader' }, { $ref: '#/components/parameters/GenealogyId' }, { name: videoId, in: path, required: true, schema: { type: integer, format: int64 } }]
|
||
responses: { '200': { description: 成功, content: { application/json: { schema: { $ref: '#/components/schemas/VideoCommentPage' } } } } }
|
||
/genealogy/app/genealogies/{genealogyId}/videos/{videoId}/comments/{commentId}/replies:
|
||
get:
|
||
tags: [视频互动]
|
||
summary: 查询视频评论回复
|
||
parameters: [{ $ref: '#/components/parameters/ClientIdHeader' }, { $ref: '#/components/parameters/GenealogyId' }, { name: videoId, in: path, required: true, schema: { type: integer, format: int64 } }, { name: commentId, in: path, required: true, schema: { type: integer, format: int64 } }]
|
||
responses: { '200': { description: 成功, content: { application/json: { schema: { $ref: '#/components/schemas/RVideoCommentList' } } } } }
|
||
/genealogy/app/genealogies/{genealogyId}/videos/{videoId}/comments/{commentId}/replies/page:
|
||
get:
|
||
tags: [视频互动]
|
||
summary: 分页查询视频评论回复
|
||
parameters: [{ $ref: '#/components/parameters/ClientIdHeader' }, { $ref: '#/components/parameters/GenealogyId' }, { name: videoId, in: path, required: true, schema: { type: integer, format: int64 } }, { name: commentId, in: path, required: true, schema: { type: integer, format: int64 } }]
|
||
responses: { '200': { description: 成功, content: { application/json: { schema: { $ref: '#/components/schemas/VideoCommentPage' } } } } }
|
||
/genealogy/app/platform-videos:
|
||
get:
|
||
tags: [平台宣传视频]
|
||
summary: 查询有效平台宣传视频
|
||
parameters: [{ name: placement, in: query, required: true, schema: { type: string, enum: [home_featured, video_center, profile_featured] } }]
|
||
responses: { '200': { description: 成功, content: { application/json: { schema: { $ref: '#/components/schemas/RPlatformVideoList' } } } } }
|
||
/genealogy/app/platform-videos/{id}:
|
||
parameters: [{ name: id, in: path, required: true, schema: { type: integer, format: int64 } }]
|
||
get: { tags: [平台宣传视频], summary: 查询平台宣传视频详情, responses: { '200': { description: 成功, content: { application/json: { schema: { $ref: '#/components/schemas/RPlatformVideo' } } } } } }
|
||
/genealogy/app/platform-videos/{id}/likes:
|
||
parameters: [{ name: id, in: path, required: true, schema: { type: integer, format: int64 } }]
|
||
post: { tags: [平台宣传视频], summary: 点赞平台宣传视频, responses: { '200': { $ref: '#/components/responses/VoidResult' } } }
|
||
delete: { tags: [平台宣传视频], summary: 取消点赞平台宣传视频, responses: { '200': { $ref: '#/components/responses/VoidResult' } } }
|
||
/genealogy/app/platform-videos/{id}/comments:
|
||
parameters: [{ name: id, in: path, required: true, schema: { type: integer, format: int64 } }]
|
||
get: { tags: [平台宣传视频], summary: 查询平台宣传视频评论, responses: { '200': { description: 成功, content: { application/json: { schema: { $ref: '#/components/schemas/RPlatformVideoCommentList' } } } } } }
|
||
post: { tags: [平台宣传视频], summary: 评论或回复平台宣传视频, requestBody: { required: true, content: { application/json: { schema: { $ref: '#/components/schemas/PlatformVideoCommentBody' } } } }, responses: { '200': { description: 成功, content: { application/json: { schema: { $ref: '#/components/schemas/RPlatformVideoComment' } } } } } }
|
||
/genealogy/app/platform-videos/{id}/comments/{commentId}:
|
||
parameters: [{ name: id, in: path, required: true, schema: { type: integer, format: int64 } }, { name: commentId, in: path, required: true, schema: { type: integer, format: int64 } }]
|
||
delete: { tags: [平台宣传视频], summary: 删除本人平台宣传视频评论, responses: { '200': { $ref: '#/components/responses/VoidResult' } } }
|
||
/genealogy/app/genealogies/{genealogyId}/recycle-bin/page:
|
||
parameters: [{ name: genealogyId, in: path, required: true, schema: { type: integer, format: int64 } }]
|
||
get:
|
||
tags: [内容回收站]
|
||
summary: 分页查询家谱内容回收站
|
||
description: 仅家谱所有者或拥有 RECYCLE_BIN_MANAGE 权限的管理员可访问。
|
||
responses: { '200': { $ref: '#/components/responses/ContentRecycleItemPageResult' } }
|
||
/genealogy/app/genealogies/{genealogyId}/recycle-bin/{resourceType}/{resourceId}/restore:
|
||
parameters: [{ name: genealogyId, in: path, required: true, schema: { type: integer, format: int64 } }, { name: resourceType, in: path, required: true, schema: { type: string } }, { name: resourceId, in: path, required: true, schema: { type: integer, format: int64 } }]
|
||
put:
|
||
tags: [内容回收站]
|
||
summary: 单项恢复已逻辑删除内容
|
||
responses: { '200': { $ref: '#/components/responses/ContentRecycleItemResult' } }
|
||
components:
|
||
securitySchemes:
|
||
SaToken:
|
||
type: apiKey
|
||
in: header
|
||
name: Authorization
|
||
description: 登录后返回的 token。若本地配置使用 sa-token 名称,请按项目实际 token-name 调整。
|
||
parameters:
|
||
ContentAccessToken:
|
||
name: X-Content-Access-Token
|
||
in: header
|
||
required: false
|
||
description: 内容密码校验成功后返回的短时授权令牌
|
||
schema: { type: string }
|
||
ClientIdHeader:
|
||
name: clientid
|
||
description: APP 认证业务请求的 clientid Header 必填;是业务客户端唯一来源;请求体不得提交 clientId,且客户端 clientKey 必须为 app 并与 APP 路由一致。
|
||
in: header
|
||
required: true
|
||
schema:
|
||
type: string
|
||
example: 428a8310cd442757ae699df5d894f051
|
||
TenantIdHeader:
|
||
name: tenantId
|
||
description: 匿名读取合规文档时必填,用于限定公开文档所属租户。
|
||
in: header
|
||
required: true
|
||
schema: { type: string }
|
||
example: '000000'
|
||
PageNum:
|
||
name: pageNum
|
||
description: 页码,从1开始
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 1
|
||
PageSize:
|
||
name: pageSize
|
||
description: 每页条数
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 10
|
||
GenealogyId:
|
||
name: genealogyId
|
||
description: 家谱ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
example: 900001001
|
||
MemberId:
|
||
name: memberId
|
||
description: 家谱成员ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
PersonId:
|
||
name: personId
|
||
description: 世系人物ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
FeedId:
|
||
name: feedId
|
||
description: 家族动态ID
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
format: int64
|
||
RegionCode:
|
||
name: regionCode
|
||
description: 行政区划编码
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: string
|
||
example: "510000"
|
||
requestBodies:
|
||
JsonObject:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
type: object
|
||
additionalProperties: true
|
||
PasswordRegister:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/PasswordRegisterBody'
|
||
example:
|
||
grantType: "password"
|
||
tenantId: "000000"
|
||
phone: "13800000000"
|
||
password: "e10adc3949ba59abbe56e057f20f883e"
|
||
nickName: "测试用户"
|
||
registerSource: "app"
|
||
smsCode: "1234"
|
||
referralCode: "RABC123"
|
||
WechatCode:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema: { $ref: '#/components/schemas/WechatCodeBody' }
|
||
example: { code: "wechat-one-time-code" }
|
||
PasswordLogin:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/PasswordLoginBody'
|
||
example:
|
||
grantType: "password"
|
||
tenantId: "000000"
|
||
phone: "13800000000"
|
||
password: "e10adc3949ba59abbe56e057f20f883e"
|
||
validToken: "valid-token-from-captcha-verify"
|
||
SmsLogin:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/SmsLoginBody'
|
||
example:
|
||
grantType: "sms"
|
||
tenantId: "000000"
|
||
phone: "13800000000"
|
||
smsCode: "1234"
|
||
SmsCode:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/SmsCodeBody'
|
||
example:
|
||
tenantId: "000000"
|
||
phone: "13800000000"
|
||
grantType: "sms"
|
||
validToken: "captcha-ticket"
|
||
ProfileUpdate:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ProfileUpdateBody'
|
||
example:
|
||
nickName: "张三"
|
||
realName: "张三"
|
||
avatar: 2060000000000000001
|
||
sex: "0"
|
||
birthday: "1990-01-01"
|
||
email: "zhangsan@example.com"
|
||
PasswordChange:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/PasswordChangeBody'
|
||
example:
|
||
oldPassword: "e10adc3949ba59abbe56e057f20f883e"
|
||
newPassword: "25d55ad283aa400af464c76d713c07ad"
|
||
PasswordReset:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/PasswordResetBody'
|
||
example:
|
||
grantType: "password"
|
||
tenantId: "000000"
|
||
phone: "13800000000"
|
||
smsCode: "1234"
|
||
newPassword: "25d55ad283aa400af464c76d713c07ad"
|
||
PhoneChange:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/PhoneChangeBody'
|
||
example:
|
||
phone: "13900000000"
|
||
smsCode: "1234"
|
||
AccountDeactivate:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/AccountDeactivateBody'
|
||
example:
|
||
smsCode: "1234"
|
||
ChunkUpload:
|
||
required: true
|
||
content:
|
||
multipart/form-data:
|
||
schema:
|
||
type: object
|
||
required: [uploadId, chunkIndex, chunkMd5, file]
|
||
properties:
|
||
uploadId:
|
||
type: string
|
||
chunkIndex:
|
||
type: integer
|
||
example: 0
|
||
chunkMd5:
|
||
type: string
|
||
example: d41d8cd98f00b204e9800998ecf8427e
|
||
file:
|
||
type: string
|
||
format: binary
|
||
ResumableInit:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ResumableInitBody'
|
||
example:
|
||
uploadId: "UPLOAD202607090001"
|
||
fileName: "cover.jpg"
|
||
fileMd5: "d41d8cd98f00b204e9800998ecf8427e"
|
||
totalSize: 9532
|
||
totalChunks: 1
|
||
chunkSize: 4194304
|
||
contentType: "image/jpeg"
|
||
ResumableComplete:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ResumableCompleteBody'
|
||
example:
|
||
uploadId: "UPLOAD202607090001"
|
||
fileName: "cover.jpg"
|
||
fileMd5: "d41d8cd98f00b204e9800998ecf8427e"
|
||
totalSize: 9532
|
||
totalChunks: 1
|
||
GenerationPoemBatch:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/GenerationPoemBatchBody'
|
||
example:
|
||
poemText: "德承家亦\n忠厚传芳"
|
||
disableMissing: false
|
||
LineagePerson:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/LineagePersonBody'
|
||
example:
|
||
bindingMode: NONE
|
||
personNo: "P202607090001"
|
||
name: "彭德明"
|
||
aliasName: "德明"
|
||
sex: "0"
|
||
generation: 1
|
||
generationName: "德"
|
||
avatarOssId: "2060000000000000001"
|
||
birthDate: "1950-01-01"
|
||
birthLunar: "0"
|
||
birthPlace: "江西吉安"
|
||
personStatus: "0"
|
||
biography: "第一世人物简介"
|
||
sortOrder: 1
|
||
LineagePersonSensitiveProfile:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/LineagePersonSensitiveProfileBody'
|
||
example:
|
||
hereditaryMedicalHistory: "高血压家族史"
|
||
LineagePersonSortOrder:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/LineagePersonSortOrderBody'
|
||
example:
|
||
sortOrder: 100
|
||
LineageRelationRemove:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema: { $ref: '#/components/schemas/LineageRelationRemoveBody' }
|
||
example: { relativePersonId: 900020002, relationType: spouse }
|
||
FamilyFeed:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/FamilyFeedBody'
|
||
example:
|
||
feedType: "text"
|
||
feedContent: "今天上传一张老照片。"
|
||
mediaOssIds: "2060000000000000001,2060000000000000002"
|
||
sortOrder: 0
|
||
status: "0"
|
||
FamilyFeedComment:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/FamilyFeedCommentBody'
|
||
example:
|
||
parentCommentId: null
|
||
commentContent: "这张照片很有年代感。"
|
||
GenealogyCreate:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/GenealogyCreateBody'
|
||
example:
|
||
genealogyName: "彭氏家谱"
|
||
firstAncestorName: "彭氏始迁祖"
|
||
requestId: "create-genealogy-20260824-001"
|
||
ownerIsFirstAncestor: false
|
||
surname: "彭"
|
||
ancestralHall: "陇西堂"
|
||
originPlace: "江西吉安"
|
||
regionCode: "360800"
|
||
addressDetail: "江西省吉安市"
|
||
coverOssId: "2060000000000000001"
|
||
intro: "彭氏家谱简介"
|
||
visibility: "1"
|
||
joinMode: "1"
|
||
GenealogyUpdate:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/GenealogyUpdateBody'
|
||
example:
|
||
genealogyName: "彭氏家谱"
|
||
surname: "彭"
|
||
ancestralHall: "陇西堂"
|
||
originPlace: "江西吉安"
|
||
regionCode: "360800"
|
||
addressDetail: "江西省吉安市"
|
||
coverOssId: "2060000000000000001"
|
||
intro: "更新后的家谱简介"
|
||
visibility: "1"
|
||
joinMode: "1"
|
||
GenealogyUserOrder:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/GenealogyUserOrderBody'
|
||
example:
|
||
genealogyIds: ["2060000000000000001", "2060000000000000002"]
|
||
GenealogyJoinApply:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/GenealogyJoinApplyBody'
|
||
example:
|
||
applicantName: "彭小明"
|
||
phone: "13800000000"
|
||
relationDesc: "本族成员"
|
||
applyReason: "申请加入家谱维护"
|
||
GenealogyJoinAudit:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/GenealogyJoinAuditBody'
|
||
example:
|
||
status: "1"
|
||
auditRemark: "信息核验通过"
|
||
GenealogyMemberUpdate:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/GenealogyMemberUpdateBody'
|
||
example:
|
||
memberName: "彭小明"
|
||
relationName: "族亲"
|
||
roleType: "member"
|
||
lineagePersonId: 900020001
|
||
GenealogyMemberPermission:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema: { $ref: '#/components/schemas/GenealogyMemberPermissionBody' }
|
||
GenealogyOwnerTransfer:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/GenealogyOwnerTransferBody'
|
||
example:
|
||
targetMemberId: 900010002
|
||
GenerationPoem:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/GenerationPoemBody'
|
||
example:
|
||
generationNo: 5
|
||
generationText: "忠"
|
||
description: "fifth generation poem"
|
||
sortOrder: 5
|
||
status: "0"
|
||
Article:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ArticleBody'
|
||
example:
|
||
categoryId: 900040001
|
||
articleTitle: "族谱源流"
|
||
articleSummary: "介绍本支源流"
|
||
coverOssId: "2060000000000000001"
|
||
articleContent: "<p>article content</p>"
|
||
authorName: "族谱管理员"
|
||
sortOrder: 1
|
||
status: "0"
|
||
ArticleCategory:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ArticleCategoryBody'
|
||
example:
|
||
categoryName: "姓氏源流"
|
||
categoryDesc: "记录本支姓氏与迁徙源流"
|
||
sortOrder: 10
|
||
status: "0"
|
||
Album:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/AlbumBody'
|
||
example:
|
||
albumName: "老照片"
|
||
albumDesc: "family old photos"
|
||
coverOssId: "2060000000000000001"
|
||
sortOrder: 1
|
||
status: "0"
|
||
AlbumPhoto:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/AlbumPhotoBody'
|
||
example:
|
||
ossId: "2060000000000000001"
|
||
photoTitle: "老宅合影"
|
||
photoDesc: "old house photo"
|
||
photographer: "彭小明"
|
||
shootTime: "2026-07-09 10:00:00"
|
||
sortOrder: 1
|
||
status: "0"
|
||
Ceremony:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/CeremonyBody'
|
||
example:
|
||
ceremonyType: "ancestor"
|
||
ceremonyTitle: "清明祭祖"
|
||
ceremonyDesc: "online ancestor ceremony"
|
||
ceremonyTime: "2026-04-04 09:00:00"
|
||
location: "祠堂"
|
||
locationAddress: "四川省成都市示例路1号"
|
||
longitude: 104.0665410
|
||
latitude: 30.5722690
|
||
coverOssId: "2060000000000000001"
|
||
sortOrder: 1
|
||
status: "0"
|
||
CeremonyInvitees:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/CeremonyInviteesBody'
|
||
example:
|
||
inviteeUserIds: [900000001, 900000002]
|
||
CeremonyInvitationResponse:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/CeremonyInvitationResponseBody'
|
||
example:
|
||
inviteStatus: "ACCEPTED"
|
||
CeremonyGift:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/CeremonyGiftBody'
|
||
example:
|
||
giverName: "彭小明"
|
||
giftAmount: 66.66
|
||
giftMessage: "缅怀先祖"
|
||
GrowthRecord:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/GrowthRecordBody'
|
||
example:
|
||
lineagePersonId: 900020001
|
||
recordType: "birth"
|
||
recordTitle: "出生记录"
|
||
recordContent: "birth record"
|
||
recordDate: "2026-07-09 10:00:00"
|
||
remindTime: "2027-07-09 10:00:00"
|
||
mediaOssIds: "2060000000000000001"
|
||
sortOrder: 1
|
||
status: "0"
|
||
LifeEvent:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/LifeEventBody'
|
||
example:
|
||
eventType: EDUCATION
|
||
eventTitle: 进入县立小学
|
||
eventContent: 在县立小学完成启蒙教育
|
||
eventDate: "1936-09-01"
|
||
datePrecision: DAY
|
||
eventPlace: 四川省成都市
|
||
sourceDescription: 家谱手稿
|
||
mediaOssIds: ["2060000000000000001"]
|
||
sortOrder: 1
|
||
status: "0"
|
||
Memo:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/MemoBody'
|
||
example:
|
||
memoType: "general"
|
||
memoTitle: "修谱事项"
|
||
memoContent: "contact family members"
|
||
remindTime: "2026-08-01 09:00:00"
|
||
completed: "0"
|
||
mediaOssIds: "2060000000000000001"
|
||
sortOrder: 1
|
||
status: "0"
|
||
RelativeRecord:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RelativeRecordBody'
|
||
example:
|
||
relativeName: "张三"
|
||
relationName: "亲友"
|
||
eventName: "礼尚往来"
|
||
eventTime: "2026-07-16 10:00:00"
|
||
giftAmount: 100.00
|
||
recordContent: "往来记录"
|
||
mediaOssIds: "2060000000000000001"
|
||
sortOrder: 1
|
||
status: "0"
|
||
MeritRecord:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/MeritRecordBody'
|
||
example:
|
||
donorName: "彭小明"
|
||
meritType: "donation"
|
||
meritTitle: "修谱捐款"
|
||
meritContent: "support genealogy work"
|
||
mediaOssIds: "2060000000000000001"
|
||
amount: 100.0
|
||
meritTime: "2026-07-09 10:00:00"
|
||
sortOrder: 1
|
||
status: "0"
|
||
Video:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/VideoBody'
|
||
example:
|
||
videoTitle: "家族活动记录"
|
||
videoDesc: "2026 年清明祭祖活动"
|
||
coverOssId: "2060000000000000001"
|
||
videoOssId: "2060000000000000002"
|
||
durationSeconds: 180
|
||
sortOrder: 1
|
||
status: "0"
|
||
Feedback:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/FeedbackBody'
|
||
example:
|
||
feedbackType: "bug"
|
||
feedbackContent: "upload image failed"
|
||
contactInfo: "13800000000"
|
||
VipOrder:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/AppVipOrderBody'
|
||
example:
|
||
packageId: 900060001
|
||
genealogyId: 900001001
|
||
paymentMethod: WECHAT
|
||
requestId: app-vip-order-20260818-001
|
||
VerificationChallenge:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/VerificationChallengeBody'
|
||
example:
|
||
tenantId: "000000"
|
||
subject: "13800000000"
|
||
VerificationCheck:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/VerificationCheckBody'
|
||
examples:
|
||
tianai_behavior:
|
||
summary: 天爱滑块/旋转/滑动还原/文字点选验证
|
||
value:
|
||
tenantId: "000000"
|
||
subject: "13800000000"
|
||
challengeId: "CAPTCHA_CHALLENGE_ID"
|
||
providerCode: "tianai"
|
||
captchaType: "SLIDER"
|
||
payload:
|
||
track:
|
||
bgImageWidth: 340
|
||
bgImageHeight: 180
|
||
templateImageWidth: 50
|
||
templateImageHeight: 50
|
||
startTime: 1720000000000
|
||
stopTime: 1720000001500
|
||
left: 120
|
||
top: 0
|
||
trackList:
|
||
- x: 0
|
||
y: 0
|
||
t: 0
|
||
type: down
|
||
- x: 120
|
||
y: 0
|
||
t: 650
|
||
type: move
|
||
- x: 120
|
||
y: 0
|
||
t: 700
|
||
type: up
|
||
system_image:
|
||
summary: 系统图形验证码
|
||
value:
|
||
tenantId: "000000"
|
||
subject: "13800000000"
|
||
challengeId: "CAPTCHA_CHALLENGE_ID"
|
||
providerCode: "ruoyi_image"
|
||
captchaType: "math"
|
||
payload:
|
||
uuid: "captcha-uuid"
|
||
code: "6"
|
||
responses:
|
||
ComplianceDocumentContentResult:
|
||
description: 合规文档正文响应
|
||
content:
|
||
application/json:
|
||
schema: { $ref: '#/components/schemas/RComplianceDocumentContent' }
|
||
VoidResult:
|
||
description: 通用成功响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RVoid'
|
||
ObjectResult:
|
||
description: 通用对象响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RObject'
|
||
GenealogyQuotaResult:
|
||
description: 当前业务用户家谱配额响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RGenealogyQuota'
|
||
LongResult:
|
||
description: 长整型数据响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RLong'
|
||
ListResult:
|
||
description: 通用列表响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RList'
|
||
HelpArticleResult:
|
||
description: 帮助文章详情响应
|
||
content: { application/json: { schema: { $ref: '#/components/schemas/RHelpArticle' } } }
|
||
HelpArticleListResult:
|
||
description: 帮助文章列表响应
|
||
content: { application/json: { schema: { $ref: '#/components/schemas/RHelpArticleList' } } }
|
||
VipPurchaseCapabilityResult:
|
||
description: VIP 购买能力响应
|
||
content: { application/json: { schema: { $ref: '#/components/schemas/RVipPurchaseCapability' } } }
|
||
VipPackageListResult:
|
||
description: VIP 套餐列表响应
|
||
content: { application/json: { schema: { $ref: '#/components/schemas/RVipPackageList' } } }
|
||
VipOrderResult:
|
||
description: VIP 订单详情响应
|
||
content: { application/json: { schema: { $ref: '#/components/schemas/RVipOrder' } } }
|
||
VipOrderListResult:
|
||
description: VIP 订单列表响应
|
||
content: { application/json: { schema: { $ref: '#/components/schemas/RVipOrderList' } } }
|
||
PaymentOrderResult:
|
||
description: 支付下单响应
|
||
content: { application/json: { schema: { $ref: '#/components/schemas/RPaymentOrder' } } }
|
||
PaymentTransactionStatusResult:
|
||
description: 支付状态响应
|
||
content: { application/json: { schema: { $ref: '#/components/schemas/RPaymentTransactionStatus' } } }
|
||
GenealogyInvitationResult:
|
||
description: 家谱邀请详情响应
|
||
content: { application/json: { schema: { $ref: '#/components/schemas/RGenealogyInvitation' } } }
|
||
GenealogyInvitationListResult:
|
||
description: 家谱邀请列表响应
|
||
content: { application/json: { schema: { $ref: '#/components/schemas/RGenealogyInvitationList' } } }
|
||
AppPromotionListResult:
|
||
description: 当前有效推广列表
|
||
content:
|
||
application/json:
|
||
schema: { $ref: '#/components/schemas/RAppPromotionList' }
|
||
ContentLifecycleStatusResult:
|
||
description: 内容生命周期状态响应
|
||
content:
|
||
application/json:
|
||
schema: { $ref: '#/components/schemas/RContentLifecycleStatus' }
|
||
AppProfileResult:
|
||
description: AppProfileResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppProfile'
|
||
AppGenealogyResult:
|
||
description: AppGenealogyResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppGenealogy'
|
||
AppGenealogyListResult:
|
||
description: AppGenealogyListResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppGenealogyList'
|
||
GenealogyCompletenessResult:
|
||
description: 家谱资料完整度响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RGenealogyCompleteness'
|
||
AppGenealogyMemberResult:
|
||
description: AppGenealogyMemberResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppGenealogyMember'
|
||
AppGenealogyMemberListResult:
|
||
description: AppGenealogyMemberListResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppGenealogyMemberList'
|
||
GenealogyMemberOptionListResult:
|
||
description: GenealogyMemberOptionListResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RGenealogyMemberOptionList'
|
||
GenealogyMemberPermissionResult:
|
||
description: 家谱管理员权限响应
|
||
content:
|
||
application/json:
|
||
schema: { $ref: '#/components/schemas/RGenealogyMemberPermission' }
|
||
GenealogyMemberPermissionCatalogListResult:
|
||
description: 家谱管理员权限目录响应
|
||
content:
|
||
application/json:
|
||
schema: { $ref: '#/components/schemas/RGenealogyMemberPermissionCatalogList' }
|
||
AppNotificationResult:
|
||
description: AppNotificationResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppNotification'
|
||
AppNotificationListResult:
|
||
description: AppNotificationListResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppNotificationList'
|
||
AppGrowthRecordResult:
|
||
description: AppGrowthRecordResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppGrowthRecord'
|
||
AppGrowthRecordListResult:
|
||
description: AppGrowthRecordListResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppGrowthRecordList'
|
||
AppAlbumResult:
|
||
description: AppAlbumResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppAlbum'
|
||
AppAlbumListResult:
|
||
description: AppAlbumListResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppAlbumList'
|
||
AppAlbumPhotoResult:
|
||
description: AppAlbumPhotoResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppAlbumPhoto'
|
||
AppAlbumPhotoListResult:
|
||
description: AppAlbumPhotoListResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppAlbumPhotoList'
|
||
AppVideoResult:
|
||
description: AppVideoResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppVideo'
|
||
AppVideoListResult:
|
||
description: AppVideoListResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppVideoList'
|
||
AppArticleResult:
|
||
description: AppArticleResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppArticle'
|
||
AppArticleListResult:
|
||
description: AppArticleListResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppArticleList'
|
||
AppArticleCategoryOptionListResult:
|
||
description: 谱文分类选项列表
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppArticleCategoryOptionList'
|
||
AppArticleCategoryResult:
|
||
description: 谱文分类详情
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppArticleCategory'
|
||
AppCeremonyResult:
|
||
description: AppCeremonyResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppCeremony'
|
||
AppCeremonyListResult:
|
||
description: AppCeremonyListResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppCeremonyList'
|
||
AppCeremonyGiftResult:
|
||
description: APP/PC 典礼礼金详情响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppCeremonyGift'
|
||
AppCeremonyGiftListResult:
|
||
description: APP/PC 典礼礼金列表响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppCeremonyGiftList'
|
||
AppRelativeRecordResult:
|
||
description: AppRelativeRecordResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppRelativeRecord'
|
||
AppRelativeRecordListResult:
|
||
description: AppRelativeRecordListResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppRelativeRecordList'
|
||
AppMemoResult:
|
||
description: AppMemoResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppMemo'
|
||
AppMemoListResult:
|
||
description: AppMemoListResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppMemoList'
|
||
AppMeritRecordResult:
|
||
description: AppMeritRecordResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppMeritRecord'
|
||
AppMeritRecordListResult:
|
||
description: AppMeritRecordListResult 专用响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RAppMeritRecordList'
|
||
LifeEventResult:
|
||
description: 人生大事详情响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RLifeEvent'
|
||
LifeEventListResult:
|
||
description: 人生大事列表响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RLifeEventList'
|
||
CeremonyInvitationResult:
|
||
description: 贺礼邀约详情响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RCeremonyInvitation'
|
||
CeremonyInvitationListResult:
|
||
description: 贺礼邀约列表响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RCeremonyInvitationList'
|
||
CeremonyInviteeOptionListResult:
|
||
description: 贺礼受邀候选列表响应
|
||
content:
|
||
application/json:
|
||
schema: { $ref: '#/components/schemas/RCeremonyInviteeOptionList' }
|
||
GenerationPoemResult:
|
||
description: 字辈详情响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RGenerationPoem'
|
||
GenerationPoemListResult:
|
||
description: 字辈列表响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RGenerationPoemList'
|
||
GenerationPoemBatchPreviewResult:
|
||
description: 字辈批量预览响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RGenerationPoemBatchPreview'
|
||
LineagePersonResult:
|
||
description: 世系人物详情响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RLineagePerson'
|
||
LineagePersonDetailResult:
|
||
description: 世系人物受限详情响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RLineagePersonDetail'
|
||
LineagePersonSensitiveProfileResult:
|
||
description: 世系人物敏感健康资料响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RLineagePersonSensitiveProfile'
|
||
LineageRankOptionListResult:
|
||
description: 世系人物排行选项响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RLineageRankOptionList'
|
||
LineagePersonListResult:
|
||
description: 世系人物列表或选项响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RLineagePersonList'
|
||
LineagePersonTreeResult:
|
||
description: 世系树响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RLineagePersonTreeList'
|
||
LineagePersonPageResult:
|
||
description: 世系人物分页响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/LineagePersonPageResult'
|
||
PageResult:
|
||
description: 通用分页响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/PageResult'
|
||
LoginResult:
|
||
description: 登录结果
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RLogin'
|
||
WechatLoginResult:
|
||
description: 微信登录结果
|
||
content:
|
||
application/json:
|
||
schema: { $ref: '#/components/schemas/RWechatLogin' }
|
||
ReferralMeResult:
|
||
description: 当前用户推荐卡
|
||
content:
|
||
application/json:
|
||
schema: { $ref: '#/components/schemas/RReferralMe' }
|
||
FileUploadResult:
|
||
description: 文件上传结果
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RFileUpload'
|
||
VerificationRequireResult:
|
||
description: 验证需求查询结果
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RVerificationRequire'
|
||
VerificationChallengeResult:
|
||
description: 验证挑战生成结果
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RVerificationChallenge'
|
||
VerificationCheckResult:
|
||
description: 验证校验结果
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RVerificationCheck'
|
||
LegacyCaptchaResult:
|
||
description: 兼容旧图形验证码结果
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RLegacyCaptcha'
|
||
FamilyFeedCommentResult:
|
||
description: 家族圈评论对象响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RFamilyFeedComment'
|
||
FamilyFeedCommentListResult:
|
||
description: 家族圈评论列表响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RFamilyFeedCommentList'
|
||
FamilyFeedCommentPageResult:
|
||
description: 家族圈评论分页响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/FamilyFeedCommentPageResult'
|
||
FamilyFeedResult:
|
||
description: 家族圈动态对象响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RFamilyFeed'
|
||
FamilyFeedListResult:
|
||
description: 家族圈动态列表响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RFamilyFeedList'
|
||
FamilyFeedPageResult:
|
||
description: 家族圈动态分页响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/FamilyFeedPageResult'
|
||
NotificationResult:
|
||
description: 消息通知详情响应
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RNotification'
|
||
ContentRecycleItemPageResult:
|
||
description: 内容回收站分页响应
|
||
content: { application/json: { schema: { $ref: '#/components/schemas/ContentRecycleItemPageResult' } } }
|
||
ContentRecycleItemResult:
|
||
description: 内容回收站单项响应
|
||
content: { application/json: { schema: { $ref: '#/components/schemas/RContentRecycleItem' } } }
|
||
schemas:
|
||
ComplianceDocumentContent:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
documentKey: { type: string, enum: [user_agreement, privacy_policy] }
|
||
documentTitle: { type: string }
|
||
versionNo: { type: string }
|
||
documentContent: { type: string }
|
||
contentHash: { type: string }
|
||
effectiveAt: { type: string, format: date-time, nullable: true }
|
||
publishedAt: { type: string, format: date-time }
|
||
RComplianceDocumentContent:
|
||
type: object
|
||
properties:
|
||
code: { type: integer, example: 200 }
|
||
msg: { type: string, example: 操作成功 }
|
||
data: { $ref: '#/components/schemas/ComplianceDocumentContent' }
|
||
EarningWithdrawalBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [requestId, amount, payoutQrOssId, payoutAccountName]
|
||
properties:
|
||
requestId: { type: string, maxLength: 64, description: 客户端生成且重试保持不变的幂等请求号 }
|
||
amount: { type: number, format: double, minimum: 0.01, multipleOf: 0.01 }
|
||
payoutQrOssId: { type: integer, format: int64, description: 统一续传上传接口返回的私有 OSS ID }
|
||
payoutAccountName: { type: string, maxLength: 64 }
|
||
EarningSummary:
|
||
type: object
|
||
properties:
|
||
availableAmount: { type: string, format: decimal, description: 人民币金额(元),精确到分 }
|
||
frozenAmount: { type: string, format: decimal, description: 人民币金额(元),精确到分 }
|
||
minimumWithdrawal: { type: string, format: decimal, nullable: true, description: 人民币金额(元),精确到分 }
|
||
rewardRateBps: { type: integer, nullable: true, description: 基点,10000=100% }
|
||
currency: { type: string, enum: [CNY] }
|
||
withdrawalEnabled: { type: boolean }
|
||
EarningLedger:
|
||
type: object
|
||
properties:
|
||
ledgerId: { type: integer, format: int64 }
|
||
entryType: { type: string, enum: [PAYMENT_REWARD, PAYMENT_REFUND_REVERSAL, WITHDRAWAL_FREEZE, WITHDRAWAL_CANCEL, WITHDRAWAL_REJECT, WITHDRAWAL_PAID, WITHDRAWAL_FAILED] }
|
||
businessId: { type: integer, format: int64, nullable: true }
|
||
availableDelta: { type: string, format: decimal, description: 人民币金额变动(元),可为负数 }
|
||
frozenDelta: { type: string, format: decimal, description: 人民币冻结金额变动(元),可为负数 }
|
||
availableAfter: { type: string, format: decimal, description: 变动后人民币可用金额(元) }
|
||
frozenAfter: { type: string, format: decimal, description: 变动后人民币冻结金额(元) }
|
||
currency: { type: string, enum: [CNY] }
|
||
remark: { type: string }
|
||
createTime: { type: string, format: date-time }
|
||
EarningWithdrawal:
|
||
type: object
|
||
properties:
|
||
withdrawalId: { type: integer, format: int64 }
|
||
withdrawalNo: { type: string }
|
||
amount: { type: string, format: decimal, description: 人民币提现金额(元),精确到分 }
|
||
currency: { type: string, enum: [CNY] }
|
||
payoutQrOssId: { type: integer, format: int64 }
|
||
payoutAccountName: { type: string }
|
||
withdrawalStatus: { type: string, enum: [PENDING, APPROVED, PAYING, PAID, REJECTED, FAILED, CANCELLED], x-dict-type: gen_earning_withdrawal_status }
|
||
auditRemark: { type: string, nullable: true }
|
||
payoutReference: { type: string, nullable: true }
|
||
paidAt: { type: string, format: date-time, nullable: true }
|
||
failureReason: { type: string, nullable: true }
|
||
createTime: { type: string, format: date-time }
|
||
REarningSummary:
|
||
allOf:
|
||
- $ref: '#/components/schemas/RVoid'
|
||
- type: object
|
||
properties: { data: { $ref: '#/components/schemas/EarningSummary' } }
|
||
REarningWithdrawal:
|
||
allOf:
|
||
- $ref: '#/components/schemas/RVoid'
|
||
- type: object
|
||
properties: { data: { $ref: '#/components/schemas/EarningWithdrawal' } }
|
||
EarningLedgerPage:
|
||
type: object
|
||
properties:
|
||
code: { type: integer }
|
||
msg: { type: string }
|
||
rows: { type: array, items: { $ref: '#/components/schemas/EarningLedger' } }
|
||
total: { type: integer, format: int64 }
|
||
EarningWithdrawalPage:
|
||
type: object
|
||
properties:
|
||
code: { type: integer }
|
||
msg: { type: string }
|
||
rows: { type: array, items: { $ref: '#/components/schemas/EarningWithdrawal' } }
|
||
total: { type: integer, format: int64 }
|
||
ContentPasswordBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [password]
|
||
properties:
|
||
password: { type: string, format: password, minLength: 8, maxLength: 128 }
|
||
ContentPasswordRecoveryCodeBody:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
validToken: { type: string, description: 短信风险校验令牌;按租户短信策略要求填写 }
|
||
ContentPasswordRecoveryResetBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [smsCode, newPassword]
|
||
properties:
|
||
smsCode: { type: string, description: 一次性短信验证码 }
|
||
newPassword: { type: string, format: password, minLength: 8, maxLength: 128 }
|
||
GenealogyPermanentDeletionCodeBody:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
validToken: { type: string, description: 短信风险校验令牌;按租户短信策略要求填写 }
|
||
GenealogyPermanentDeletionBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [genealogyName, smsCode]
|
||
properties:
|
||
genealogyName: { type: string, description: 必须与当前家谱名称完全一致 }
|
||
smsCode: { type: string, description: 一次性短信验证码 }
|
||
ContentPasswordRecoveryCapability:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [available]
|
||
properties:
|
||
available: { type: boolean }
|
||
mobileMasked: { type: string, nullable: true, description: 当前实名手机号脱敏值 }
|
||
disabledReason: { type: string, nullable: true, description: 不可找回时的稳定原因 }
|
||
GenealogyPermanentDeletionCapability:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [canDeletePermanently, disabledReasons]
|
||
properties:
|
||
canDeletePermanently: { type: boolean }
|
||
verifiedMobileMasked: { type: string, nullable: true, description: 家谱所有者实名手机号脱敏值 }
|
||
disabledReasons: { type: array, items: { type: string }, description: 资格阻断原因码 }
|
||
GenealogyDeletionTask:
|
||
type: object
|
||
properties:
|
||
taskId: { type: integer, format: int64 }
|
||
genealogyId: { type: integer, format: int64 }
|
||
status: { type: string }
|
||
requestedBy: { type: integer, format: int64 }
|
||
startedAt: { type: string, format: date-time, nullable: true }
|
||
completedAt: { type: string, format: date-time, nullable: true }
|
||
failureReason: { type: string, nullable: true }
|
||
resultSummary: { type: string, nullable: true }
|
||
PersonDocumentBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [lineagePersonId, documentType, documentTitle]
|
||
properties:
|
||
lineagePersonId: { type: integer, format: int64 }
|
||
documentType: { type: string, x-dict-type: gen_person_document_type }
|
||
documentTitle: { type: string, maxLength: 100 }
|
||
maskedIdentifier: { type: string, maxLength: 100 }
|
||
description: { type: string, maxLength: 1000 }
|
||
sortOrder: { type: integer, format: int64 }
|
||
status: { type: string, enum: ['0', '1'] }
|
||
PersonDocumentResourceBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [ossId, usageType]
|
||
properties:
|
||
ossId: { type: integer, format: int64, description: 统一上传接口返回的 OSS ID }
|
||
usageType: { type: string, enum: [FRONT, BACK, ATTACHMENT] }
|
||
sortOrder: { type: integer, format: int64 }
|
||
PersonDocumentResource:
|
||
type: object
|
||
properties:
|
||
resourceId: { type: integer, format: int64 }
|
||
usageType: { type: string, enum: [FRONT, BACK, ATTACHMENT] }
|
||
sortOrder: { type: integer, format: int64 }
|
||
status: { type: string }
|
||
PersonDocument:
|
||
type: object
|
||
properties:
|
||
documentId: { type: integer, format: int64 }
|
||
genealogyId: { type: integer, format: int64 }
|
||
lineagePersonId: { type: integer, format: int64 }
|
||
lineagePersonName: { type: string }
|
||
documentType: { type: string, x-dict-type: gen_person_document_type }
|
||
documentTypeLabel: { type: string, nullable: true }
|
||
documentTypeOptionState: { type: string, enum: [ACTIVE, DISABLED, UNKNOWN] }
|
||
documentTitle: { type: string }
|
||
maskedIdentifier: { type: string }
|
||
description: { type: string }
|
||
uploaderUserId: { type: integer, format: int64 }
|
||
sortOrder: { type: integer, format: int64 }
|
||
status: { type: string }
|
||
contentProtected: { type: boolean }
|
||
contentUnlocked: { type: boolean }
|
||
canEdit: { type: boolean }
|
||
canDelete: { type: boolean }
|
||
resources: { type: array, items: { $ref: '#/components/schemas/PersonDocumentResource' } }
|
||
ContentAccessGrant:
|
||
type: object
|
||
required: [accessToken, expiresAt]
|
||
properties:
|
||
accessToken: { type: string, description: 仅本次响应返回,不持久化原文 }
|
||
expiresAt: { type: string, format: date-time }
|
||
RPersonDocument:
|
||
type: object
|
||
properties: { code: { type: integer }, msg: { type: string }, data: { $ref: '#/components/schemas/PersonDocument' } }
|
||
RPersonDocumentList:
|
||
type: object
|
||
properties: { code: { type: integer }, msg: { type: string }, data: { type: array, items: { $ref: '#/components/schemas/PersonDocument' } } }
|
||
RPersonDocumentResource:
|
||
type: object
|
||
properties: { code: { type: integer }, msg: { type: string }, data: { $ref: '#/components/schemas/PersonDocumentResource' } }
|
||
RContentAccessGrant:
|
||
type: object
|
||
properties: { code: { type: integer }, msg: { type: string }, data: { $ref: '#/components/schemas/ContentAccessGrant' } }
|
||
RBusinessFileAccess:
|
||
type: object
|
||
properties: { code: { type: integer }, msg: { type: string }, data: { $ref: '#/components/schemas/BusinessFileAccess' } }
|
||
BusinessDictionaryOption:
|
||
type: object
|
||
required: [code, label, value, sort, default, enabled]
|
||
properties:
|
||
code:
|
||
type: integer
|
||
format: int64
|
||
label:
|
||
type: string
|
||
value:
|
||
type: string
|
||
sort:
|
||
type: integer
|
||
cssClass:
|
||
type: string
|
||
nullable: true
|
||
listClass:
|
||
type: string
|
||
nullable: true
|
||
default:
|
||
type: boolean
|
||
enabled:
|
||
type: boolean
|
||
description: 当前选项是否可用于新建或编辑;选择接口仅返回 true
|
||
RBusinessDictionaryOptions:
|
||
type: object
|
||
required: [code, msg, data]
|
||
properties:
|
||
code:
|
||
type: integer
|
||
example: 200
|
||
msg:
|
||
type: string
|
||
example: 操作成功
|
||
data:
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/BusinessDictionaryOption'
|
||
RBusinessDictionaryError:
|
||
type: object
|
||
required: [code, msg]
|
||
properties:
|
||
code:
|
||
type: integer
|
||
msg:
|
||
type: string
|
||
data:
|
||
nullable: true
|
||
RVoid:
|
||
type: object
|
||
properties:
|
||
code:
|
||
description: 系统图形验证码或响应状态码
|
||
type: integer
|
||
example: 200
|
||
msg:
|
||
description: 响应消息
|
||
type: string
|
||
example: 操作成功
|
||
data:
|
||
description: 响应数据主体
|
||
nullable: true
|
||
GenealogyQuota:
|
||
type: object
|
||
required: [createUsed, createLimit, createRemaining, canCreate, joinUsed, joinLimit, joinRemaining, canJoin]
|
||
properties:
|
||
createUsed: { description: 当前用户已创建的家谱数量, type: integer, format: int64, minimum: 0, example: 1 }
|
||
createLimit: { description: 每用户可创建家谱上限,-1 表示不限,0 表示禁止,正数表示上限, type: integer, format: int64, minimum: -1, example: 3 }
|
||
createRemaining: { description: 还可创建的家谱数量,-1 表示不限, type: integer, format: int64, minimum: -1, example: 2 }
|
||
canCreate: { description: 当前用户是否还能创建家谱, type: boolean, example: true }
|
||
joinUsed: { description: 已加入的家谱总数,包含自己创建的家谱, type: integer, format: int64, minimum: 0, example: 2 }
|
||
joinLimit: { description: 每用户可加入家谱总数上限,-1 表示不限,0 表示禁止,正数表示上限, type: integer, format: int64, minimum: -1, example: 10 }
|
||
joinRemaining: { description: 还可加入的家谱数量,-1 表示不限, type: integer, format: int64, minimum: -1, example: 8 }
|
||
canJoin: { description: 当前用户是否还能加入其他家谱, type: boolean, example: true }
|
||
RGenealogyQuota:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data: { $ref: '#/components/schemas/GenealogyQuota' }
|
||
RObject:
|
||
type: object
|
||
properties:
|
||
code:
|
||
description: 系统图形验证码或响应状态码
|
||
type: integer
|
||
example: 200
|
||
msg:
|
||
description: 响应消息
|
||
type: string
|
||
example: 操作成功
|
||
data:
|
||
description: 响应数据主体
|
||
type: object
|
||
additionalProperties: true
|
||
RLong:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data: { description: 当前业务用户未读通知数量, type: integer, format: int64, example: 3 }
|
||
RList:
|
||
type: object
|
||
properties:
|
||
code:
|
||
description: 系统图形验证码或响应状态码
|
||
type: integer
|
||
example: 200
|
||
msg:
|
||
description: 响应消息
|
||
type: string
|
||
example: 操作成功
|
||
data:
|
||
description: 响应数据主体
|
||
type: array
|
||
items:
|
||
type: object
|
||
additionalProperties: true
|
||
PageResult:
|
||
type: object
|
||
properties:
|
||
code:
|
||
description: 系统图形验证码或响应状态码
|
||
type: integer
|
||
example: 200
|
||
msg:
|
||
description: 响应消息
|
||
type: string
|
||
example: 操作成功
|
||
rows:
|
||
description: 分页数据列表
|
||
type: array
|
||
items:
|
||
type: object
|
||
additionalProperties: true
|
||
total:
|
||
type: integer
|
||
example: 0
|
||
RLogin:
|
||
type: object
|
||
properties:
|
||
code:
|
||
description: 系统图形验证码或响应状态码
|
||
type: integer
|
||
example: 200
|
||
msg:
|
||
description: 响应消息
|
||
type: string
|
||
example: 操作成功
|
||
data:
|
||
description: 响应数据主体
|
||
$ref: '#/components/schemas/LoginVo'
|
||
RWechatLogin:
|
||
type: object
|
||
properties:
|
||
code: { type: integer, example: 200 }
|
||
msg: { type: string, example: 操作成功 }
|
||
data: { $ref: '#/components/schemas/WechatLoginVo' }
|
||
RReferralMe:
|
||
type: object
|
||
properties:
|
||
code: { type: integer, example: 200 }
|
||
msg: { type: string, example: 操作成功 }
|
||
data: { $ref: '#/components/schemas/ReferralMeVo' }
|
||
RFileUpload:
|
||
type: object
|
||
properties:
|
||
code:
|
||
description: 系统图形验证码或响应状态码
|
||
type: integer
|
||
example: 200
|
||
msg:
|
||
description: 响应消息
|
||
type: string
|
||
example: 操作成功
|
||
data:
|
||
description: 响应数据主体
|
||
$ref: '#/components/schemas/FileUploadVo'
|
||
LoginVo:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [access_token]
|
||
properties:
|
||
access_token:
|
||
type: string
|
||
WechatCodeBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [code]
|
||
properties:
|
||
code:
|
||
type: string
|
||
description: 微信一次性授权码;不得提交 AppSecret、openId、unionId、userId 或 tenantId
|
||
WechatLoginVo:
|
||
type: object
|
||
required: [status]
|
||
properties:
|
||
status: { type: string, enum: [AUTHENTICATED, ACCOUNT_BINDING_REQUIRED] }
|
||
login:
|
||
nullable: true
|
||
allOf: [{ $ref: '#/components/schemas/LoginVo' }]
|
||
ReferralMeVo:
|
||
type: object
|
||
required: [referralCode, referredUserCount, shareTitle, shareText, shareUrl]
|
||
properties:
|
||
referralCode: { type: string, description: 当前用户稳定推荐码 }
|
||
referredUserCount: { type: integer, format: int64, minimum: 0 }
|
||
shareTitle: { type: string }
|
||
shareText: { type: string }
|
||
shareUrl: { type: string, format: uri, description: 基于租户 HTTPS H5 域名和稳定推荐码生成的分享链接 }
|
||
FileUploadVo:
|
||
type: object
|
||
properties:
|
||
ossId:
|
||
description: OSS文件ID,表单内部使用,用户侧应通过上传组件获取
|
||
type: string
|
||
pattern: '^[1-9][0-9]*$'
|
||
url:
|
||
type: string
|
||
thumbnailUrl:
|
||
type: string
|
||
nullable: true
|
||
fileName:
|
||
description: 原始文件名
|
||
type: string
|
||
originalName:
|
||
type: string
|
||
PasswordRegisterBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [grantType, tenantId, phone, password, smsCode]
|
||
properties:
|
||
grantType:
|
||
description: 授权类型,例如password、sms、wechat、apple
|
||
type: string
|
||
enum: [password]
|
||
example: password
|
||
tenantId:
|
||
description: 租户ID,用于区分不同租户的数据和验证策略
|
||
type: string
|
||
example: "000000"
|
||
phone:
|
||
description: 手机号
|
||
type: string
|
||
example: "13800000000"
|
||
password:
|
||
type: string
|
||
description: 32 位 MD5
|
||
example: e10adc3949ba59abbe56e057f20f883e
|
||
nickName:
|
||
description: 用户昵称
|
||
type: string
|
||
registerSource:
|
||
description: 注册来源,例如APP、PC、H5、MINI_PROGRAM
|
||
type: string
|
||
referralCode:
|
||
description: 可选稳定推荐码,独立于家谱邀请码
|
||
type: string
|
||
smsCode:
|
||
description: 4 位短信验证码
|
||
type: string
|
||
pattern: '^\d{4}$'
|
||
example: "1234"
|
||
PasswordLoginBody:
|
||
description: APP 用户密码登录请求;验证场景由后端按 APP_PASSWORD_LOGIN 路由的当前激活绑定解析,前端不得提交 sceneCode;validToken 是否需要由解析后场景的策略决定。
|
||
type: object
|
||
additionalProperties: false
|
||
required: [grantType, tenantId, phone, password]
|
||
properties:
|
||
grantType:
|
||
description: 授权类型,例如password、sms、wechat、apple
|
||
type: string
|
||
enum: [password]
|
||
example: password
|
||
tenantId:
|
||
description: 租户ID,用于区分不同租户的数据和验证策略
|
||
type: string
|
||
example: "000000"
|
||
phone:
|
||
description: 登录手机号,也是行为验证票据绑定的验证主体。
|
||
type: string
|
||
example: "13800000000"
|
||
password:
|
||
type: string
|
||
description: 32 位 MD5
|
||
example: e10adc3949ba59abbe56e057f20f883e
|
||
validToken:
|
||
description: 验证中心通过后返回的一次性票据;后台验证策略关闭时可为空,开启时必须提交。
|
||
type: string
|
||
SmsLoginBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [grantType, tenantId, phone, smsCode]
|
||
properties:
|
||
grantType:
|
||
description: 授权类型,例如password、sms、wechat、apple
|
||
type: string
|
||
enum: [sms]
|
||
example: sms
|
||
tenantId:
|
||
description: 租户ID,用于区分不同租户的数据和验证策略
|
||
type: string
|
||
example: "000000"
|
||
phone:
|
||
description: 手机号
|
||
type: string
|
||
example: "13800000000"
|
||
smsCode:
|
||
description: 4 位短信验证码
|
||
type: string
|
||
pattern: '^\d{4}$'
|
||
example: "1234"
|
||
SmsCodeBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [grantType, tenantId, phone]
|
||
properties:
|
||
grantType:
|
||
description: 授权类型,例如password、sms、wechat、apple
|
||
type: string
|
||
enum: [sms]
|
||
example: sms
|
||
tenantId:
|
||
description: 租户ID,用于区分不同租户的数据和验证策略
|
||
type: string
|
||
example: "000000"
|
||
phone:
|
||
description: 手机号
|
||
type: string
|
||
example: "13800000000"
|
||
validToken:
|
||
description: 验证中心通过后返回的票据,仅用于发送短信验证码;后台验证策略关闭时可为空,开启时必填。
|
||
type: string
|
||
ProfileUpdateBody:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
nickName:
|
||
description: 用户昵称
|
||
type: string
|
||
maxLength: 30
|
||
realName:
|
||
description: 真实姓名
|
||
type: string
|
||
maxLength: 30
|
||
avatar:
|
||
description: 头像文件OSS ID
|
||
type: integer
|
||
format: int64
|
||
sex:
|
||
description: "字典 sys_user_sex:0=男,1=女,2=未知"
|
||
type: string
|
||
enum: ["0", "1", "2"]
|
||
example: "2"
|
||
x-dict-type: sys_user_sex
|
||
birthday:
|
||
description: 生日,格式 yyyy-MM-dd
|
||
type: string
|
||
format: date
|
||
email:
|
||
description: 邮箱
|
||
type: string
|
||
format: email
|
||
maxLength: 100
|
||
PasswordChangeBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [oldPassword, newPassword]
|
||
properties:
|
||
oldPassword:
|
||
type: string
|
||
description: 32 位 MD5
|
||
newPassword:
|
||
type: string
|
||
description: 32 位 MD5
|
||
PasswordResetBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [grantType, tenantId, phone, smsCode, newPassword]
|
||
properties:
|
||
grantType:
|
||
description: 授权类型
|
||
type: string
|
||
enum: [password]
|
||
example: password
|
||
tenantId:
|
||
description: 租户ID,用于区分不同租户的数据和验证策略
|
||
type: string
|
||
example: "000000"
|
||
phone:
|
||
description: 手机号
|
||
type: string
|
||
smsCode:
|
||
description: 4 位短信验证码
|
||
type: string
|
||
pattern: '^\d{4}$'
|
||
example: "1234"
|
||
newPassword:
|
||
type: string
|
||
description: 32 位 MD5
|
||
PhoneChangeBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [phone, smsCode, currentPassword]
|
||
properties:
|
||
phone:
|
||
description: 新手机号
|
||
type: string
|
||
smsCode:
|
||
description: 4 位短信验证码
|
||
type: string
|
||
pattern: '^\d{4}$'
|
||
example: "1234"
|
||
currentPassword:
|
||
description: 当前账户密码的32位MD5;校验成功且新手机号短信验证码有效后才允许换绑
|
||
type: string
|
||
pattern: '^[a-fA-F0-9]{32}$'
|
||
AccountDeactivateBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [smsCode]
|
||
properties:
|
||
smsCode:
|
||
description: 4 位短信验证码
|
||
type: string
|
||
pattern: '^\d{4}$'
|
||
example: "1234"
|
||
ResumableInitBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [uploadId, fileName, fileMd5, totalSize, totalChunks, chunkSize]
|
||
properties:
|
||
uploadId:
|
||
description: 客户端生成并在整个上传过程保持不变的上传任务ID
|
||
type: string
|
||
fileName:
|
||
description: 原始文件名
|
||
type: string
|
||
fileMd5:
|
||
description: 完整文件MD5,用于秒传和完整性校验
|
||
type: string
|
||
pattern: '^[a-fA-F0-9]{32}$'
|
||
totalSize:
|
||
description: 完整文件大小,单位字节
|
||
type: integer
|
||
format: int64
|
||
minimum: 1
|
||
totalChunks:
|
||
description: 总分片数
|
||
type: integer
|
||
minimum: 1
|
||
chunkSize:
|
||
description: 单个分片大小,单位字节;除最后一片外每片必须严格等于该值
|
||
type: integer
|
||
format: int64
|
||
minimum: 1
|
||
example: 4194304
|
||
contentType:
|
||
description: 文件MIME类型,例如 image/jpeg、video/mp4
|
||
type: string
|
||
ResumableCompleteBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [uploadId, fileName, fileMd5, totalSize, totalChunks]
|
||
properties:
|
||
uploadId:
|
||
description: 分片上传任务ID
|
||
type: string
|
||
fileName:
|
||
description: 原始文件名,必须与初始化请求一致
|
||
type: string
|
||
fileMd5:
|
||
description: 完整文件MD5,用于秒传和完整性校验
|
||
type: string
|
||
pattern: '^[a-fA-F0-9]{32}$'
|
||
totalSize:
|
||
description: 完整文件大小,单位字节
|
||
type: integer
|
||
format: int64
|
||
minimum: 1
|
||
totalChunks:
|
||
description: 总分片数,必须与初始化请求一致
|
||
type: integer
|
||
minimum: 1
|
||
GenerationPoemView:
|
||
type: object
|
||
properties:
|
||
poemId:
|
||
description: 字辈记录ID
|
||
type: integer
|
||
format: int64
|
||
genealogyId:
|
||
description: 所属家谱ID
|
||
type: integer
|
||
format: int64
|
||
genealogyNo:
|
||
description: 家谱编号
|
||
type: string
|
||
genealogyName:
|
||
description: 家谱名称
|
||
type: string
|
||
generationNo:
|
||
description: 世代序号
|
||
type: integer
|
||
format: int64
|
||
generationText:
|
||
description: 字辈文字
|
||
type: string
|
||
description:
|
||
description: 字辈说明
|
||
type: string
|
||
sortOrder:
|
||
description: 排序值,数值越小越靠前
|
||
type: integer
|
||
format: int64
|
||
status:
|
||
description: "字典 sys_normal_disable:0=正常,1=停用"
|
||
type: string
|
||
enum: ["0", "1"]
|
||
example: "0"
|
||
x-dict-type: sys_normal_disable
|
||
GenerationPoemBatchItemView:
|
||
type: object
|
||
properties:
|
||
poemId:
|
||
description: 现有字辈记录ID;新增时为空
|
||
type: integer
|
||
format: int64
|
||
generationNo:
|
||
description: 世代序号
|
||
type: integer
|
||
format: int64
|
||
oldGenerationText:
|
||
description: 保存前字辈文字
|
||
type: string
|
||
newGenerationText:
|
||
description: 保存后字辈文字
|
||
type: string
|
||
oldStatus:
|
||
description: 保存前状态
|
||
type: string
|
||
newStatus:
|
||
description: 保存后状态
|
||
type: string
|
||
action:
|
||
description: 预览动作,create、update、keep 或 disable
|
||
type: string
|
||
warning:
|
||
description: 需要用户确认的变更提示
|
||
type: string
|
||
GenerationPoemBatchPreviewView:
|
||
type: object
|
||
properties:
|
||
genealogyId:
|
||
description: 所属家谱ID
|
||
type: integer
|
||
format: int64
|
||
genealogyNo:
|
||
description: 家谱编号
|
||
type: string
|
||
genealogyName:
|
||
description: 家谱名称
|
||
type: string
|
||
createCount:
|
||
description: 将新增的字辈数量
|
||
type: integer
|
||
updateCount:
|
||
description: 将修改或恢复的字辈数量
|
||
type: integer
|
||
keepCount:
|
||
description: 保持不变的字辈数量
|
||
type: integer
|
||
disableCount:
|
||
description: 将停用的字辈数量
|
||
type: integer
|
||
items:
|
||
description: 按世代排序的逐项变更预览
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/GenerationPoemBatchItemView'
|
||
RGenerationPoem:
|
||
type: object
|
||
properties:
|
||
code:
|
||
description: 响应状态码
|
||
type: integer
|
||
example: 200
|
||
msg:
|
||
description: 响应消息
|
||
type: string
|
||
data:
|
||
$ref: '#/components/schemas/GenerationPoemView'
|
||
RGenerationPoemList:
|
||
type: object
|
||
properties:
|
||
code:
|
||
description: 响应状态码
|
||
type: integer
|
||
example: 200
|
||
msg:
|
||
description: 响应消息
|
||
type: string
|
||
data:
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/GenerationPoemView'
|
||
RGenerationPoemBatchPreview:
|
||
type: object
|
||
properties:
|
||
code:
|
||
description: 响应状态码
|
||
type: integer
|
||
example: 200
|
||
msg:
|
||
description: 响应消息
|
||
type: string
|
||
data:
|
||
$ref: '#/components/schemas/GenerationPoemBatchPreviewView'
|
||
GenerationPoemBatchBody:
|
||
type: object
|
||
required: [poemText]
|
||
properties:
|
||
poemText:
|
||
description: 字辈文本。无分隔符时按单个字拆分;可用空格、逗号、分号、顿号、斜杠或竖线分隔多个字辈。单个字辈最多50个字符,一次最多500个世代。
|
||
type: string
|
||
maxLength: 26000
|
||
example: "德承家亦\n忠厚传芳"
|
||
disableMissing:
|
||
description: 保存时是否停用未出现在新文本中的后续世代;不会删除历史记录。
|
||
type: boolean
|
||
example: false
|
||
BusinessFileAccess:
|
||
type: object
|
||
description: 已完成业务资源授权校验的临时文件访问对象
|
||
additionalProperties: false
|
||
properties:
|
||
fileId: { description: 文件业务ID, type: integer, format: int64 }
|
||
ossId: { description: OSS对象ID, type: integer, format: int64 }
|
||
fileName: { description: 文件名, type: string }
|
||
mediaType: { description: 媒体类型, type: string }
|
||
fileSize: { description: 文件大小(字节), type: integer, format: int64 }
|
||
accessUrl: { description: 有时效的授权访问地址, type: string }
|
||
expiresAt: { description: 访问地址过期时间, type: string, format: date-time }
|
||
GenealogyMemberCapabilities:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
canEdit: { description: 是否可编辑成员, type: boolean }
|
||
canRemove: { description: 是否可移除成员, type: boolean }
|
||
canLeave: { description: 是否可退出家谱, type: boolean }
|
||
canTransferOwner: { description: 是否可转让家主, type: boolean }
|
||
GenealogyMemberPermissionBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [permissionCodes]
|
||
properties:
|
||
permissionCodes:
|
||
type: array
|
||
uniqueItems: true
|
||
items:
|
||
type: string
|
||
enum: [LINEAGE_MANAGE, SENSITIVE_PROFILE_MANAGE, MEMBER_MANAGE, INVITATION_MANAGE, CONTENT_MANAGE, RECYCLE_BIN_MANAGE]
|
||
reason: { type: string }
|
||
GenealogyMemberPermission:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [genealogyId, memberId, permissionCodes]
|
||
properties:
|
||
genealogyId: { type: integer, format: int64 }
|
||
memberId: { type: integer, format: int64 }
|
||
permissionCodes:
|
||
type: array
|
||
uniqueItems: true
|
||
items:
|
||
type: string
|
||
enum: [LINEAGE_MANAGE, SENSITIVE_PROFILE_MANAGE, MEMBER_MANAGE, INVITATION_MANAGE, CONTENT_MANAGE, RECYCLE_BIN_MANAGE]
|
||
RGenealogyMemberPermission:
|
||
type: object
|
||
properties:
|
||
code: { type: integer, format: int32 }
|
||
msg: { type: string }
|
||
data: { $ref: '#/components/schemas/GenealogyMemberPermission' }
|
||
GenealogyMemberPermissionCatalog:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [code, name, groupCode, groupName, description, sensitive, enabled]
|
||
properties:
|
||
code: { type: string, enum: [LINEAGE_MANAGE, SENSITIVE_PROFILE_MANAGE, MEMBER_MANAGE, INVITATION_MANAGE, CONTENT_MANAGE, RECYCLE_BIN_MANAGE] }
|
||
name: { type: string }
|
||
groupCode: { type: string, enum: [GENEALOGY, CONTENT] }
|
||
groupName: { type: string }
|
||
description: { type: string }
|
||
sensitive: { type: boolean }
|
||
enabled: { type: boolean }
|
||
disabledReason: { type: string, nullable: true }
|
||
RGenealogyMemberPermissionCatalogList:
|
||
type: object
|
||
properties:
|
||
code: { type: integer, format: int32 }
|
||
msg: { type: string }
|
||
data:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/GenealogyMemberPermissionCatalog' }
|
||
AppGenealogyMember:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
memberId: { type: integer, format: int64 }
|
||
genealogyId: { type: integer, format: int64 }
|
||
genealogyNo: { type: string }
|
||
genealogyName: { type: string }
|
||
firstAncestorName: { type: string, nullable: true, description: 建谱时登记的始迁祖姓名 }
|
||
rootPersonId: { type: integer, format: int64, nullable: true, description: 始迁祖对应的世系人物ID }
|
||
surname: { type: string }
|
||
appUserId: { type: integer, format: int64 }
|
||
appUserNickName: { type: string }
|
||
lineagePersonId: { type: integer, format: int64, nullable: true }
|
||
lineagePersonNo: { type: string }
|
||
lineagePersonName: { type: string }
|
||
memberName: { type: string }
|
||
roleType: { type: string }
|
||
relationName: { type: string }
|
||
joinSource: { type: string }
|
||
inviterUserId: { type: integer, format: int64, nullable: true }
|
||
inviterNickName: { type: string }
|
||
joinTime: { type: string, format: date-time }
|
||
status: { type: string }
|
||
capabilities: { $ref: '#/components/schemas/GenealogyMemberCapabilities' }
|
||
GenealogyMemberOption:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
memberId: { type: integer, format: int64 }
|
||
appUserId: { type: integer, format: int64 }
|
||
memberName: { type: string }
|
||
relationName: { type: string }
|
||
roleType: { type: string }
|
||
lineagePersonId: { type: integer, format: int64, nullable: true }
|
||
eligible: { type: boolean }
|
||
disabledReason: { type: string, nullable: true }
|
||
capabilities: { $ref: '#/components/schemas/GenealogyMemberCapabilities' }
|
||
AppNotification:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
notificationId: { type: integer, format: int64 }
|
||
genealogyId: { type: integer, format: int64, nullable: true }
|
||
genealogyNo: { type: string }
|
||
genealogyName: { type: string }
|
||
senderUserId: { type: integer, format: int64, nullable: true }
|
||
senderNickName: { type: string }
|
||
noticeType: { type: string, enum: [join_apply, memo_reminder, family_feed, CEREMONY_INVITE] }
|
||
noticeTypeLabel: { type: string, nullable: true, description: 通知类型中文标签 }
|
||
noticeTitle: { type: string }
|
||
noticeContent: { type: string }
|
||
bizType: { type: string }
|
||
bizId: { type: integer, format: int64, nullable: true }
|
||
bizSummary: { type: string }
|
||
publishTime: { type: string, format: date-time }
|
||
readStatus: { description: "字典 gen_notification_read_status:0=未读,1=已读", type: string, enum: ["0", "1"], example: "0", x-dict-type: gen_notification_read_status }
|
||
readTime: { type: string, format: date-time, nullable: true }
|
||
status: { description: "字典 sys_normal_disable:0=正常,1=停用", type: string, enum: ["0", "1"], example: "0", x-dict-type: sys_normal_disable }
|
||
remark: { type: string }
|
||
AppProfile:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
userId: { type: integer, format: int64 }
|
||
tenantId: { type: string }
|
||
userNo: { type: string }
|
||
phone: { description: 当前登录用户本人的手机号, type: string }
|
||
nickName: { type: string }
|
||
realName: { type: string }
|
||
avatarFile: { $ref: '#/components/schemas/BusinessFileAccess' }
|
||
sex: { type: string }
|
||
birthday: { type: string, format: date-time, nullable: true }
|
||
email: { type: string }
|
||
registerSource: { type: string }
|
||
loginIp: { type: string }
|
||
loginDate: { type: string, format: date-time, nullable: true }
|
||
status: { type: string }
|
||
clientKey: { type: string }
|
||
deviceType: { type: string }
|
||
AppGenealogy:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
genealogyId: { type: integer, format: int64 }
|
||
genealogyNo: { type: string }
|
||
genealogyName: { type: string }
|
||
firstAncestorName: { type: string, nullable: true, description: 建谱时登记的始迁祖姓名 }
|
||
rootPersonId: { type: integer, format: int64, nullable: true, description: 始迁祖对应的世系人物ID }
|
||
surname: { type: string }
|
||
ancestralHall: { type: string }
|
||
originPlace: { type: string }
|
||
regionCode: { type: string }
|
||
regionName: { type: string }
|
||
regionFullName: { type: string }
|
||
addressDetail: { type: string }
|
||
coverFile: { $ref: '#/components/schemas/BusinessFileAccess' }
|
||
intro: { type: string }
|
||
ownerUserId: { type: integer, format: int64 }
|
||
visibility: { type: string }
|
||
joinMode: { type: string }
|
||
memberCount: { type: integer, format: int64 }
|
||
personCount: { type: integer, format: int64 }
|
||
status: { type: string }
|
||
roleType: { type: string }
|
||
canManage: { type: boolean }
|
||
canEditContent: { type: boolean }
|
||
lifecycleStatus: { type: string, enum: [normal, archived, delete_pending] }
|
||
archivedAt: { type: string, format: date-time, nullable: true }
|
||
archivedBy: { type: string, pattern: '^[1-9][0-9]*$', nullable: true }
|
||
canArchive: { type: boolean }
|
||
canRestore: { type: boolean }
|
||
canDeletePermanently: { type: boolean }
|
||
deletePermanentlyDisabledReasons: { type: array, items: { type: string } }
|
||
verifiedMobileMasked: { type: string, nullable: true }
|
||
memberStatus: { type: string }
|
||
joinTime: { type: string, format: date-time, nullable: true }
|
||
AppGrowthRecord:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
canEdit: { type: boolean, description: 当前用户是否可编辑该资源 }
|
||
canDelete: { type: boolean, description: 当前用户是否可删除该资源 }
|
||
contentProtected: { type: boolean, description: 是否启用内容密码保护 }
|
||
contentUnlocked: { type: boolean, description: 当前请求是否已通过短时令牌解锁 }
|
||
canManageProtection: { type: boolean, description: 当前用户是否可设置或关闭内容密码 }
|
||
recordId: { type: integer, format: int64 }
|
||
genealogyId: { type: integer, format: int64 }
|
||
genealogyNo: { type: string }
|
||
genealogyName: { type: string }
|
||
surname: { type: string }
|
||
appUserId: { type: integer, format: int64 }
|
||
appUserNickName: { type: string }
|
||
lineagePersonId: { type: integer, format: int64, nullable: true }
|
||
lineagePersonNo: { type: string }
|
||
lineagePersonName: { type: string }
|
||
recordType: { type: string, description: 字典 gen_growth_record_type, x-dict-type: gen_growth_record_type }
|
||
recordTypeLabel: { type: string, nullable: true }
|
||
recordTypeOptionState: { type: string, enum: [ACTIVE, DISABLED, UNKNOWN] }
|
||
recordTitle: { type: string }
|
||
recordContent: { type: string }
|
||
recordDate: { type: string, format: date-time, nullable: true }
|
||
remindTime: { type: string, format: date-time, nullable: true }
|
||
mediaFiles:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/BusinessFileAccess' }
|
||
sortOrder: { type: integer, format: int64 }
|
||
status: { type: string }
|
||
remark: { type: string }
|
||
AppAlbum:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
canEdit: { type: boolean, description: 当前用户是否可编辑该资源 }
|
||
canDelete: { type: boolean, description: 当前用户是否可删除该资源 }
|
||
albumId: { type: integer, format: int64 }
|
||
genealogyId: { type: integer, format: int64 }
|
||
genealogyNo: { type: string }
|
||
genealogyName: { type: string }
|
||
surname: { type: string }
|
||
albumName: { type: string }
|
||
albumDesc: { type: string }
|
||
coverFile: { $ref: '#/components/schemas/BusinessFileAccess' }
|
||
photoCount: { type: integer, format: int64 }
|
||
sortOrder: { type: integer, format: int64 }
|
||
status: { type: string }
|
||
remark: { type: string }
|
||
AppAlbumPhoto:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
canEdit: { type: boolean, description: 当前用户是否可编辑该资源 }
|
||
canDelete: { type: boolean, description: 当前用户是否可删除该资源 }
|
||
photoId: { type: integer, format: int64 }
|
||
genealogyId: { type: integer, format: int64 }
|
||
genealogyNo: { type: string }
|
||
genealogyName: { type: string }
|
||
surname: { type: string }
|
||
albumId: { type: integer, format: int64 }
|
||
albumName: { type: string }
|
||
photoFile: { $ref: '#/components/schemas/BusinessFileAccess' }
|
||
photoTitle: { type: string }
|
||
photoDesc: { type: string }
|
||
photographer: { type: string }
|
||
shootTime: { type: string, format: date-time, nullable: true }
|
||
sortOrder: { type: integer, format: int64 }
|
||
status: { type: string }
|
||
remark: { type: string }
|
||
AppVideo:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
videoId: { type: integer, format: int64 }
|
||
genealogyId: { type: integer, format: int64 }
|
||
genealogyNo: { type: string }
|
||
genealogyName: { type: string }
|
||
surname: { type: string }
|
||
videoTitle: { type: string }
|
||
videoDesc: { type: string }
|
||
coverFile: { $ref: '#/components/schemas/BusinessFileAccess' }
|
||
videoFile: { $ref: '#/components/schemas/BusinessFileAccess' }
|
||
durationSeconds: { type: integer, format: int64 }
|
||
publisherUserId: { type: integer, format: int64 }
|
||
publisherNickName: { type: string }
|
||
publishTime: { type: string, format: date-time, nullable: true }
|
||
viewCount: { type: integer, format: int64 }
|
||
likeCount: { type: integer, format: int64 }
|
||
commentCount: { type: integer, format: int64 }
|
||
likedByCurrentUser: { type: boolean }
|
||
sortOrder: { type: integer, format: int64 }
|
||
status: { type: string }
|
||
remark: { type: string }
|
||
canEdit: { description: 当前用户是否可编辑, type: boolean }
|
||
canDelete: { description: 当前用户是否可删除, type: boolean }
|
||
AppArticleCategoryOption:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
categoryId: { type: integer, format: int64 }
|
||
categoryName: { type: string }
|
||
enabled: { type: boolean }
|
||
sortOrder: { type: integer, format: int64 }
|
||
AppArticleCategory:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [categoryId, genealogyId, categoryName, sortOrder, status]
|
||
properties:
|
||
categoryId: { type: integer, format: int64 }
|
||
genealogyId: { type: integer, format: int64 }
|
||
genealogyNo: { type: string }
|
||
genealogyName: { type: string }
|
||
surname: { type: string }
|
||
categoryCode: { type: string }
|
||
categoryName: { type: string }
|
||
categoryDesc: { type: string }
|
||
sortOrder: { type: integer, format: int64 }
|
||
status: { type: string }
|
||
remark: { type: string }
|
||
createTime: { type: string, format: date-time, nullable: true }
|
||
AppArticle:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
canEdit: { type: boolean, description: 当前用户是否可编辑该资源 }
|
||
canDelete: { type: boolean, description: 当前用户是否可删除该资源 }
|
||
contentProtected: { type: boolean, description: 是否启用内容密码保护 }
|
||
contentUnlocked: { type: boolean, description: 当前请求是否已通过短时令牌解锁 }
|
||
canManageProtection: { type: boolean, description: 当前用户是否可设置或关闭内容密码 }
|
||
articleId: { type: integer, format: int64 }
|
||
genealogyId: { type: integer, format: int64 }
|
||
genealogyNo: { type: string }
|
||
genealogyName: { type: string }
|
||
surname: { type: string }
|
||
categoryId: { type: integer, format: int64 }
|
||
categoryName: { type: string }
|
||
categoryCode: { type: string }
|
||
articleTitle: { type: string }
|
||
articleSummary: { type: string }
|
||
coverFile: { $ref: '#/components/schemas/BusinessFileAccess' }
|
||
articleContent: { type: string }
|
||
authorName: { type: string }
|
||
publishTime: { type: string, format: date-time, nullable: true }
|
||
viewCount: { type: integer, format: int64 }
|
||
sortOrder: { type: integer, format: int64 }
|
||
status: { type: string }
|
||
remark: { type: string }
|
||
AppCeremony:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
canEdit: { type: boolean, description: 当前用户是否可编辑该资源 }
|
||
canDelete: { type: boolean, description: 当前用户是否可删除该资源 }
|
||
ceremonyId: { type: integer, format: int64 }
|
||
genealogyId: { type: integer, format: int64 }
|
||
genealogyNo: { type: string }
|
||
genealogyName: { type: string }
|
||
surname: { type: string }
|
||
sponsorUserId: { type: integer, format: int64 }
|
||
sponsorNickName: { type: string }
|
||
ceremonyType: { type: string, description: 字典 gen_ceremony_type;返回当前租户稳定编码,中文名称由字典标签提供, x-dict-type: gen_ceremony_type }
|
||
ceremonyTypeLabel: { type: string, nullable: true }
|
||
ceremonyTypeOptionState: { type: string, enum: [ACTIVE, DISABLED, UNKNOWN] }
|
||
ceremonyTitle: { type: string }
|
||
ceremonyDesc: { type: string }
|
||
ceremonyTime: { type: string, format: date-time, nullable: true }
|
||
location: { type: string }
|
||
locationAddress: { type: string }
|
||
longitude: { type: number }
|
||
latitude: { type: number }
|
||
coverFile: { $ref: '#/components/schemas/BusinessFileAccess' }
|
||
giftCount: { type: integer, format: int64 }
|
||
giftAmount: { description: 人民币累计金额(元),0 至 9999999999.99, type: string, format: decimal }
|
||
sortOrder: { type: integer, format: int64 }
|
||
status: { type: string }
|
||
remark: { type: string }
|
||
createTime: { type: string, format: date-time, nullable: true }
|
||
AppCeremonyGift:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
canEdit: { type: boolean, description: 当前用户是否可编辑该资源 }
|
||
canDelete: { type: boolean, description: 当前用户是否可删除该资源 }
|
||
giftId: { type: integer, format: int64 }
|
||
genealogyId: { type: integer, format: int64 }
|
||
genealogyNo: { type: string }
|
||
genealogyName: { type: string }
|
||
surname: { type: string }
|
||
ceremonyId: { type: integer, format: int64 }
|
||
ceremonyTitle: { type: string }
|
||
giverUserId: { type: integer, format: int64 }
|
||
giverNickName: { type: string }
|
||
giverName: { type: string }
|
||
giftAmount: { description: 人民币金额(元),0 至 9999999999.99, type: string, format: decimal }
|
||
giftMessage: { type: string }
|
||
giftTime: { type: string, format: date-time, nullable: true }
|
||
status: { type: string }
|
||
remark: { type: string }
|
||
AppLifeEvent:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
eventId: { type: integer, format: int64 }
|
||
genealogyId: { type: integer, format: int64 }
|
||
lineagePersonId: { type: integer, format: int64 }
|
||
creatorUserId: { type: integer, format: int64 }
|
||
eventType: { type: string }
|
||
eventTitle: { type: string }
|
||
eventContent: { type: string }
|
||
eventDate: { type: string, format: date }
|
||
datePrecision: { type: string }
|
||
eventPlace: { type: string }
|
||
sourceDescription: { type: string }
|
||
mediaFiles:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/BusinessFileAccess' }
|
||
sortOrder: { type: integer, format: int64 }
|
||
status: { type: string }
|
||
remark: { type: string }
|
||
canEdit: { type: boolean, description: 当前用户是否可编辑 }
|
||
canDelete: { type: boolean, description: 当前用户是否可删除 }
|
||
AppRelativeRecord:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
canEdit: { type: boolean, description: 当前用户是否可编辑该资源 }
|
||
canDelete: { type: boolean, description: 当前用户是否可删除该资源 }
|
||
relativeId: { type: integer, format: int64 }
|
||
genealogyId: { type: integer, format: int64 }
|
||
genealogyNo: { type: string }
|
||
genealogyName: { type: string }
|
||
surname: { type: string }
|
||
appUserId: { type: integer, format: int64 }
|
||
appUserNickName: { type: string }
|
||
relativeName: { type: string }
|
||
relationName: { type: string }
|
||
eventName: { type: string }
|
||
eventTime: { type: string, format: date-time, nullable: true }
|
||
giftAmount: { description: 人民币金额(元),0 至 9999999999.99, type: string, format: decimal }
|
||
recordContent: { type: string }
|
||
mediaFiles:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/BusinessFileAccess' }
|
||
sortOrder: { type: integer, format: int64 }
|
||
status: { type: string }
|
||
remark: { type: string }
|
||
createTime: { type: string, format: date-time, nullable: true }
|
||
AppMemo:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
canEdit: { type: boolean, description: 当前用户是否可编辑该资源 }
|
||
canDelete: { type: boolean, description: 当前用户是否可删除该资源 }
|
||
memoId: { type: integer, format: int64 }
|
||
genealogyId: { type: integer, format: int64 }
|
||
genealogyNo: { type: string }
|
||
genealogyName: { type: string }
|
||
surname: { type: string }
|
||
appUserId: { type: integer, format: int64 }
|
||
appUserNickName: { type: string }
|
||
memoType: { type: string, enum: [general, benefactor], description: general=普通备忘,benefactor=家族恩人 }
|
||
memoTitle: { type: string }
|
||
memoContent: { type: string }
|
||
remindTime: { type: string, format: date-time, nullable: true }
|
||
completed: { type: string }
|
||
mediaFiles:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/BusinessFileAccess' }
|
||
sortOrder: { type: integer, format: int64 }
|
||
status: { type: string }
|
||
remark: { type: string }
|
||
createTime: { type: string, format: date-time, nullable: true }
|
||
AppMeritRecord:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
canEdit: { type: boolean, description: 当前用户是否可编辑该资源 }
|
||
canDelete: { type: boolean, description: 当前用户是否可删除该资源 }
|
||
meritId: { type: integer, format: int64 }
|
||
genealogyId: { type: integer, format: int64 }
|
||
genealogyNo: { type: string }
|
||
genealogyName: { type: string }
|
||
surname: { type: string }
|
||
appUserId: { type: integer, format: int64 }
|
||
appUserNickName: { type: string }
|
||
donorName: { type: string }
|
||
meritType: { type: string }
|
||
meritTypeLabel: { type: string, nullable: true }
|
||
meritTypeOptionState: { type: string, enum: [ACTIVE, DISABLED, UNKNOWN] }
|
||
meritTitle: { type: string }
|
||
meritContent: { type: string }
|
||
mediaFiles:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/BusinessFileAccess' }
|
||
amount: { description: 人民币金额(元),0 至 9999999999.99, type: string, format: decimal }
|
||
meritTime: { type: string, format: date-time }
|
||
sortOrder: { type: integer, format: int64 }
|
||
status: { type: string }
|
||
remark: { type: string }
|
||
createTime: { type: string, format: date-time, nullable: true }
|
||
LineageRelationRemoveBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [relativePersonId, relationType]
|
||
properties:
|
||
relativePersonId: { type: integer, format: int64 }
|
||
relationType: { type: string, enum: [spouse, father, mother, child, sibling] }
|
||
AppPromotionVo:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
promotionId: { type: integer, format: int64 }
|
||
promotionKey: { type: string }
|
||
promotionTitle: { type: string }
|
||
promotionDesc: { type: string }
|
||
coverFile:
|
||
allOf: [{ $ref: '#/components/schemas/BusinessFileAccess' }]
|
||
nullable: true
|
||
targetUrl: { type: string }
|
||
platform: { type: string, enum: [app, pc, wechat, all] }
|
||
placement: { type: string, enum: [home_banner, home_bottom, message_bottom, profile_bottom] }
|
||
startAt: { type: string, format: date-time, nullable: true }
|
||
endAt: { type: string, format: date-time, nullable: true }
|
||
sortOrder: { type: integer, format: int64 }
|
||
status: { type: string }
|
||
remark: { type: string }
|
||
ContentLifecycleStatusVo:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [genealogyId, resourceType, resourceId, status, canRestore]
|
||
properties:
|
||
genealogyId: { type: integer, format: int64 }
|
||
resourceType: { type: string, enum: [family_feed, video, growth_record, relative_record, memo, merit_record, article, album, album_photo, ceremony] }
|
||
resourceId: { type: integer, format: int64 }
|
||
status: { type: string, enum: ['0', '1'] }
|
||
canRestore: { type: boolean }
|
||
RAppPromotionList:
|
||
type: object
|
||
properties:
|
||
code: { type: integer, example: 200 }
|
||
msg: { type: string }
|
||
data: { type: array, items: { $ref: '#/components/schemas/AppPromotionVo' } }
|
||
RContentLifecycleStatus:
|
||
type: object
|
||
properties:
|
||
code: { type: integer, example: 200 }
|
||
msg: { type: string }
|
||
data: { $ref: '#/components/schemas/ContentLifecycleStatusVo' }
|
||
|
||
RAppProfile:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
$ref: '#/components/schemas/AppProfile'
|
||
RAppGenealogy:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
$ref: '#/components/schemas/AppGenealogy'
|
||
RAppGenealogyList:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/AppGenealogy' }
|
||
GenealogyUserOrderBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [genealogyIds]
|
||
properties:
|
||
genealogyIds:
|
||
type: array
|
||
uniqueItems: true
|
||
items: { type: string, pattern: '^[1-9][0-9]*$' }
|
||
GenealogyCompletenessItem:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [code, displayText, targetPage]
|
||
properties:
|
||
code: { type: string, example: genealogy_name }
|
||
displayText: { type: string, example: 请完善家谱名称 }
|
||
targetPage: { type: string, enum: [genealogy-profile], example: genealogy-profile }
|
||
GenealogyCompleteness:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [ruleVersion, totalCount, completedCount, completionRate, missingItems]
|
||
properties:
|
||
ruleVersion: { type: string, example: v1 }
|
||
totalCount: { type: integer, example: 10 }
|
||
completedCount: { type: integer, example: 8 }
|
||
completionRate: { type: integer, minimum: 0, maximum: 100, example: 80 }
|
||
missingItems:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/GenealogyCompletenessItem' }
|
||
RGenealogyCompleteness:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data: { $ref: '#/components/schemas/GenealogyCompleteness' }
|
||
RAppGenealogyMember:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
$ref: '#/components/schemas/AppGenealogyMember'
|
||
RAppGenealogyMemberList:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/AppGenealogyMember' }
|
||
RGenealogyMemberOptionList:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/GenealogyMemberOption' }
|
||
RAppNotification:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
$ref: '#/components/schemas/AppNotification'
|
||
RAppNotificationList:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/AppNotification' }
|
||
RAppGrowthRecord:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
$ref: '#/components/schemas/AppGrowthRecord'
|
||
RAppGrowthRecordList:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/AppGrowthRecord' }
|
||
RAppAlbum:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
$ref: '#/components/schemas/AppAlbum'
|
||
RAppAlbumList:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/AppAlbum' }
|
||
RAppAlbumPhoto:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
$ref: '#/components/schemas/AppAlbumPhoto'
|
||
RAppAlbumPhotoList:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/AppAlbumPhoto' }
|
||
RAppVideo:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
$ref: '#/components/schemas/AppVideo'
|
||
RAppVideoList:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/AppVideo' }
|
||
RAppArticle:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
$ref: '#/components/schemas/AppArticle'
|
||
RAppArticleList:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/AppArticle' }
|
||
RAppArticleCategoryOptionList:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/AppArticleCategoryOption' }
|
||
RAppArticleCategory:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
$ref: '#/components/schemas/AppArticleCategory'
|
||
RAppCeremony:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
$ref: '#/components/schemas/AppCeremony'
|
||
RAppCeremonyList:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/AppCeremony' }
|
||
RAppCeremonyGift:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
$ref: '#/components/schemas/AppCeremonyGift'
|
||
RAppCeremonyGiftList:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/AppCeremonyGift' }
|
||
RAppRelativeRecord:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
$ref: '#/components/schemas/AppRelativeRecord'
|
||
RAppRelativeRecordList:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/AppRelativeRecord' }
|
||
RAppMemo:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
$ref: '#/components/schemas/AppMemo'
|
||
RAppMemoList:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/AppMemo' }
|
||
RAppMeritRecord:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
$ref: '#/components/schemas/AppMeritRecord'
|
||
RAppMeritRecordList:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/AppMeritRecord' }
|
||
LineagePersonSortOrderBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [sortOrder]
|
||
properties:
|
||
sortOrder:
|
||
description: 人物在当前家谱中的排行值
|
||
type: integer
|
||
format: int64
|
||
example: 100
|
||
LineagePersonBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [bindingMode, name]
|
||
properties:
|
||
bindingMode:
|
||
description: "账号绑定方式:NONE=不绑定账号;SELF=绑定当前登录业务用户;SPECIFIED=由有管理权限的操作者指定 appUserId"
|
||
type: string
|
||
enum: [NONE, SELF, SPECIFIED]
|
||
example: NONE
|
||
appUserId:
|
||
description: 仅 bindingMode=SPECIFIED 时必填;NONE/SELF 时必须不传。指定用户必须属于当前租户、状态正常,且未绑定当前家谱的其他有效世系人物
|
||
type: integer
|
||
format: int64
|
||
personNo:
|
||
description: 人物编号;不传时由服务端生成
|
||
type: string
|
||
name:
|
||
description: 姓名
|
||
type: string
|
||
aliasName:
|
||
description: 别名或曾用名
|
||
type: string
|
||
courtesyName:
|
||
description: 字
|
||
type: string
|
||
zodiacCode:
|
||
description: 生肖稳定编码,从租户业务字典 gen_zodiac 选择
|
||
type: string
|
||
x-dict-type: gen_zodiac
|
||
educationCode:
|
||
description: 学历分类稳定编码,从业务字典 gen_education_type 选择
|
||
type: string
|
||
x-dict-type: gen_education_type
|
||
deathExpressionCode:
|
||
description: 过世类型稳定编码,从业务字典 gen_death_expression 选择
|
||
type: string
|
||
x-dict-type: gen_death_expression
|
||
relationVariantCode:
|
||
description: 添加父母或配偶关系时使用的显示修饰稳定编码;父母取 gen_parent_relationship_variant,配偶取 gen_spouse_relationship_variant
|
||
type: string
|
||
sex:
|
||
description: "字典 sys_user_sex:0=男,1=女,2=未知"
|
||
type: string
|
||
enum: ["0", "1", "2"]
|
||
example: "0"
|
||
x-dict-type: sys_user_sex
|
||
generation:
|
||
description: 世代序号
|
||
type: integer
|
||
format: int64
|
||
generationName:
|
||
description: 字辈或辈分
|
||
type: string
|
||
rankId:
|
||
description: 世系排行配置ID;从当前家谱的排行选项接口选择,留空表示不设置排行
|
||
type: integer
|
||
format: int64
|
||
nullable: true
|
||
fatherId:
|
||
description: 父亲人物ID,必须属于当前家谱
|
||
type: integer
|
||
format: int64
|
||
motherId:
|
||
description: 母亲人物ID,必须属于当前家谱
|
||
type: integer
|
||
format: int64
|
||
avatarOssId:
|
||
description: 头像文件OSS ID;用户界面应通过统一上传组件获得,不允许手工录入
|
||
type: string
|
||
pattern: '^[1-9][0-9]*$'
|
||
nullable: true
|
||
birthDate:
|
||
type: string
|
||
format: date-time
|
||
nullable: true
|
||
birthLunar:
|
||
description: "字典 gen_number_yes_no:0=否,1=是"
|
||
type: string
|
||
enum: ["0", "1"]
|
||
example: "0"
|
||
x-dict-type: gen_number_yes_no
|
||
birthPlace:
|
||
description: 出生地
|
||
type: string
|
||
currentAddress:
|
||
description: 现居住地;仅人物详情按权限投影,列表和树不返回
|
||
type: string
|
||
mobile:
|
||
description: 联系电话;详情默认脱敏,有权用户返回完整值
|
||
type: string
|
||
email:
|
||
description: 邮箱;服务端保存为去首尾空白的小写值
|
||
type: string
|
||
format: email
|
||
occupation:
|
||
description: 职业
|
||
type: string
|
||
deathDate:
|
||
type: string
|
||
format: date-time
|
||
nullable: true
|
||
deathLunar:
|
||
description: "字典 gen_number_yes_no:0=否,1=是"
|
||
type: string
|
||
enum: ["0", "1"]
|
||
example: "0"
|
||
x-dict-type: gen_number_yes_no
|
||
deathPlace:
|
||
description: 逝世地
|
||
type: string
|
||
burialPlace:
|
||
description: 安葬地
|
||
type: string
|
||
deathAge:
|
||
description: 享年,允许 0
|
||
type: integer
|
||
format: int32
|
||
minimum: 0
|
||
burialDate:
|
||
description: 安葬日期
|
||
type: string
|
||
format: date
|
||
personStatus:
|
||
description: "字典 gen_lineage_person_status:0=健在,1=已故,2=未知"
|
||
type: string
|
||
enum: ["0", "1", "2"]
|
||
example: "0"
|
||
x-dict-type: gen_lineage_person_status
|
||
biography:
|
||
description: 人物简介
|
||
type: string
|
||
sortOrder:
|
||
description: 排序值,数值越小越靠前
|
||
type: integer
|
||
format: int64
|
||
remark:
|
||
description: 备注
|
||
type: string
|
||
relationName:
|
||
description: 通过添加配偶快捷接口提交时使用的关系显示名称
|
||
type: string
|
||
LineagePersonView:
|
||
type: object
|
||
properties:
|
||
personId: { description: 人物ID, type: integer, format: int64 }
|
||
genealogyId: { description: 家谱ID, type: integer, format: int64 }
|
||
genealogyName: { description: 家谱名称, type: string }
|
||
genealogyNo: { description: 家谱编号, type: string }
|
||
appUserId: { description: 绑定业务用户ID, type: integer, format: int64, nullable: true }
|
||
appUserNickName: { description: 绑定业务用户昵称, type: string }
|
||
personNo: { description: 人物编号, type: string }
|
||
name: { description: 姓名, type: string }
|
||
aliasName: { description: 别名或曾用名, type: string }
|
||
courtesyName: { description: 字, type: string }
|
||
zodiacCode: { description: 生肖稳定编码, type: string, x-dict-type: gen_zodiac }
|
||
zodiacLabel: { description: 生肖显示名称, type: string, nullable: true }
|
||
zodiacOptionState: { description: 生肖历史值状态, type: string, enum: [ACTIVE, DISABLED, UNKNOWN], nullable: true }
|
||
educationCode: { description: 学历分类稳定编码, type: string, x-dict-type: gen_education_type }
|
||
educationLabel: { description: 学历分类显示名称, type: string, nullable: true }
|
||
educationOptionState: { description: 学历历史值状态, type: string, enum: [ACTIVE, DISABLED, UNKNOWN], nullable: true }
|
||
deathExpressionCode: { description: 过世类型稳定编码, type: string, x-dict-type: gen_death_expression }
|
||
deathExpressionLabel: { description: 过世类型显示名称, type: string, nullable: true }
|
||
deathExpressionOptionState: { description: 过世类型历史值状态, type: string, enum: [ACTIVE, DISABLED, UNKNOWN], nullable: true }
|
||
sex: { description: "字典 sys_user_sex:0=男,1=女,2=未知", type: string, enum: ["0", "1", "2"], example: "2", x-dict-type: sys_user_sex }
|
||
generation: { description: 世代序号, type: integer, format: int64 }
|
||
generationName: { description: 字辈或辈分, type: string }
|
||
rankId: { description: 世系排行配置ID, type: integer, format: int64, nullable: true }
|
||
rankName: { description: 世系排行名称,例如始祖、长子、次女, type: string, nullable: true }
|
||
fatherId: { description: 父亲人物ID, type: integer, format: int64, nullable: true }
|
||
fatherName: { description: 父亲姓名, type: string }
|
||
motherId: { description: 母亲人物ID, type: integer, format: int64, nullable: true }
|
||
motherName: { description: 母亲姓名, type: string }
|
||
spouseNames: { description: 配偶姓名,多个使用顿号分隔, type: string }
|
||
avatarFile: { $ref: '#/components/schemas/BusinessFileAccess' }
|
||
birthDate: { description: 出生日期, type: string, format: date-time, nullable: true }
|
||
birthLunar: { description: "字典 gen_number_yes_no:0=否,1=是", type: string, enum: ["0", "1"], example: "0", x-dict-type: gen_number_yes_no }
|
||
birthPlace: { description: 出生地, type: string }
|
||
deathDate: { description: 逝世日期, type: string, format: date-time, nullable: true }
|
||
deathLunar: { description: "字典 gen_number_yes_no:0=否,1=是", type: string, enum: ["0", "1"], example: "0", x-dict-type: gen_number_yes_no }
|
||
deathPlace: { description: 逝世地, type: string }
|
||
burialPlace: { description: 安葬地, type: string }
|
||
occupation: { description: 职业, type: string }
|
||
deathAge: { description: 享年,允许 0, type: integer, format: int32, minimum: 0, nullable: true }
|
||
burialDate: { description: 安葬日期, type: string, format: date, nullable: true }
|
||
personStatus: { description: "字典 gen_lineage_person_status:0=健在,1=已故,2=未知", type: string, enum: ["0", "1", "2"], example: "0", x-dict-type: gen_lineage_person_status }
|
||
biography: { description: 人物简介, type: string }
|
||
sortOrder: { description: 排序值, type: integer, format: int64 }
|
||
status: { description: "字典 sys_normal_disable:0=正常,1=停用", type: string, enum: ["0", "1"], example: "0", x-dict-type: sys_normal_disable }
|
||
canDisable: { type: boolean, description: 当前用户是否可停用该人物 }
|
||
disabledReason: { type: string, nullable: true, description: 不可停用时的稳定原因 }
|
||
canCreateDocument: { type: boolean, description: 当前用户是否可为该人物创建证件档案 }
|
||
canManageDocuments: { type: boolean, description: 当前用户是否可管理该人物证件档案 }
|
||
remark: { description: 备注, type: string }
|
||
LineagePersonDetailView:
|
||
allOf:
|
||
- $ref: '#/components/schemas/LineagePersonView'
|
||
- type: object
|
||
properties:
|
||
currentAddress: { description: 有权查看时返回完整现居住地,否则为空, type: string, nullable: true }
|
||
mobile: { description: 默认脱敏;人物本人、谱主或具备成员管理权限的管理员返回完整号码, type: string, nullable: true }
|
||
email: { description: 有权查看时返回完整邮箱,否则为空, type: string, format: email, nullable: true }
|
||
canManageSensitiveMedicalHistory: { description: 当前用户是否可管理敏感健康资料, type: boolean }
|
||
LineagePersonSensitiveProfileBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [hereditaryMedicalHistory]
|
||
properties:
|
||
hereditaryMedicalHistory: { description: 遗传病史正文,仅写入独立加密表, type: string }
|
||
LineagePersonSensitiveProfileView:
|
||
type: object
|
||
properties:
|
||
personId: { description: 世系人物ID, type: integer, format: int64 }
|
||
hereditaryMedicalHistory: { description: 遗传病史正文,仅授权用户可读, type: string, nullable: true }
|
||
present: { description: 当前人物是否存在敏感档案, type: boolean }
|
||
updatedAt: { description: 最近更新时间, type: string, format: date-time, nullable: true }
|
||
canManage: { description: 当前用户是否可管理该敏感档案, type: boolean }
|
||
LineagePersonTreeView:
|
||
allOf:
|
||
- $ref: '#/components/schemas/LineagePersonView'
|
||
- type: object
|
||
properties:
|
||
relationType: { description: "固定结构关系:father=父亲,mother=母亲,spouse=配偶;child/sibling 仅为命令类型,不持久化", type: string, enum: [father, mother, spouse], example: spouse, x-dict-type: gen_lineage_relation_type }
|
||
relationName: { description: 关系显示名称, type: string }
|
||
relationVariantCode: { description: 关系显示修饰稳定编码, type: string, nullable: true }
|
||
relationVariantLabel: { description: 关系显示修饰名称, type: string, nullable: true }
|
||
relationVariantOptionState: { description: 关系修饰历史值状态, type: string, enum: [ACTIVE, DISABLED, UNKNOWN], nullable: true }
|
||
spouses:
|
||
description: 配偶节点
|
||
type: array
|
||
items: { $ref: '#/components/schemas/LineagePersonTreeView' }
|
||
children:
|
||
description: 子女节点
|
||
type: array
|
||
items: { $ref: '#/components/schemas/LineagePersonTreeView' }
|
||
RLineagePerson:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data: { $ref: '#/components/schemas/LineagePersonView' }
|
||
RLineagePersonDetail:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data: { $ref: '#/components/schemas/LineagePersonDetailView' }
|
||
RLineagePersonSensitiveProfile:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data: { $ref: '#/components/schemas/LineagePersonSensitiveProfileView' }
|
||
LineageRankOption:
|
||
type: object
|
||
properties:
|
||
rankId: { description: 世系排行配置ID, type: integer, format: int64 }
|
||
rankCode: { description: 排行编码,例如 ANCESTOR、SON_01、DAUGHTER_01, type: string }
|
||
rankName: { description: 排行名称,例如始祖、长子、长女, type: string }
|
||
rankType: { description: "排行类型:ANCESTOR=始祖,GENERATION=世代排行", type: string, enum: [ANCESTOR, GENERATION] }
|
||
genderScope: { description: "适用性别:0=男,1=女,2=通用", type: string, enum: ["0", "1", "2"] }
|
||
rankOrder: { description: 同性别同世代内的排行序号, type: integer, format: int64 }
|
||
RLineageRankOptionList:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/LineageRankOption' }
|
||
RLineagePersonList:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/LineagePersonView' }
|
||
RLineagePersonTreeList:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/LineagePersonTreeView' }
|
||
LineagePersonPageResult:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
rows:
|
||
description: 当前页世系人物
|
||
type: array
|
||
items: { $ref: '#/components/schemas/LineagePersonView' }
|
||
total: { description: 总记录数, type: integer, format: int64, example: 0 }
|
||
FamilyFeedBody:
|
||
type: object
|
||
required: [feedContent]
|
||
properties:
|
||
feedType:
|
||
description: 动态类型,未传时默认为 text
|
||
type: string
|
||
example: "text"
|
||
feedContent:
|
||
description: 动态内容,不能为空
|
||
type: string
|
||
example: "今天上传一张老照片。"
|
||
mediaOssIds:
|
||
description: 媒体文件 OSS ID 列表,多个 ID 使用英文逗号分隔
|
||
type: string
|
||
example: "2060000000000000001,2060000000000000002"
|
||
sortOrder:
|
||
description: 排序值,未传时默认为 0
|
||
type: integer
|
||
format: int64
|
||
example: 0
|
||
status:
|
||
description: "字典 sys_normal_disable:0=正常,1=停用;未传时默认为0"
|
||
type: string
|
||
enum: ["0", "1"]
|
||
example: "0"
|
||
x-dict-type: sys_normal_disable
|
||
FamilyFeedView:
|
||
type: object
|
||
properties:
|
||
canEdit: { type: boolean, description: 当前用户是否可编辑该资源 }
|
||
canDelete: { type: boolean, description: 当前用户是否可删除该资源 }
|
||
feedId: { description: 动态ID, type: integer, format: int64 }
|
||
genealogyId: { description: 所属家谱ID, type: integer, format: int64 }
|
||
genealogyNo: { description: 家谱编号, type: string }
|
||
genealogyName: { description: 家谱名称, type: string }
|
||
publisherUserId: { description: 发布业务用户ID, type: integer, format: int64 }
|
||
publisherNickName: { description: 发布用户昵称, type: string }
|
||
publisherStatus: { description: 发布用户状态, type: string }
|
||
feedType: { description: 动态类型, type: string }
|
||
feedContent: { description: 动态内容, type: string }
|
||
mediaFiles:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/BusinessFileAccess' }
|
||
likedByMe: { description: 当前登录用户是否已点赞, type: boolean, example: false }
|
||
likeCount: { description: 点赞数量, type: integer, format: int64 }
|
||
commentCount: { description: 评论数量, type: integer, format: int64 }
|
||
pinned: { description: "字典 gen_number_yes_no:0=否,1=是", type: string, enum: ["0", "1"], example: "0", x-dict-type: gen_number_yes_no }
|
||
pinnedTime: { description: 置顶时间, type: string, format: date-time, nullable: true }
|
||
sortOrder: { description: 排序值, type: integer, format: int64 }
|
||
status: { description: "字典 sys_normal_disable:0=正常,1=停用", type: string, enum: ["0", "1"], example: "0", x-dict-type: sys_normal_disable }
|
||
remark: { description: 备注, type: string }
|
||
createTime: { description: 发布时间, type: string, format: date-time }
|
||
updateTime: { description: 更新时间, type: string, format: date-time }
|
||
RFamilyFeed:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data: { $ref: '#/components/schemas/FamilyFeedView' }
|
||
RFamilyFeedList:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/FamilyFeedView' }
|
||
FamilyFeedPageResult:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
rows:
|
||
type: array
|
||
items: { $ref: '#/components/schemas/FamilyFeedView' }
|
||
total: { description: 总记录数, type: integer, format: int64, example: 0 }
|
||
NotificationView:
|
||
type: object
|
||
properties:
|
||
notificationId: { description: 通知ID, type: integer, format: int64 }
|
||
genealogyId: { description: 所属家谱ID, type: integer, format: int64, nullable: true }
|
||
genealogyNo: { description: 家谱编号, type: string }
|
||
genealogyName: { description: 家谱名称, type: string }
|
||
senderUserId: { description: 发送业务用户ID, type: integer, format: int64, nullable: true }
|
||
senderNickName: { description: 发送用户昵称, type: string }
|
||
noticeType: { description: 通知类型, type: string }
|
||
noticeTitle: { description: 通知标题, type: string }
|
||
noticeContent: { description: 通知正文, type: string }
|
||
bizType: { description: 关联业务类型, type: string }
|
||
bizId: { description: 关联业务ID, type: integer, format: int64, nullable: true }
|
||
bizSummary: { description: 关联业务摘要, type: string }
|
||
publishTime: { description: 发布时间, type: string, format: date-time }
|
||
readStatus: { description: "字典 gen_notification_read_status:0=未读,1=已读", type: string, enum: ["0", "1"], example: "0", x-dict-type: gen_notification_read_status }
|
||
readTime: { description: 阅读时间, type: string, format: date-time, nullable: true }
|
||
status: { description: "字典 sys_normal_disable:0=正常,1=停用", type: string, enum: ["0", "1"], example: "0", x-dict-type: sys_normal_disable }
|
||
remark: { description: 备注, type: string }
|
||
RNotification:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data: { $ref: '#/components/schemas/AppNotification' }
|
||
FamilyFeedCommentBody:
|
||
type: object
|
||
required: [commentContent]
|
||
properties:
|
||
parentCommentId:
|
||
description: 父评论 ID;不传或传 null 表示发布一级评论
|
||
type: integer
|
||
format: int64
|
||
nullable: true
|
||
commentContent:
|
||
description: 评论内容,最多 1000 个字符
|
||
type: string
|
||
FamilyFeedCommentView:
|
||
type: object
|
||
properties:
|
||
commentId:
|
||
description: 评论 ID
|
||
type: integer
|
||
format: int64
|
||
genealogyId:
|
||
description: 所属家谱 ID
|
||
type: integer
|
||
format: int64
|
||
feedId:
|
||
description: 所属动态 ID
|
||
type: integer
|
||
format: int64
|
||
parentCommentId:
|
||
description: 父评论 ID;null 或 0 表示一级评论
|
||
type: integer
|
||
format: int64
|
||
nullable: true
|
||
appUserId:
|
||
description: 评论业务用户 ID
|
||
type: integer
|
||
format: int64
|
||
appUserNickName:
|
||
description: 评论人昵称
|
||
type: string
|
||
appUserAvatar:
|
||
description: 评论人头像文件 ID
|
||
type: integer
|
||
format: int64
|
||
nullable: true
|
||
parentAppUserId:
|
||
description: 被直接回复的业务用户 ID
|
||
type: integer
|
||
format: int64
|
||
nullable: true
|
||
parentAppUserNickName:
|
||
description: 被直接回复的用户昵称
|
||
type: string
|
||
nullable: true
|
||
commentContent:
|
||
description: 评论内容;作者删除后为 null
|
||
type: string
|
||
nullable: true
|
||
userDeleted:
|
||
description: 作者删除状态,0 未删除,1 已删除并保留占位
|
||
type: string
|
||
enum: ["0", "1"]
|
||
example: "0"
|
||
canDelete:
|
||
description: 当前登录用户是否可删除该评论
|
||
type: boolean
|
||
replyCount:
|
||
description: 正常展示的直接回复数量
|
||
type: integer
|
||
format: int64
|
||
commentLevel:
|
||
description: 评论层级,root 为一级评论,reply 为回复
|
||
type: string
|
||
enum: [root, reply]
|
||
status:
|
||
description: "字典 sys_normal_disable:0=正常展示,1=停用;会员接口仅返回0"
|
||
type: string
|
||
enum: ["0", "1"]
|
||
example: "0"
|
||
x-dict-type: sys_normal_disable
|
||
createTime:
|
||
description: 评论发布时间
|
||
type: string
|
||
format: date-time
|
||
RFamilyFeedComment:
|
||
type: object
|
||
properties:
|
||
code:
|
||
description: 响应状态码
|
||
type: integer
|
||
example: 200
|
||
msg:
|
||
description: 响应消息
|
||
type: string
|
||
data:
|
||
$ref: '#/components/schemas/FamilyFeedCommentView'
|
||
RFamilyFeedCommentList:
|
||
type: object
|
||
properties:
|
||
code:
|
||
description: 响应状态码
|
||
type: integer
|
||
example: 200
|
||
msg:
|
||
description: 响应消息
|
||
type: string
|
||
data:
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/FamilyFeedCommentView'
|
||
FamilyFeedCommentPageResult:
|
||
type: object
|
||
properties:
|
||
code:
|
||
description: 响应状态码
|
||
type: integer
|
||
example: 200
|
||
msg:
|
||
description: 响应消息
|
||
type: string
|
||
rows:
|
||
description: 评论分页数据
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/FamilyFeedCommentView'
|
||
total:
|
||
description: 评论总数
|
||
type: integer
|
||
format: int64
|
||
GenealogyCreateBody:
|
||
type: object
|
||
required: [genealogyName, firstAncestorName, requestId, surname, regionCode]
|
||
properties:
|
||
genealogyName:
|
||
description: 家谱名称
|
||
type: string
|
||
firstAncestorName:
|
||
description: 始迁祖姓名;建谱时同步创建根人物
|
||
type: string
|
||
requestId:
|
||
description: 客户端建谱幂等请求号;同一次重试必须复用
|
||
type: string
|
||
maxLength: 64
|
||
ownerIsFirstAncestor:
|
||
description: 仅显式传 true 时将当前谱主账号绑定到始迁祖人物;默认 false
|
||
type: boolean
|
||
default: false
|
||
surname:
|
||
description: 姓氏
|
||
type: string
|
||
ancestralHall:
|
||
description: 堂号/祠堂名称
|
||
type: string
|
||
originPlace:
|
||
description: 籍贯/起源地
|
||
type: string
|
||
regionCode:
|
||
description: 行政区划编码
|
||
type: string
|
||
addressDetail:
|
||
description: 详细地址
|
||
type: string
|
||
coverOssId:
|
||
description: 封面图片OSS ID;更新时省略保持原值,显式 null 清空,正整数替换
|
||
type: string
|
||
pattern: '^[1-9][0-9]*$'
|
||
nullable: true
|
||
intro:
|
||
description: 简介
|
||
type: string
|
||
visibility:
|
||
description: "字典 gen_genealogy_visibility:0=私密,1=公开,2=成员可见"
|
||
type: string
|
||
enum: ["0", "1", "2"]
|
||
example: "1"
|
||
x-dict-type: gen_genealogy_visibility
|
||
joinMode:
|
||
description: "字典 gen_genealogy_join_mode:0=关闭加入,1=申请审核,2=邀请码加入"
|
||
type: string
|
||
enum: ["0", "1", "2"]
|
||
example: "1"
|
||
x-dict-type: gen_genealogy_join_mode
|
||
example:
|
||
genealogyName: "彭氏家谱"
|
||
firstAncestorName: "彭氏始迁祖"
|
||
requestId: "create-genealogy-20260824-001"
|
||
ownerIsFirstAncestor: false
|
||
surname: "彭"
|
||
ancestralHall: "陇西堂"
|
||
originPlace: "江西吉安"
|
||
regionCode: "360800"
|
||
addressDetail: "江西省吉安市"
|
||
coverOssId: "2060000000000000001"
|
||
intro: "彭氏家谱简介"
|
||
visibility: "1"
|
||
joinMode: "1"
|
||
GenealogyUpdateBody:
|
||
type: object
|
||
properties:
|
||
genealogyName:
|
||
description: 家谱名称
|
||
type: string
|
||
surname:
|
||
description: 姓氏
|
||
type: string
|
||
ancestralHall:
|
||
description: 堂号/祠堂名称
|
||
type: string
|
||
originPlace:
|
||
description: 籍贯/起源地
|
||
type: string
|
||
regionCode:
|
||
description: 行政区划编码
|
||
type: string
|
||
addressDetail:
|
||
description: 详细地址
|
||
type: string
|
||
coverOssId:
|
||
description: 封面图片OSS ID;更新时省略保持原值,显式 null 清空,正整数替换
|
||
type: string
|
||
pattern: '^[1-9][0-9]*$'
|
||
nullable: true
|
||
intro:
|
||
description: 简介
|
||
type: string
|
||
visibility:
|
||
description: "字典 gen_genealogy_visibility:0=私密,1=公开,2=成员可见"
|
||
type: string
|
||
enum: ["0", "1", "2"]
|
||
example: "1"
|
||
x-dict-type: gen_genealogy_visibility
|
||
joinMode:
|
||
description: "字典 gen_genealogy_join_mode:0=关闭加入,1=申请审核,2=邀请码加入"
|
||
type: string
|
||
enum: ["0", "1", "2"]
|
||
example: "1"
|
||
x-dict-type: gen_genealogy_join_mode
|
||
example:
|
||
genealogyName: "彭氏家谱"
|
||
surname: "彭"
|
||
ancestralHall: "陇西堂"
|
||
originPlace: "江西吉安"
|
||
regionCode: "360800"
|
||
addressDetail: "江西省吉安市"
|
||
coverOssId: "2060000000000000001"
|
||
intro: "更新后的家谱简介"
|
||
visibility: "1"
|
||
joinMode: "1"
|
||
GenealogyJoinApplyBody:
|
||
type: object
|
||
properties:
|
||
applicantName:
|
||
description: 申请人姓名
|
||
type: string
|
||
phone:
|
||
description: 手机号
|
||
type: string
|
||
relationDesc:
|
||
description: 与家谱/人物的关系说明
|
||
type: string
|
||
applyReason:
|
||
description: 申请理由
|
||
type: string
|
||
example:
|
||
applicantName: "彭小明"
|
||
phone: "13800000000"
|
||
relationDesc: "本族成员"
|
||
applyReason: "申请加入家谱维护"
|
||
GenealogyInvitationIssueBody:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
lineagePersonId: { type: integer, format: int64, nullable: true, description: 可选的目标世系人物ID;为空时签发普通家谱邀请 }
|
||
GenealogyJoinApplyVo:
|
||
type: object
|
||
properties:
|
||
applyId: { type: integer, format: int64 }
|
||
genealogyId: { type: integer, format: int64 }
|
||
appUserId: { type: integer, format: int64 }
|
||
lineagePersonId: { type: integer, format: int64, nullable: true }
|
||
lineagePersonName: { type: string, nullable: true }
|
||
applicantName: { type: string }
|
||
status: { type: string, enum: ['0', '1', '2', '3'] }
|
||
GenealogyInvitationRedeemBody:
|
||
type: object
|
||
required: [token]
|
||
properties:
|
||
token: { type: string, maxLength: 128, description: 一次性原始邀请码 }
|
||
applicantName: { type: string, maxLength: 50 }
|
||
phone: { type: string, maxLength: 30 }
|
||
relationDesc: { type: string, maxLength: 100 }
|
||
applyReason: { type: string, maxLength: 500 }
|
||
GenealogyJoinAuditBody:
|
||
type: object
|
||
required: [status]
|
||
properties:
|
||
status:
|
||
description: "字典 gen_genealogy_join_apply_status:0=待审核,1=通过,2=拒绝,3=取消"
|
||
type: string
|
||
enum: ["0", "1", "2", "3"]
|
||
example: "1"
|
||
x-dict-type: gen_genealogy_join_apply_status
|
||
auditRemark:
|
||
description: 审核备注
|
||
type: string
|
||
example:
|
||
status: "1"
|
||
auditRemark: "信息核验通过"
|
||
GenealogyMemberUpdateBody:
|
||
type: object
|
||
properties:
|
||
memberName:
|
||
description: 成员姓名
|
||
type: string
|
||
relationName:
|
||
description: 成员关系名称
|
||
type: string
|
||
roleType:
|
||
description: "字典 gen_genealogy_member_role:owner=谱主,admin=管理员,editor=编辑,member=成员,visitor=访客"
|
||
type: string
|
||
enum: [owner, admin, editor, member, visitor]
|
||
example: member
|
||
x-dict-type: gen_genealogy_member_role
|
||
lineagePersonId:
|
||
description: 绑定的世系人物ID
|
||
type: integer
|
||
format: int64
|
||
example:
|
||
memberName: "彭小明"
|
||
relationName: "族亲"
|
||
roleType: "member"
|
||
lineagePersonId: 900020001
|
||
GenealogyOwnerTransferBody:
|
||
type: object
|
||
required: [targetMemberId]
|
||
properties:
|
||
targetMemberId:
|
||
description: 目标成员ID
|
||
type: integer
|
||
format: int64
|
||
example:
|
||
targetMemberId: 900010002
|
||
GenerationPoemBody:
|
||
type: object
|
||
required: [generationNo, generationText]
|
||
properties:
|
||
generationNo:
|
||
description: 世代序号
|
||
type: integer
|
||
format: int64
|
||
minimum: 1
|
||
maximum: 2147483647
|
||
generationText:
|
||
description: 当前世代的字辈文字,最长50个字符
|
||
type: string
|
||
maxLength: 50
|
||
description:
|
||
description: 字辈说明,最长500个字符
|
||
type: string
|
||
maxLength: 500
|
||
sortOrder:
|
||
description: 排序值,数值越小越靠前
|
||
type: integer
|
||
format: int64
|
||
minimum: -2147483648
|
||
maximum: 2147483647
|
||
status:
|
||
description: "字典 sys_normal_disable:0=正常,1=停用"
|
||
type: string
|
||
enum: ["0", "1"]
|
||
example: "0"
|
||
x-dict-type: sys_normal_disable
|
||
example:
|
||
generationNo: 5
|
||
generationText: "忠"
|
||
description: "fifth generation poem"
|
||
sortOrder: 5
|
||
status: "0"
|
||
ArticleBody:
|
||
type: object
|
||
required: [articleTitle, articleContent]
|
||
properties:
|
||
categoryId:
|
||
description: 分类ID
|
||
type: integer
|
||
format: int64
|
||
articleTitle:
|
||
description: 文章标题
|
||
type: string
|
||
articleSummary:
|
||
description: 文章摘要
|
||
type: string
|
||
coverOssId:
|
||
description: 封面图片OSS ID;更新时省略保持原值,显式 null 清空,正整数替换
|
||
type: string
|
||
pattern: '^[1-9][0-9]*$'
|
||
nullable: true
|
||
articleContent:
|
||
description: 文章内容
|
||
type: string
|
||
authorName:
|
||
description: 作者名称
|
||
type: string
|
||
sortOrder:
|
||
description: 排序值,数值越小越靠前
|
||
type: integer
|
||
format: int64
|
||
status:
|
||
description: "字典 sys_normal_disable:0=正常,1=停用"
|
||
type: string
|
||
enum: ["0", "1"]
|
||
example: "0"
|
||
x-dict-type: sys_normal_disable
|
||
example:
|
||
categoryId: 900040001
|
||
articleTitle: "族谱源流"
|
||
articleSummary: "介绍本支源流"
|
||
coverOssId: "2060000000000000001"
|
||
articleContent: "<p>article content</p>"
|
||
authorName: "族谱管理员"
|
||
sortOrder: 1
|
||
status: "0"
|
||
ArticleCategoryBody:
|
||
type: object
|
||
required: [categoryName]
|
||
properties:
|
||
categoryName:
|
||
description: 谱文分类名称
|
||
type: string
|
||
maxLength: 100
|
||
categoryDesc:
|
||
description: 谱文分类说明
|
||
type: string
|
||
maxLength: 500
|
||
sortOrder:
|
||
description: 排序值,数值越小越靠前
|
||
type: integer
|
||
format: int64
|
||
status:
|
||
description: "字典 sys_normal_disable:0=正常,1=停用"
|
||
type: string
|
||
enum: ["0", "1"]
|
||
example: "0"
|
||
x-dict-type: sys_normal_disable
|
||
example:
|
||
categoryName: "姓氏源流"
|
||
categoryDesc: "记录本支姓氏与迁徙源流"
|
||
sortOrder: 10
|
||
status: "0"
|
||
AlbumBody:
|
||
type: object
|
||
required: [albumName]
|
||
properties:
|
||
albumName:
|
||
description: 相册名称
|
||
type: string
|
||
albumDesc:
|
||
description: 相册说明
|
||
type: string
|
||
coverOssId:
|
||
description: 封面图片OSS ID
|
||
type: string
|
||
pattern: '^[1-9][0-9]*$'
|
||
sortOrder:
|
||
description: 排序值,数值越小越靠前
|
||
type: integer
|
||
format: int64
|
||
status:
|
||
description: "字典 sys_normal_disable:0=正常,1=停用"
|
||
type: string
|
||
enum: ["0", "1"]
|
||
example: "0"
|
||
x-dict-type: sys_normal_disable
|
||
example:
|
||
albumName: "老照片"
|
||
albumDesc: "family old photos"
|
||
coverOssId: "2060000000000000001"
|
||
sortOrder: 1
|
||
status: "0"
|
||
AlbumPhotoBody:
|
||
type: object
|
||
required: [ossId]
|
||
properties:
|
||
ossId:
|
||
description: OSS文件ID,表单内部使用,用户侧应通过上传组件获取
|
||
type: string
|
||
pattern: '^[1-9][0-9]*$'
|
||
photoTitle:
|
||
description: 图片标题
|
||
type: string
|
||
photoDesc:
|
||
description: 图片说明
|
||
type: string
|
||
photographer:
|
||
description: 拍摄人
|
||
type: string
|
||
shootTime:
|
||
description: 拍摄时间
|
||
type: string
|
||
sortOrder:
|
||
description: 排序值,数值越小越靠前
|
||
type: integer
|
||
format: int64
|
||
status:
|
||
description: "字典 sys_normal_disable:0=正常,1=停用"
|
||
type: string
|
||
enum: ["0", "1"]
|
||
example: "0"
|
||
x-dict-type: sys_normal_disable
|
||
example:
|
||
ossId: "2060000000000000001"
|
||
photoTitle: "老宅合影"
|
||
photoDesc: "old house photo"
|
||
photographer: "彭小明"
|
||
shootTime: "2026-07-09 10:00:00"
|
||
sortOrder: 1
|
||
status: "0"
|
||
CeremonyBody:
|
||
type: object
|
||
required: [ceremonyType, ceremonyTitle]
|
||
properties:
|
||
ceremonyType:
|
||
description: 祭祀/活动类型
|
||
type: string
|
||
x-dict-type: gen_ceremony_type
|
||
ceremonyTitle:
|
||
description: 祭祀/活动标题
|
||
type: string
|
||
ceremonyDesc:
|
||
description: 祭祀/活动说明
|
||
type: string
|
||
ceremonyTime:
|
||
description: 祭祀/活动时间
|
||
type: string
|
||
location:
|
||
description: 地点名称,例如祠堂或酒店名称
|
||
type: string
|
||
locationAddress:
|
||
description: 详细地址
|
||
type: string
|
||
maxLength: 300
|
||
longitude:
|
||
description: 经度,必须与纬度同时提供
|
||
type: number
|
||
minimum: -180
|
||
maximum: 180
|
||
latitude:
|
||
description: 纬度,必须与经度同时提供
|
||
type: number
|
||
minimum: -90
|
||
maximum: 90
|
||
coverOssId:
|
||
description: 封面图片OSS ID;更新时省略保持原值,显式 null 清空,正整数替换
|
||
type: string
|
||
pattern: '^[1-9][0-9]*$'
|
||
nullable: true
|
||
sortOrder:
|
||
description: 排序值,数值越小越靠前
|
||
type: integer
|
||
format: int64
|
||
status:
|
||
description: "字典 sys_normal_disable:0=正常,1=停用"
|
||
type: string
|
||
enum: ["0", "1"]
|
||
example: "0"
|
||
x-dict-type: sys_normal_disable
|
||
example:
|
||
ceremonyType: "ancestor"
|
||
ceremonyTitle: "清明祭祖"
|
||
ceremonyDesc: "online ancestor ceremony"
|
||
ceremonyTime: "2026-04-04 09:00:00"
|
||
location: "祠堂"
|
||
locationAddress: "四川省成都市示例路1号"
|
||
longitude: 104.0665410
|
||
latitude: 30.5722690
|
||
coverOssId: "2060000000000000001"
|
||
sortOrder: 1
|
||
status: "0"
|
||
CeremonyInviteesBody:
|
||
type: object
|
||
required: [inviteeUserIds]
|
||
properties:
|
||
inviteeUserIds:
|
||
description: 完整受邀业务用户ID列表;空数组表示取消全部尚未响应的邀请
|
||
type: array
|
||
uniqueItems: true
|
||
items: { type: integer, format: int64 }
|
||
example:
|
||
inviteeUserIds: [900000001, 900000002]
|
||
CeremonyInviteeOptionVo:
|
||
type: object
|
||
additionalProperties: false
|
||
properties:
|
||
memberId: { type: integer, format: int64 }
|
||
appUserId: { type: integer, format: int64 }
|
||
displayName: { type: string }
|
||
memberRole: { type: string }
|
||
eligible: { type: boolean }
|
||
disabledReason: { type: string, nullable: true }
|
||
sortOrder: { type: integer, format: int64 }
|
||
RCeremonyInviteeOptionList:
|
||
type: object
|
||
properties:
|
||
code: { type: integer, example: 200 }
|
||
msg: { type: string }
|
||
data: { type: array, items: { $ref: '#/components/schemas/CeremonyInviteeOptionVo' } }
|
||
CeremonyInvitationResponseBody:
|
||
type: object
|
||
required: [inviteStatus]
|
||
properties:
|
||
inviteStatus:
|
||
description: 当前用户的邀约响应,只允许接受或拒绝
|
||
type: string
|
||
enum: [ACCEPTED, DECLINED]
|
||
example:
|
||
inviteStatus: "ACCEPTED"
|
||
CeremonyInvitationVo:
|
||
type: object
|
||
properties:
|
||
invitationId: { description: 邀约ID, type: integer, format: int64 }
|
||
genealogyId: { description: 家谱ID, type: integer, format: int64 }
|
||
ceremonyId: { description: 贺礼活动ID, type: integer, format: int64 }
|
||
inviteeUserId: { description: 受邀业务用户ID, type: integer, format: int64 }
|
||
inviteStatus: { description: 邀约状态, type: string, enum: [PENDING, ACCEPTED, DECLINED, CANCELED] }
|
||
inviteVersion: { description: 邀请版本,取消后重新邀请时递增, type: integer }
|
||
deliveredTime: { description: 邀请投递时间, type: string, format: date-time }
|
||
readTime: { description: 邀请阅读时间, type: string, format: date-time }
|
||
responseTime: { description: 接受或拒绝时间, type: string, format: date-time }
|
||
ceremonyTitle: { description: 贺礼活动标题, type: string }
|
||
ceremonyTime: { description: 贺礼活动时间, type: string, format: date-time }
|
||
location: { description: 地点名称, type: string }
|
||
locationAddress: { description: 详细地址, type: string }
|
||
longitude: { description: 经度, type: number }
|
||
latitude: { description: 纬度, type: number }
|
||
RCeremonyInvitation:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
$ref: '#/components/schemas/CeremonyInvitationVo'
|
||
RCeremonyInvitationList:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
description: 贺礼邀约列表
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/CeremonyInvitationVo'
|
||
CeremonyGiftBody:
|
||
type: object
|
||
required: [giftAmount]
|
||
properties:
|
||
giverName:
|
||
description: 赠送人/献礼人姓名
|
||
type: string
|
||
giftAmount:
|
||
description: 人民币金额(元)
|
||
type: number
|
||
format: double
|
||
minimum: 0
|
||
maximum: 9999999999.99
|
||
multipleOf: 0.01
|
||
giftMessage:
|
||
description: 礼物留言
|
||
type: string
|
||
example:
|
||
giverName: "彭小明"
|
||
giftAmount: 66.66
|
||
giftMessage: "缅怀先祖"
|
||
GrowthRecordBody:
|
||
type: object
|
||
required: [recordTitle]
|
||
properties:
|
||
lineagePersonId:
|
||
description: 绑定的世系人物ID
|
||
type: integer
|
||
format: int64
|
||
recordType:
|
||
description: 记录类型
|
||
type: string
|
||
x-dict-type: gen_growth_record_type
|
||
recordTitle:
|
||
description: 记录标题
|
||
type: string
|
||
recordContent:
|
||
description: 记录内容
|
||
type: string
|
||
recordDate:
|
||
description: 记录日期
|
||
type: string
|
||
remindTime:
|
||
description: 提醒时间
|
||
type: string
|
||
mediaOssIds:
|
||
description: 媒体文件 OSS ID 列表;多个正整数 ID 使用英文逗号分隔,禁止空项和其他字符
|
||
type: string
|
||
pattern: '^$|^[1-9][0-9]*(,[1-9][0-9]*)*$'
|
||
sortOrder:
|
||
description: 排序值,数值越小越靠前
|
||
type: integer
|
||
format: int64
|
||
status:
|
||
description: "字典 sys_normal_disable:0=正常,1=停用"
|
||
type: string
|
||
enum: ["0", "1"]
|
||
example: "0"
|
||
x-dict-type: sys_normal_disable
|
||
example:
|
||
lineagePersonId: 900020001
|
||
recordType: "birth"
|
||
recordTitle: "出生记录"
|
||
recordContent: "birth record"
|
||
recordDate: "2026-07-09 10:00:00"
|
||
remindTime: "2027-07-09 10:00:00"
|
||
mediaOssIds: "2060000000000000001"
|
||
sortOrder: 1
|
||
status: "0"
|
||
LifeEventBody:
|
||
type: object
|
||
required: [eventType, eventTitle, eventDate, datePrecision]
|
||
properties:
|
||
eventType:
|
||
description: "字典 gen_life_event_type:BIRTH=出生,EDUCATION=求学,CAREER=事业,MARRIAGE=婚姻,MIGRATION=迁居,HONOR=荣誉,MAJOR_ACHIEVEMENT=重要成就,DEATH=逝世,OTHER=其他"
|
||
type: string
|
||
enum: [BIRTH, EDUCATION, CAREER, MARRIAGE, MIGRATION, HONOR, MAJOR_ACHIEVEMENT, DEATH, OTHER]
|
||
example: EDUCATION
|
||
x-dict-type: gen_life_event_type
|
||
eventTitle: { description: 事件标题, type: string, example: 进入县立小学 }
|
||
eventContent: { description: 事件详细内容, type: string, example: 在县立小学完成启蒙教育 }
|
||
eventDate:
|
||
description: 事件日期;精度为 YEAR 时传当年 01-01,MONTH 时传当月 01 日
|
||
type: string
|
||
format: date
|
||
example: "1936-09-01"
|
||
datePrecision:
|
||
description: "日期精度:YEAR=年,MONTH=月,DAY=日"
|
||
type: string
|
||
enum: [YEAR, MONTH, DAY]
|
||
example: DAY
|
||
eventPlace: { description: 事件地点, type: string, example: 四川省成都市 }
|
||
sourceDescription: { description: 资料来源说明, type: string, example: 家谱手稿 }
|
||
mediaOssIds:
|
||
description: 媒体文件 OSS ID 数组;使用统一 APP 文件上传接口取得字符串 ID
|
||
type: array
|
||
items: { type: string, pattern: '^[1-9][0-9]*$' }
|
||
example: ["2060000000000000001"]
|
||
sortOrder: { description: 排序值,数值越小越靠前, type: integer, format: int64, example: 1 }
|
||
status:
|
||
description: "字典 sys_normal_disable:0=正常,1=停用"
|
||
type: string
|
||
enum: ["0", "1"]
|
||
example: "0"
|
||
x-dict-type: sys_normal_disable
|
||
remark: { description: 备注, type: string }
|
||
LifeEventView:
|
||
allOf:
|
||
- $ref: '#/components/schemas/LifeEventBody'
|
||
- type: object
|
||
properties:
|
||
eventId: { description: 人生大事ID, type: integer, format: int64, example: 2072800000000000100 }
|
||
genealogyId: { description: 家谱ID, type: integer, format: int64, example: 900001001 }
|
||
lineagePersonId: { description: 世系人物ID, type: integer, format: int64, example: 900020001 }
|
||
creatorUserId: { description: 创建人的业务用户ID, type: integer, format: int64, example: 900000001 }
|
||
RLifeEvent:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data: { $ref: '#/components/schemas/AppLifeEvent' }
|
||
RLifeEventList:
|
||
type: object
|
||
properties:
|
||
code: { description: 响应状态码, type: integer, example: 200 }
|
||
msg: { description: 响应消息, type: string, example: 操作成功 }
|
||
data:
|
||
description: 人生大事列表
|
||
type: array
|
||
items: { $ref: '#/components/schemas/AppLifeEvent' }
|
||
MemoBody:
|
||
type: object
|
||
required: [memoTitle]
|
||
properties:
|
||
memoType:
|
||
description: 备忘类型;省略时默认 general
|
||
type: string
|
||
enum: [general, benefactor]
|
||
default: general
|
||
memoTitle:
|
||
description: 备忘标题
|
||
type: string
|
||
memoContent:
|
||
description: 备忘内容
|
||
type: string
|
||
remindTime:
|
||
description: 提醒时间
|
||
type: string
|
||
completed:
|
||
description: 是否已完成
|
||
type: string
|
||
mediaOssIds:
|
||
description: 媒体文件 OSS ID 列表;多个正整数 ID 使用英文逗号分隔,禁止空项和其他字符
|
||
type: string
|
||
pattern: '^$|^[1-9][0-9]*(,[1-9][0-9]*)*$'
|
||
sortOrder:
|
||
description: 排序值,数值越小越靠前
|
||
type: integer
|
||
format: int64
|
||
status:
|
||
description: "字典 sys_normal_disable:0=正常,1=停用"
|
||
type: string
|
||
enum: ["0", "1"]
|
||
example: "0"
|
||
x-dict-type: sys_normal_disable
|
||
example:
|
||
memoType: "general"
|
||
memoTitle: "修谱事项"
|
||
memoContent: "contact family members"
|
||
remindTime: "2026-08-01 09:00:00"
|
||
completed: "0"
|
||
mediaOssIds: "2060000000000000001"
|
||
sortOrder: 1
|
||
status: "0"
|
||
RelativeRecordBody:
|
||
type: object
|
||
required: [relativeName]
|
||
properties:
|
||
relativeName: { description: 亲友姓名, type: string }
|
||
relationName: { description: 关系名称, type: string }
|
||
eventName: { description: 事件名称, type: string }
|
||
eventTime: { description: 事件时间, type: string }
|
||
giftAmount: { description: 人民币金额(元), type: number, format: double, minimum: 0, maximum: 9999999999.99, multipleOf: 0.01 }
|
||
recordContent: { description: 记录内容, type: string }
|
||
mediaOssIds:
|
||
description: 媒体文件 OSS ID 列表;多个正整数 ID 使用英文逗号分隔,禁止空项和其他字符
|
||
type: string
|
||
pattern: '^$|^[1-9][0-9]*(,[1-9][0-9]*)*$'
|
||
sortOrder: { description: 排序值,数值越小越靠前, type: integer, format: int64 }
|
||
status: { description: "字典 sys_normal_disable:0=正常,1=停用", type: string, enum: ["0", "1"], example: "0", x-dict-type: sys_normal_disable }
|
||
MeritRecordBody:
|
||
type: object
|
||
required: [donorName, meritTitle]
|
||
properties:
|
||
donorName:
|
||
description: 功德人/捐赠人姓名
|
||
type: string
|
||
meritType:
|
||
description: "字典 gen_merit_type:donation=捐赠,repair=修祠,public=公益,other=其他"
|
||
type: string
|
||
example: donation
|
||
x-dict-type: gen_merit_type
|
||
meritTitle:
|
||
description: 功德标题
|
||
type: string
|
||
meritContent:
|
||
description: 功德内容
|
||
type: string
|
||
mediaOssIds:
|
||
description: 媒体文件 OSS ID 列表;多个正整数 ID 使用英文逗号分隔,空字符串清空
|
||
type: string
|
||
pattern: '^$|^[1-9][0-9]*(,[1-9][0-9]*)*$'
|
||
amount:
|
||
description: 人民币金额(元)
|
||
type: number
|
||
format: double
|
||
minimum: 0
|
||
maximum: 9999999999.99
|
||
multipleOf: 0.01
|
||
meritTime:
|
||
description: 功德时间
|
||
type: string
|
||
sortOrder:
|
||
description: 排序值,数值越小越靠前
|
||
type: integer
|
||
format: int64
|
||
status:
|
||
description: "字典 sys_normal_disable:0=正常,1=停用"
|
||
type: string
|
||
enum: ["0", "1"]
|
||
example: "0"
|
||
x-dict-type: sys_normal_disable
|
||
example:
|
||
donorName: "彭小明"
|
||
meritType: "donation"
|
||
meritTitle: "修谱捐款"
|
||
meritContent: "support genealogy work"
|
||
mediaOssIds: "2060000000000000001"
|
||
amount: 100.0
|
||
meritTime: "2026-07-09 10:00:00"
|
||
sortOrder: 1
|
||
status: "0"
|
||
VideoBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [videoTitle, videoOssId]
|
||
properties:
|
||
videoTitle:
|
||
description: 视频标题
|
||
type: string
|
||
videoDesc:
|
||
description: 视频说明
|
||
type: string
|
||
coverOssId:
|
||
description: 视频封面文件 OSS ID;更新时省略保持原值,显式 null 清空,正整数替换
|
||
type: string
|
||
pattern: '^[1-9][0-9]*$'
|
||
nullable: true
|
||
videoOssId:
|
||
description: 视频文件 OSS ID
|
||
type: string
|
||
pattern: '^[1-9][0-9]*$'
|
||
durationSeconds:
|
||
description: 视频时长,单位秒
|
||
type: integer
|
||
format: int64
|
||
sortOrder:
|
||
description: 排序值,数值越小越靠前
|
||
type: integer
|
||
format: int64
|
||
status:
|
||
description: "字典 sys_normal_disable:0=正常,1=停用"
|
||
type: string
|
||
enum: ["0", "1"]
|
||
example: "0"
|
||
x-dict-type: sys_normal_disable
|
||
FeedbackBody:
|
||
type: object
|
||
required: [feedbackContent]
|
||
properties:
|
||
feedbackType:
|
||
description: "字典 gen_feedback_type:advice=建议,bug=故障,complaint=投诉,other=其他"
|
||
type: string
|
||
example: bug
|
||
x-dict-type: gen_feedback_type
|
||
feedbackContent:
|
||
description: 反馈内容
|
||
type: string
|
||
contactInfo:
|
||
description: 联系方式
|
||
type: string
|
||
example:
|
||
feedbackType: "bug"
|
||
feedbackContent: "upload image failed"
|
||
contactInfo: "13800000000"
|
||
AppVipOrderBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [packageId, paymentMethod, requestId]
|
||
properties:
|
||
packageId:
|
||
description: VIP套餐ID
|
||
type: integer
|
||
format: int64
|
||
genealogyId:
|
||
description: 家谱ID;购买家谱维度套餐时填写
|
||
type: integer
|
||
format: int64
|
||
nullable: true
|
||
paymentMethod:
|
||
description: APP 支付方式;由购买能力接口决定当前租户可用项
|
||
type: string
|
||
enum: [WECHAT, ALIPAY, BALANCE]
|
||
requestId:
|
||
description: 客户端幂等请求号;同一购买动作重试必须复用
|
||
type: string
|
||
maxLength: 64
|
||
example:
|
||
packageId: 900060001
|
||
genealogyId: 900001001
|
||
paymentMethod: WECHAT
|
||
requestId: app-vip-order-20260818-001
|
||
HelpArticleVo:
|
||
type: object
|
||
properties:
|
||
helpId: { type: integer, format: int64, description: 帮助文章ID }
|
||
helpCategory: { type: string, enum: [common, member, lineage], description: 稳定帮助分类码 }
|
||
helpCategoryLabel: { type: string, nullable: true, description: 帮助分类中文标签 }
|
||
helpTitle: { type: string, description: 标题 }
|
||
helpContent: { type: string, description: 内容 }
|
||
coverOssId: { type: integer, format: int64, description: 封面文件ID }
|
||
sortOrder: { type: integer, format: int64, description: 排序 }
|
||
viewCount: { type: integer, format: int64, description: 浏览量 }
|
||
status: { type: string, description: 状态 }
|
||
remark: { type: string, description: 备注 }
|
||
GenealogyInvitationVo:
|
||
type: object
|
||
properties:
|
||
inviteId: { type: integer, format: int64, description: 邀请ID }
|
||
genealogyId: { type: integer, format: int64, description: 家谱ID }
|
||
genealogyNo: { type: string, description: 家谱编号 }
|
||
genealogyName: { type: string, description: 家谱名称 }
|
||
inviterUserId: { type: integer, format: int64, description: 服务端确定的邀请人ID,只读 }
|
||
lineagePersonId: { type: integer, format: int64, nullable: true, description: 指定绑定的世系人物ID }
|
||
lineagePersonName: { type: string, nullable: true, description: 指定绑定的世系人物姓名 }
|
||
status: { type: string, description: 邀请状态 }
|
||
expiresAt: { type: string, format: date-time, description: 过期时间 }
|
||
redeemedBy: { type: integer, format: int64, description: 兑换用户ID }
|
||
redeemedAt: { type: string, format: date-time, description: 兑换时间 }
|
||
revokedAt: { type: string, format: date-time, description: 撤销时间 }
|
||
createTime: { type: string, format: date-time, description: 创建时间 }
|
||
token: { type: string, description: 仅签发成功的本次响应返回原始一次性 token }
|
||
redemptionResult: { type: string, description: 兑换结果 }
|
||
applyId: { type: integer, format: int64, description: 审核模式生成的申请ID }
|
||
memberId: { type: integer, format: int64, description: 直接加入模式生成或恢复的成员ID }
|
||
RHelpArticle: { type: object, properties: { code: { type: integer }, msg: { type: string }, data: { $ref: '#/components/schemas/HelpArticleVo' } } }
|
||
RHelpArticleList: { type: object, properties: { code: { type: integer }, msg: { type: string }, data: { type: array, items: { $ref: '#/components/schemas/HelpArticleVo' } } } }
|
||
VipPurchaseCapability:
|
||
type: object
|
||
required: [enabled, paymentMethods]
|
||
properties:
|
||
enabled: { type: boolean, description: 当前租户和支付渠道是否允许购买 }
|
||
disabledReason: { type: string, nullable: true, description: 不可购买时的可展示原因 }
|
||
paymentMethods:
|
||
type: array
|
||
description: APP 当前租户的支付方式能力;仅 enabled=true 的方式可以下单
|
||
items: { $ref: '#/components/schemas/VipPaymentMethodCapability' }
|
||
VipPaymentMethodCapability:
|
||
type: object
|
||
required: [method, enabled]
|
||
properties:
|
||
method: { type: string, enum: [WECHAT, ALIPAY, BALANCE], description: 支付方式稳定码 }
|
||
enabled: { type: boolean, description: 当前租户是否可使用该支付方式 }
|
||
disabledReason: { type: string, nullable: true, description: 当前方式不可用时的原因 }
|
||
RVipPurchaseCapability: { type: object, properties: { code: { type: integer }, msg: { type: string }, data: { $ref: '#/components/schemas/VipPurchaseCapability' } } }
|
||
RContentPasswordRecoveryCapability: { type: object, properties: { code: { type: integer }, msg: { type: string }, data: { $ref: '#/components/schemas/ContentPasswordRecoveryCapability' } } }
|
||
RGenealogyPermanentDeletionCapability: { type: object, properties: { code: { type: integer }, msg: { type: string }, data: { $ref: '#/components/schemas/GenealogyPermanentDeletionCapability' } } }
|
||
RGenealogyDeletionTask: { type: object, properties: { code: { type: integer }, msg: { type: string }, data: { $ref: '#/components/schemas/GenealogyDeletionTask' } } }
|
||
RVipPackageList: { type: object, properties: { code: { type: integer }, msg: { type: string }, data: { type: array, items: { $ref: '#/components/schemas/VipPackageVo' } } } }
|
||
RVipOrder: { type: object, properties: { code: { type: integer }, msg: { type: string }, data: { $ref: '#/components/schemas/VipOrderVo' } } }
|
||
RVipOrderList: { type: object, properties: { code: { type: integer }, msg: { type: string }, data: { type: array, items: { $ref: '#/components/schemas/VipOrderVo' } } } }
|
||
RPaymentOrder: { type: object, properties: { code: { type: integer }, msg: { type: string }, data: { $ref: '#/components/schemas/PaymentOrderVo' } } }
|
||
RPaymentTransactionStatus: { type: object, properties: { code: { type: integer }, msg: { type: string }, data: { $ref: '#/components/schemas/PaymentTransactionStatusVo' } } }
|
||
RGenealogyInvitation: { type: object, properties: { code: { type: integer }, msg: { type: string }, data: { $ref: '#/components/schemas/GenealogyInvitationVo' } } }
|
||
RGenealogyInvitationList: { type: object, properties: { code: { type: integer }, msg: { type: string }, data: { type: array, items: { $ref: '#/components/schemas/GenealogyInvitationVo' } } } }
|
||
VipPackageVo:
|
||
type: object
|
||
properties:
|
||
packageId: { type: integer, format: int64, description: 套餐ID }
|
||
packageName: { type: string, description: 套餐名称 }
|
||
packageType: { type: string, description: 套餐类型 }
|
||
packageDesc: { type: string, description: 套餐说明 }
|
||
price: { type: number, description: 当前售价 }
|
||
originalPrice: { type: number, description: 原价 }
|
||
durationValue: { type: integer, format: int64, description: 有效期数值 }
|
||
durationUnit: { type: string, description: 有效期单位 }
|
||
genealogyLimit: { type: integer, format: int64, description: 可用家谱数量限制 }
|
||
memberLimit: { type: integer, format: int64, description: 成员数量限制 }
|
||
storageLimitMb: { type: integer, format: int64, description: 存储空间限制,单位MB }
|
||
featureJson: { type: string, description: 套餐功能JSON }
|
||
sortOrder: { type: integer, format: int64, description: 排序 }
|
||
status: { type: string, description: 状态,0正常、1停用 }
|
||
remark: { type: string, description: 备注 }
|
||
VipOrderVo:
|
||
type: object
|
||
properties:
|
||
orderId: { type: integer, format: int64, description: VIP订单ID }
|
||
orderNo: { type: string, description: VIP业务订单号 }
|
||
packageId: { type: integer, format: int64, description: 套餐ID }
|
||
packageName: { type: string, description: 套餐名称 }
|
||
appUserId: { type: integer, format: int64, description: 业务用户ID }
|
||
appUserNickName: { type: string, description: 会员昵称 }
|
||
appUserPhone: { type: string, description: 会员手机号 }
|
||
genealogyId: { type: integer, format: int64, description: 家谱ID }
|
||
genealogyNo: { type: string, description: 家谱编号 }
|
||
genealogyName: { type: string, description: 家谱名称 }
|
||
orderAmount: { type: number, description: 订单金额 }
|
||
payAmount: { type: number, description: 实付金额 }
|
||
payType: { type: string, description: 支付方式,由后端确定 }
|
||
payStatus: { type: string, description: VIP订单支付状态 }
|
||
payTime: { type: string, format: date-time, description: 支付时间 }
|
||
expireTime: { type: string, format: date-time, description: 订单过期时间 }
|
||
status: { type: string, description: 业务状态 }
|
||
remark: { type: string, description: 备注 }
|
||
transactionId: { type: integer, format: int64, nullable: true, description: 当前 APP 支付流水ID }
|
||
canRefreshPayment: { type: boolean, description: 是否可刷新支付状态 }
|
||
canClose: { type: boolean, description: 是否可关闭支付 }
|
||
PaymentOrderVo:
|
||
type: object
|
||
description: APP VIP 下单结果;按 paymentMethod 使用对应字段,未使用字段为 null
|
||
properties:
|
||
order:
|
||
$ref: '#/components/schemas/VipOrderVo'
|
||
transactionId:
|
||
type: integer
|
||
format: int64
|
||
description: 支付流水ID
|
||
outTradeNo:
|
||
type: string
|
||
description: 商户支付单号
|
||
tradeType:
|
||
type: string
|
||
enum: [APP]
|
||
description: APP 端交易类型;微信、支付宝和余额均固定为 APP
|
||
paymentMethod:
|
||
type: string
|
||
enum: [WECHAT, ALIPAY, BALANCE]
|
||
description: 本次订单实际支付方式
|
||
expiresAt:
|
||
type: string
|
||
format: date-time
|
||
description: 支付单过期时间
|
||
prepayId:
|
||
type: string
|
||
nullable: true
|
||
description: APP 微信预支付ID
|
||
appId:
|
||
type: string
|
||
description: 微信开放平台应用ID
|
||
partnerId:
|
||
type: string
|
||
description: 微信支付商户号
|
||
packageValue:
|
||
type: string
|
||
description: 调起微信支付使用的 package 值
|
||
nonceStr:
|
||
type: string
|
||
description: 随机字符串
|
||
timestamp:
|
||
type: string
|
||
description: 支付签名时间戳
|
||
sign:
|
||
type: string
|
||
description: 调起微信支付使用的签名
|
||
orderString:
|
||
type: string
|
||
nullable: true
|
||
description: 支付宝 APP SDK 调起支付使用的完整订单字符串
|
||
completed:
|
||
type: boolean
|
||
description: 是否已在本次请求内完成支付;余额成功扣款时为 true
|
||
PaymentTransactionStatusVo:
|
||
type: object
|
||
properties:
|
||
transactionId:
|
||
type: integer
|
||
format: int64
|
||
description: 支付流水ID
|
||
orderNo:
|
||
type: string
|
||
description: VIP业务订单号
|
||
outTradeNo:
|
||
type: string
|
||
description: 商户支付单号
|
||
status:
|
||
type: string
|
||
enum: [CREATED, PAYING, SUCCESS, CLOSED, REFUNDING, REFUNDED]
|
||
description: 支付状态
|
||
providerTradeState:
|
||
type: string
|
||
description: 微信支付侧交易状态
|
||
providerTransactionId:
|
||
type: string
|
||
description: 微信支付订单号
|
||
paidAt:
|
||
type: string
|
||
format: date-time
|
||
description: 支付成功时间
|
||
closedAt:
|
||
type: string
|
||
format: date-time
|
||
description: 支付关闭时间
|
||
VerificationChallengeBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [tenantId, subject]
|
||
properties:
|
||
tenantId:
|
||
type: string
|
||
description: 租户 ID
|
||
subject:
|
||
type: string
|
||
description: 验证主体,如手机号/用户名/IP
|
||
example:
|
||
tenantId: "000000"
|
||
subject: "13800000000"
|
||
VerificationCheckBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [tenantId, subject, challengeId]
|
||
properties:
|
||
tenantId:
|
||
description: 租户ID,用于区分不同租户的数据和验证策略
|
||
type: string
|
||
subject:
|
||
description: 验证主体,通常为手机号、用户ID或登录账号
|
||
type: string
|
||
challengeId:
|
||
description: 验证挑战ID,由验证挑战接口返回
|
||
type: string
|
||
providerCode:
|
||
type: string
|
||
description: 验证服务,tianai 或 ruoyi_image
|
||
captchaType:
|
||
type: string
|
||
description: SLIDER/ROTATE/CONCAT/WORD_IMAGE_CLICK/math/char
|
||
payload:
|
||
description: 验证结果载荷。天爱行为验证码提交 payload.track;系统图形验证码提交 payload.uuid 和 payload.code
|
||
oneOf:
|
||
- $ref: '#/components/schemas/TianaiVerificationPayload'
|
||
- $ref: '#/components/schemas/SystemImageVerificationPayload'
|
||
TianaiVerificationPayload:
|
||
type: object
|
||
description: 将天爱 1.5.5 前端验证回调中的 data 原样放入 track;回调 id 不放入 payload,挑战标识统一提交顶层 challengeId
|
||
required: [track]
|
||
properties:
|
||
track:
|
||
$ref: '#/components/schemas/TianaiCaptchaTrack'
|
||
TianaiCaptchaTrack:
|
||
type: object
|
||
required: [bgImageWidth, bgImageHeight, startTime, stopTime, trackList]
|
||
properties:
|
||
bgImageWidth:
|
||
type: integer
|
||
description: 验证码背景图片在前端实际显示的宽度,单位像素
|
||
bgImageHeight:
|
||
type: integer
|
||
description: 验证码背景图片在前端实际显示的高度,单位像素
|
||
templateImageWidth:
|
||
type: integer
|
||
description: 滑块或旋转模板图片在前端实际显示的宽度,单位像素
|
||
templateImageHeight:
|
||
type: integer
|
||
description: 滑块或旋转模板图片在前端实际显示的高度,单位像素
|
||
startTime:
|
||
type: integer
|
||
format: int64
|
||
description: 用户开始操作的时间戳,单位毫秒
|
||
stopTime:
|
||
type: integer
|
||
format: int64
|
||
description: 用户结束操作的时间戳,单位毫秒
|
||
left:
|
||
type: integer
|
||
description: 滑块最终水平偏移量,单位像素;由天爱前端控件生成
|
||
top:
|
||
type: integer
|
||
description: 点选或模板最终垂直偏移量,单位像素;由天爱前端控件生成
|
||
trackList:
|
||
type: array
|
||
minItems: 1
|
||
description: 用户操作轨迹,不能为空,必须直接使用天爱前端控件产生的数据
|
||
items:
|
||
$ref: '#/components/schemas/TianaiCaptchaTrackPoint'
|
||
data:
|
||
type: object
|
||
nullable: true
|
||
additionalProperties: true
|
||
description: 不同验证码类型附带的扩展数据,由天爱前端控件原样提交
|
||
TianaiCaptchaTrackPoint:
|
||
type: object
|
||
required: [x, y, t, type]
|
||
properties:
|
||
x:
|
||
type: number
|
||
format: float
|
||
description: 当前轨迹点的水平坐标
|
||
y:
|
||
type: number
|
||
format: float
|
||
description: 当前轨迹点的垂直坐标
|
||
t:
|
||
type: number
|
||
format: float
|
||
description: 当前轨迹点相对操作开始时的时间,单位毫秒
|
||
type:
|
||
type: string
|
||
description: 轨迹事件类型,例如 down、move、up
|
||
SystemImageVerificationPayload:
|
||
type: object
|
||
required: [uuid, code]
|
||
properties:
|
||
uuid:
|
||
type: string
|
||
description: 系统图形验证码接口返回的唯一标识
|
||
code:
|
||
type: string
|
||
description: 用户填写的图形验证码答案
|
||
VerificationRequireVo:
|
||
type: object
|
||
properties:
|
||
required:
|
||
description: 当前场景是否需要验证
|
||
type: boolean
|
||
providerCode:
|
||
description: 第三方服务商编码
|
||
type: string
|
||
captchaType:
|
||
description: 验证码类型,例如SLIDER、ROTATE、CONCAT、WORD_IMAGE_CLICK
|
||
type: string
|
||
sceneCode:
|
||
description: 服务端按当前业务动作和激活绑定解析出的实际验证场景编码
|
||
type: string
|
||
ttlSeconds:
|
||
description: 验证或票据有效秒数
|
||
type: integer
|
||
example:
|
||
required: true
|
||
providerCode: "tianai"
|
||
captchaType: "SLIDER"
|
||
sceneCode: "APP_LOGIN_ACTIVE_SCENE"
|
||
ttlSeconds: 300
|
||
VerificationChallengeVo:
|
||
type: object
|
||
properties:
|
||
required:
|
||
description: 当前场景是否需要验证
|
||
type: boolean
|
||
providerCode:
|
||
description: 第三方服务商编码
|
||
type: string
|
||
captchaType:
|
||
description: 验证码类型,例如SLIDER、ROTATE、CONCAT、WORD_IMAGE_CLICK
|
||
type: string
|
||
challengeId:
|
||
description: 验证挑战ID,由验证挑战接口返回
|
||
type: string
|
||
uuid:
|
||
type: string
|
||
description: 系统图形验证码 uuid
|
||
img:
|
||
type: string
|
||
description: 系统图形验证码 base64 图片
|
||
payload:
|
||
type: object
|
||
additionalProperties: true
|
||
description: 天爱验证码数据,包括背景图、模板图、尺寸等
|
||
expireSeconds:
|
||
description: 验证挑战过期秒数
|
||
type: integer
|
||
example:
|
||
required: true
|
||
providerCode: "tianai"
|
||
captchaType: "SLIDER"
|
||
challengeId: "CAPTCHA_CHALLENGE_ID"
|
||
payload:
|
||
backgroundImage: "data:image/png;base64,..."
|
||
templateImage: "data:image/png;base64,..."
|
||
backgroundImageWidth: 340
|
||
backgroundImageHeight: 180
|
||
expireSeconds: 300
|
||
VerificationCheckVo:
|
||
type: object
|
||
properties:
|
||
passed:
|
||
description: 验证是否通过
|
||
type: boolean
|
||
validToken:
|
||
type: string
|
||
description: 验证通过后交给发送短信验证码接口的票据
|
||
expireSeconds:
|
||
description: 验证挑战过期秒数
|
||
type: integer
|
||
message:
|
||
description: 返回消息
|
||
type: string
|
||
example:
|
||
passed: true
|
||
validToken: "captcha-ticket"
|
||
expireSeconds: 300
|
||
message: "验证通过"
|
||
LegacyCaptchaVo:
|
||
type: object
|
||
properties:
|
||
captchaEnabled:
|
||
type: boolean
|
||
uuid:
|
||
description: 系统图形验证码UUID
|
||
type: string
|
||
img:
|
||
type: string
|
||
description: base64 图形验证码
|
||
example:
|
||
captchaEnabled: true
|
||
uuid: "captcha-uuid"
|
||
img: "data:image/png;base64,..."
|
||
RVerificationRequire:
|
||
type: object
|
||
properties:
|
||
code:
|
||
description: 系统图形验证码或响应状态码
|
||
type: integer
|
||
example: 200
|
||
msg:
|
||
description: 响应消息
|
||
type: string
|
||
example: "操作成功"
|
||
data:
|
||
description: 响应数据主体
|
||
$ref: '#/components/schemas/VerificationRequireVo'
|
||
RVerificationChallenge:
|
||
type: object
|
||
properties:
|
||
code:
|
||
description: 系统图形验证码或响应状态码
|
||
type: integer
|
||
example: 200
|
||
msg:
|
||
description: 响应消息
|
||
type: string
|
||
example: "操作成功"
|
||
data:
|
||
description: 响应数据主体
|
||
$ref: '#/components/schemas/VerificationChallengeVo'
|
||
RVerificationCheck:
|
||
type: object
|
||
properties:
|
||
code:
|
||
description: 系统图形验证码或响应状态码
|
||
type: integer
|
||
example: 200
|
||
msg:
|
||
description: 响应消息
|
||
type: string
|
||
example: "操作成功"
|
||
data:
|
||
description: 响应数据主体
|
||
$ref: '#/components/schemas/VerificationCheckVo'
|
||
RLegacyCaptcha:
|
||
type: object
|
||
properties:
|
||
code:
|
||
description: 系统图形验证码或响应状态码
|
||
type: integer
|
||
example: 200
|
||
msg:
|
||
description: 响应消息
|
||
type: string
|
||
example: "操作成功"
|
||
data:
|
||
description: 响应数据主体
|
||
$ref: '#/components/schemas/LegacyCaptchaVo'
|
||
RecommendationPreferenceBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [enabled]
|
||
properties: { enabled: { type: boolean } }
|
||
RecommendationEventBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [eventKey, eventType, source, feedId]
|
||
properties:
|
||
eventKey: { type: string, maxLength: 64 }
|
||
eventType: { type: string, enum: [VIEW, CLICK, HIDE, SHARE] }
|
||
source: { type: string, enum: [FEED_LIST, FEED_DETAIL] }
|
||
feedId: { type: integer, format: int64 }
|
||
RecommendationPreferenceView:
|
||
type: object
|
||
required: [enabled, version, eventTrackingEnabled]
|
||
properties:
|
||
enabled: { type: boolean }
|
||
version: { type: integer, minimum: 0 }
|
||
updatedAt: { type: string, format: date-time, nullable: true }
|
||
eventTrackingEnabled: { type: boolean }
|
||
eventTrackingDisabledReason: { type: string, nullable: true, enum: [USER_DISABLED, TENANT_POLICY_DISABLED, TENANT_POLICY_INVALID] }
|
||
VideoCommentBody:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [commentContent]
|
||
properties:
|
||
parentCommentId: { type: integer, format: int64, nullable: true }
|
||
commentContent: { type: string, maxLength: 1000 }
|
||
VideoLike:
|
||
type: object
|
||
properties: { likeId: { type: integer, format: int64 }, genealogyId: { type: integer, format: int64 }, videoId: { type: integer, format: int64 }, appUserId: { type: integer, format: int64 } }
|
||
VideoComment:
|
||
type: object
|
||
properties:
|
||
commentId: { type: integer, format: int64 }
|
||
genealogyId: { type: integer, format: int64 }
|
||
videoId: { type: integer, format: int64 }
|
||
parentCommentId: { type: integer, format: int64, nullable: true }
|
||
appUserId: { type: integer, format: int64 }
|
||
appUserNickName: { type: string }
|
||
commentContent: { type: string, nullable: true }
|
||
userDeleted: { type: string, enum: ['0', '1'] }
|
||
replyCount: { type: integer, format: int64 }
|
||
createTime: { type: string, format: date-time }
|
||
canDelete: { type: boolean }
|
||
RVideoLike:
|
||
type: object
|
||
properties: { code: { type: integer }, msg: { type: string }, data: { $ref: '#/components/schemas/VideoLike' } }
|
||
RVideoComment:
|
||
type: object
|
||
properties: { code: { type: integer }, msg: { type: string }, data: { $ref: '#/components/schemas/VideoComment' } }
|
||
RVideoCommentList:
|
||
type: object
|
||
properties: { code: { type: integer }, msg: { type: string }, data: { type: array, items: { $ref: '#/components/schemas/VideoComment' } } }
|
||
VideoCommentPage:
|
||
type: object
|
||
properties: { total: { type: integer, format: int64 }, rows: { type: array, items: { $ref: '#/components/schemas/VideoComment' } }, code: { type: integer }, msg: { type: string } }
|
||
RecommendationEventView:
|
||
type: object
|
||
properties:
|
||
eventId: { type: integer, format: int64 }
|
||
eventKey: { type: string }
|
||
genealogyId: { type: integer, format: int64 }
|
||
targetType: { type: string, enum: [FAMILY_FEED] }
|
||
targetId: { type: integer, format: int64 }
|
||
eventType: { type: string, enum: [VIEW, CLICK, HIDE, SHARE] }
|
||
source: { type: string, enum: [FEED_LIST, FEED_DETAIL] }
|
||
occurredAt: { type: string, format: date-time }
|
||
expiresAt: { type: string, format: date-time }
|
||
FamilyFeedRecommendationView:
|
||
type: object
|
||
required: [feed, reasonCode, reasonText]
|
||
properties:
|
||
feed: { $ref: '#/components/schemas/FamilyFeedView' }
|
||
reasonCode: { type: string, enum: [MANUAL_PRIORITY, FOLLOWED_INTERACTION, POPULAR_IN_GENEALOGY, RECENT_IN_GENEALOGY] }
|
||
reasonText: { type: string }
|
||
RRecommendationPreference:
|
||
type: object
|
||
properties: { code: { type: integer }, msg: { type: string }, data: { $ref: '#/components/schemas/RecommendationPreferenceView' } }
|
||
RRecommendationEvent:
|
||
type: object
|
||
properties: { code: { type: integer }, msg: { type: string }, data: { $ref: '#/components/schemas/RecommendationEventView' } }
|
||
RFamilyFeedRecommendationList:
|
||
type: object
|
||
properties: { code: { type: integer }, msg: { type: string }, data: { type: array, items: { $ref: '#/components/schemas/FamilyFeedRecommendationView' } } }
|
||
ContentRecycleItem:
|
||
type: object
|
||
required: [itemId, genealogyId, resourceType, resourceId, recycleStatus, canRestore]
|
||
properties: { itemId: { type: integer, format: int64 }, genealogyId: { type: integer, format: int64 }, resourceType: { type: string, enum: [family_feed, video, growth_record, relative_record, memo, merit_record, article, album, album_photo, ceremony] }, resourceId: { type: integer, format: int64 }, resourceTitle: { type: string, nullable: true }, resourceSummary: { type: string, nullable: true }, recycleStatus: { type: string, enum: [OPEN, RESTORED] }, deletedBy: { type: integer, format: int64, nullable: true }, deletedAt: { type: string, format: date-time }, restoredBy: { type: integer, format: int64, nullable: true }, restoredAt: { type: string, format: date-time, nullable: true }, canRestore: { type: boolean }, disabledReason: { type: string, enum: [ALREADY_RESTORED], nullable: true } }
|
||
ContentRecycleItemPageResult: { type: object, properties: { code: { type: integer }, msg: { type: string }, total: { type: integer, format: int64 }, rows: { type: array, items: { $ref: '#/components/schemas/ContentRecycleItem' } } } }
|
||
RContentRecycleItem: { type: object, properties: { code: { type: integer }, msg: { type: string }, data: { $ref: '#/components/schemas/ContentRecycleItem' } } }
|
||
PlatformVideoCommentBody:
|
||
type: object
|
||
required: [commentContent]
|
||
properties: { commentContent: { type: string, maxLength: 1000 } }
|
||
PlatformVideoComment:
|
||
type: object
|
||
properties: { commentId: { type: integer, format: int64 }, platformVideoId: { type: integer, format: int64 }, appUserId: { type: integer, format: int64 }, appUserNickName: { type: string }, commentContent: { type: string, nullable: true }, userDeleted: { type: string, enum: ['0','1'] }, createTime: { type: string, format: date-time }, canDelete: { type: boolean } }
|
||
PlatformVideo:
|
||
type: object
|
||
required: [platformVideoId, videoTitle, platform, placement, likedByCurrentUser]
|
||
properties: { platformVideoId: { type: integer, format: int64 }, videoTitle: { type: string }, videoDesc: { type: string }, coverFile: { $ref: '#/components/schemas/BusinessFileAccess' }, videoFile: { $ref: '#/components/schemas/BusinessFileAccess' }, durationSeconds: { type: integer, format: int64 }, platform: { type: string, enum: [app, pc, wechat, all] }, placement: { type: string, enum: [home_featured, video_center, profile_featured] }, startAt: { type: string, format: date-time, nullable: true }, endAt: { type: string, format: date-time, nullable: true }, viewCount: { type: integer, format: int64 }, likeCount: { type: integer, format: int64 }, commentCount: { type: integer, format: int64 }, likedByCurrentUser: { type: boolean } }
|
||
RPlatformVideo: { type: object, properties: { code: { type: integer }, msg: { type: string }, data: { $ref: '#/components/schemas/PlatformVideo' } } }
|
||
RPlatformVideoList: { type: object, properties: { code: { type: integer }, msg: { type: string }, data: { type: array, items: { $ref: '#/components/schemas/PlatformVideo' } } } }
|
||
RPlatformVideoComment: { type: object, properties: { code: { type: integer }, msg: { type: string }, data: { $ref: '#/components/schemas/PlatformVideoComment' } } }
|
||
RPlatformVideoCommentList: { type: object, properties: { code: { type: integer }, msg: { type: string }, data: { type: array, items: { $ref: '#/components/schemas/PlatformVideoComment' } } } }
|