artist 资格状态改为 artist.status (2026-03-09)

本文档覆盖 2026-03-09 这次需求的最终对接方案。 旧方案中的 artist_role_revoked_at / is_artist_qualification_canceled 已废弃,前端不要再使用。

影响接口

  • GET /api/user/info
  • POST /api/content/artist/list
  • GET /api/content/artist/info
  • POST /api/content/service/list
  • GET /api/content/service/info
  • POST /api/content/artwork/list
  • GET /api/content/artwork/info
  • POST /api/chats/list
  • POST /api/chats/create
  • POST /api/chats/new_chats
  • POST /api/groups/list
  • POST /api/groups/info
  • POST /api/groups/new_groups
  • Echo 事件中的 chat/group.users[*]
    • ChatCreated
    • ChatUpdated
    • ChatMessageCreated
    • ChatMessageTranslateSuccessed
    • GroupCreated
    • GroupUpdated
    • GroupMessageCreated

变更点

  • artist 资格状态的唯一来源改为 artist.status
  • artist.status 取值:
    • active
    • revoked
  • artist.revoked_at 表示 artist 资格被取消的时间;当 status = active 时应视为 null
  • 以下旧字段不再作为前端对接字段使用:
    • artist_role_revoked_at
    • is_artist_qualification_canceled

1) user info

  • GET /api/user/infodata.artist 对“历史上是 artist,但当前资格已取消”的用户仍然会返回,不会再强制为 null
  • GET /api/user/infodata.artist 里应读取:
    • status
    • revoked_at
  • GET /api/user/infodata.is_artist 含义变为:
    • 当前是否仍是“可用中的 artist”
    • 即:有 artist profile,且 artist.status = active
  • GET /api/user/infodata.permissions 现在可能包含:
    • view_deposit_wallet
  • view_deposit_wallet 的前端含义:
    • 是否展示提现钱包相关入口/页面
  • 以下用户会返回 view_deposit_wallet
    • 当前仍是 artist 的用户
    • artist 资格已取消,但仍保留 artist 历史身份的用户
  • 被封禁用户不会返回 view_deposit_wallet
  • content list / 搜索接口会隐藏以下内容:
    • 被封禁用户的 artist / service / artwork
    • artist.status = revoked 的 artist / service / artwork
  • 前端对 list 结果无需再自行过滤 revoked artist。

3) content info

  • content info 接口与 list 的可见性不再完全一致。
  • 对于仅“artist 资格被取消”的对象:
    • artist info 仍可通过已知 id / cname 访问
    • service info 仍可通过已知 id 访问
    • artwork info 仍可通过已知 id 访问
  • 对于“用户已被封禁”的对象:
    • content info 仍不可访问
  • 前端可继续支持“直接输入链接访问 artist 主页”的场景。
  • info 返回里的 artist 状态字段:
    • GET /api/content/artist/info:读取 data.statusdata.revoked_at
    • GET /api/content/service/info:读取 data.artist.statusdata.artist.revoked_at
    • GET /api/content/artwork/info:读取 data.artist.statusdata.artist.revoked_at

4) chat / group

  • chat / group 用户对象中的 artist 不会因为资格被取消而强制变成 null
  • 也就是说,资格被取消的 artist,在聊天和群聊里仍然会返回 artist 头像、artist 名称等资料。
  • 资格被取消后,roles 里可能不再包含 artist;因此:
    • 不能再用 roles.includes('artist') 判断“是否展示 artist 身份信息”
    • 应改为根据 artist !== null 判断“该用户是否有 artist 身份资料”
  • 是否展示“已取消 artist 资格”标记,应基于:
    • artist?.status === 'revoked'
  • 聊天 / 群聊头像旁标签优先级:
    • is_user_banned
    • artist?.status === 'revoked'
    • 其他角色标记,例如 admin

请求示例

请求参数无新增;本次主要是返回结构与可见性语义调整。

user info

{}

content list

{
  "page": 1,
  "per_page": 20
}

返回示例

user info

{
  "data": {
    "id": 10001,
    "is_artist": false,
    "permissions": [
      "view_deposit_wallet"
    ],
    "artist": {
      "id": 20001,
      "name": "alice_artist",
      "cname": "alice_artist",
      "status": "revoked",
      "revoked_at": "2026-03-09T10:00:00.000000Z"
    },
    "roles": []
  }
}

聊天 / 群聊用户对象

{
  "id": 10001,
  "name": "alice",
  "roles": [],
  "is_user_banned": false,
  "artist": {
    "id": 20001,
    "name": "alice_artist",
    "cname": "alice_artist",
    "status": "revoked",
    "revoked_at": "2026-03-09T10:00:00.000000Z",
    "avatar": {
      "id": 501,
      "url": "https://..."
    }
  }
}

artist info

{
  "data": {
    "id": 20001,
    "name": "alice_artist",
    "status": "revoked",
    "revoked_at": "2026-03-09T10:00:00.000000Z"
  }
}

service info

{
  "data": {
    "id": 30001,
    "artist": {
      "id": 20001,
      "status": "revoked",
      "revoked_at": "2026-03-09T10:00:00.000000Z"
    }
  }
}

兼容性说明

  • 前端不要再读取:
    • artist_role_revoked_at
    • is_artist_qualification_canceled
  • 前端不要再用 roles 是否包含 artist 来决定聊天/群聊里展示 user 信息还是 artist 信息。
  • 前端不要再用 artist !== null 直接判断“是否仍具备有效 artist 资格”;因为 revoked artist 仍然会返回 artist
  • 判断“当前是否仍具备有效 artist 资格”,应优先读取:
    • artist.status === 'active'
    • GET /api/user/info 中的 is_artist
  • 判断“是否显示已取消 artist 资格标记”,应读取:
    • artist.status === 'revoked'
  • 提现钱包相关入口应基于 permissions 中是否包含 view_deposit_wallet 渲染,而不是基于 roles 中是否包含 artist
  • content list 不可见,不代表 content info 一定不可见:
    • revoked artist:list 不可见,info 可访问
    • banned user:list 不可见,info 也不可访问