paths:
  documentRecords:
    get:
      operationId: getPocketBaseDocumentRecords
      tags:
        - 文档信息
      summary: 分页查询文档列表 / 按 system_dict_id 与 enum 双条件分页筛选文档
      description: |
        使用 PocketBase 原生 records list 接口查询 `tbl_document`。

        当前线上权限规则：
        - `listRule = is_delete = 0`，因此任何客户端都可直接分页查询未软删除文档
        - `viewRule = is_delete = 0`，因此单条详情也只可读取未软删除文档
        - `create/update/delete` 仍仅管理员或管理后台用户允许

        `document_type` 的存储格式为：
        - `system_dict_id@dict_word_enum|system_dict_id@dict_word_enum`

        业务上这里是两个独立条件，并且查询时两个条件都要满足：
        - 条件 1：包含某个 `system_dict_id`
        - 条件 2：包含某个 `enum`

        PocketBase 原生标准接口实际只有一个 `filter` 参数，因此应在同一个 `filter` 中写成两个 `contains` 条件，例如：
        - `system_dict_id = DICT-1774599144591-hAEFQj`
        - `enum = UT1`
        - 最终：`document_type ~ "DICT-1774599144591-hAEFQj" && document_type ~ "@UT1"`

        这条写法已经按线上真实数据验证通过。

        排序说明：
        - 当前线上统一按 `document_create` 排序
        - 若要“最新上传的排在最前面”，请传 `sort=-document_create`

        标准调用方式有两种：
        1. 查询整个文档列表：
           - 不传 `filter`
           - 按需传 `page`、`perPage`
           - 若要按最新上传倒序，传 `sort=-document_create`
        2. 根据 `system_dict_id` 和 `enum` 两个业务条件分页筛选：
           - 直接传 `filter=document_type ~ "<system_dict_id>" && document_type ~ "@<enum>"`
           - 传 `page`、`perPage`
           - 若要按最新上传倒序，传 `sort=-document_create`

        注意：
        - 这是 PocketBase 原生返回结构，不是 hooks 统一 `{ statusCode, errMsg, data }` 包装
        - 如果需要更复杂的条件组合，可继续使用 PocketBase 原生 `filter` 语法自行扩展
      parameters:
        - name: filter
          in: query
          required: false
          description: |
            PocketBase 标准过滤表达式。

            - 查全部列表时：不传
            - 按业务条件筛选时，同时写两个 `contains` 条件
            - 第二个条件建议带上 `@` 前缀，避免误命中
            - 例如：`document_type ~ "DICT-1774599144591-hAEFQj" && document_type ~ "@UT1"`
          schema:
            type: string
          example: document_type ~ "DICT-1774599144591-hAEFQj" && document_type ~ "@UT1"
        - name: page
          in: query
          required: false
          description: 页码
          schema:
            type: integer
            minimum: 1
            default: 1
        - name: perPage
          in: query
          required: false
          description: 每页条数
          schema:
            type: integer
            minimum: 1
            default: 20
        - name: sort
          in: query
          required: false
          description: |
            PocketBase 原生排序表达式。

            当前线上建议使用：
            - `-document_create`：按最新上传倒序返回
          schema:
            type: string
          example: -document_create
      responses:
        "200":
          description: 查询成功
          content:
            application/json:
              schema:
                $ref: ../openapi-wx.yaml#/components/schemas/PocketBaseDocumentListResponse
              example:
                page: page|integer
                perPage: perPage|integer
                totalItems: totalItems|integer
                totalPages: totalPages|integer
                items:
                  - id: PocketBase 记录主键|string
                    collectionId: collectionId|string
                    collectionName: collectionName|string
                    created: 记录创建时间|string
                    updated: 记录更新时间|string
                    document_id: 文档业务 ID|string
                    document_create: 文档创建时间，由数据库自动生成|string
                    document_effect_date: 文档生效日期|string
                    document_expiry_date: 文档到期日期|string
                    document_title: 文档标题|string
                    document_type: 文档类型，多选时按 system_dict_id@dict_word_enum|... 保存|string
                    document_subtitle: 文档副标题|string
                    document_summary: 文档摘要|string
                    document_content: 正文内容，保存 Markdown|string
                    document_image: 图片附件 ID 集合，底层以 | 分隔|string
                    document_video: 视频附件 ID 集合，底层以 | 分隔|string
                    document_file: 文件附件 ID 集合，底层以 | 分隔|string
                    document_status: 文档状态，仅 有效 / 过期|string
                    document_owner: 上传者 openid|string
                    document_relation_model: 关联机型 / 模型标识|string
                    document_keywords: 关键词，多选后以 | 分隔|string
                    document_share_count: 分享次数|number
                    document_download_count: 下载次数|number
                    document_favorite_count: 收藏次数|number
                    document_embedding_status: 文档嵌入状态|string
                    document_embedding_error: 文档嵌入错误原因|string
                    document_embedding_lasttime: 最后一次嵌入更新时间|string
                    document_vector_version: 向量版本号 / 模型名称|string
                    document_product_categories: 产品关联文档，多选后以 | 分隔|string
                    document_application_scenarios: 筛选依据，多选后以 | 分隔|string
                    document_hotel_type: 适用场景，多选后以 | 分隔|string
                    document_remark: 备注|string
        "400":
          description: 查询参数错误
          content:
            application/json:
              schema:
                $ref: ../openapi-wx.yaml#/components/schemas/PocketBaseNativeError
              example:
                code: 业务状态码|integer
                message: message|string
                data:
                  业务响应数据字段|string: 业务响应数据值|string
        "403":
          description: 集合规则被锁定或服务端权限设置异常
          content:
            application/json:
              schema:
                $ref: ../openapi-wx.yaml#/components/schemas/PocketBaseNativeError
              example:
                code: 业务状态码|integer
                message: message|string
                data:
                  业务响应数据字段|string: 业务响应数据值|string
        "500":
          description: 服务端错误
          content:
            application/json:
              schema:
                $ref: ../openapi-wx.yaml#/components/schemas/PocketBaseNativeError
              example:
                code: 业务状态码|integer
                message: message|string
                data:
                  业务响应数据字段|string: 业务响应数据值|string
components:
  schemas:
    PocketBaseNativeError:
      type: object
      properties:
        code:
          type:
            - integer
            - string
          description: 业务状态码
          example: 错误状态码 | integer
        message:
          type: string
          example: PocketBase原生错误信息 | string
        data:
          description: 业务响应数据
          type: object
          additionalProperties: true
      example:
        code: 业务状态码|integer
        message: message|string
        data:
          业务响应数据字段|string: 业务响应数据值|string
    PocketBaseRecordBase:
      type: object
      required:
        - id
        - collectionId
        - collectionName
        - created
        - updated
      properties:
        id:
          type: string
          description: PocketBase 记录主键
          example: PocketBase记录主键 | string
        collectionId:
          type: string
          example: 集合ID | string
        collectionName:
          type: string
          example: 集合名称 | string
        created:
          type: string
          description: 记录创建时间
          example: 记录创建时间 | string
        updated:
          type: string
          description: 记录更新时间
          example: 记录更新时间 | string
      example:
        id: PocketBase 记录主键|string
        collectionId: collectionId|string
        collectionName: collectionName|string
        created: 记录创建时间|string
        updated: 记录更新时间|string
    PocketBaseDocumentFields:
      type: object
      properties:
        document_id:
          type: string
          description: 文档业务 ID
          example: 文档业务ID | string
        document_create:
          type: string
          description: 文档创建时间，由数据库自动生成
          example: 文档创建时间，由数据库自动生成 | string
        document_effect_date:
          type: string
          description: 文档生效日期
          example: 文档生效日期 | string
        document_expiry_date:
          type: string
          description: 文档到期日期
          example: 文档到期日期 | string
        document_title:
          type: string
          description: 文档标题
          example: 文档标题 | string
        document_type:
          type: string
          description: 文档类型，多选时按 system_dict_id@dict_word_enum|... 保存
          example: 文档类型，按system_dict_id@dict_word_enum保存 | string
        document_subtitle:
          type: string
          description: 文档副标题
          example: 文档副标题 | string
        document_summary:
          type: string
          description: 文档摘要
          example: 文档摘要 | string
        document_content:
          type: string
          description: 正文内容，保存 Markdown
          example: 正文内容 | string
        document_image:
          type: string
          description: 图片附件 ID 集合，底层以 | 分隔
          example: 图片附件ID串，底层按|分隔 | string
        document_video:
          type: string
          description: 视频附件 ID 集合，底层以 | 分隔
          example: 视频附件ID串，底层按|分隔 | string
        document_file:
          type: string
          description: 文件附件 ID 集合，底层以 | 分隔
          example: 文件附件ID串，底层按|分隔 | string
        document_status:
          type: string
          description: 文档状态，仅 `有效` / `过期`
          example: 文档状态 | string
        document_owner:
          type: string
          description: 上传者 openid
          example: 上传者openid | string
        document_relation_model:
          type: string
          description: 关联机型 / 模型标识
          example: 关联机型标识 | string
        document_keywords:
          type: string
          description: 关键词，多选后以 | 分隔
          example: 关键词，多选按|分隔 | string
        document_share_count:
          type: number
          description: 分享次数
          example: 0
        document_download_count:
          type: number
          description: 下载次数
          example: 0
        document_favorite_count:
          type: number
          description: 收藏次数
          example: 0
        document_embedding_status:
          type: string
          description: 文档嵌入状态
          example: 文档嵌入状态 | string
        document_embedding_error:
          type: string
          description: 文档嵌入错误原因
          example: 文档嵌入错误原因 | string
        document_embedding_lasttime:
          type: string
          description: 最后一次嵌入更新时间
          example: 最后一次嵌入更新时间 | string
        document_vector_version:
          type: string
          description: 向量版本号 / 模型名称
          example: 向量版本号或模型名称 | string
        document_product_categories:
          type: string
          description: 产品关联文档，多选后以 | 分隔
          example: 产品关联文档，多选按|分隔 | string
        document_application_scenarios:
          type: string
          description: 筛选依据，多选后以 | 分隔
          example: 筛选依据，多选按|分隔 | string
        document_hotel_type:
          type: string
          description: 适用场景，多选后以 | 分隔
          example: 适用场景，多选按|分隔 | string
        document_remark:
          type: string
          description: 备注
          example: 备注 | string
      example:
        document_id: 文档业务 ID|string
        document_create: 文档创建时间，由数据库自动生成|string
        document_effect_date: 文档生效日期|string
        document_expiry_date: 文档到期日期|string
        document_title: 文档标题|string
        document_type: 文档类型，多选时按 system_dict_id@dict_word_enum|... 保存|string
        document_subtitle: 文档副标题|string
        document_summary: 文档摘要|string
        document_content: 正文内容，保存 Markdown|string
        document_image: 图片附件 ID 集合，底层以 | 分隔|string
        document_video: 视频附件 ID 集合，底层以 | 分隔|string
        document_file: 文件附件 ID 集合，底层以 | 分隔|string
        document_status: 文档状态，仅 有效 / 过期|string
        document_owner: 上传者 openid|string
        document_relation_model: 关联机型 / 模型标识|string
        document_keywords: 关键词，多选后以 | 分隔|string
        document_share_count: 分享次数|number
        document_download_count: 下载次数|number
        document_favorite_count: 收藏次数|number
        document_embedding_status: 文档嵌入状态|string
        document_embedding_error: 文档嵌入错误原因|string
        document_embedding_lasttime: 最后一次嵌入更新时间|string
        document_vector_version: 向量版本号 / 模型名称|string
        document_product_categories: 产品关联文档，多选后以 | 分隔|string
        document_application_scenarios: 筛选依据，多选后以 | 分隔|string
        document_hotel_type: 适用场景，多选后以 | 分隔|string
        document_remark: 备注|string
    PocketBaseDocumentRecord:
      allOf:
        - $ref: ../openapi-wx.yaml#/components/schemas/PocketBaseRecordBase
        - $ref: ../openapi-wx.yaml#/components/schemas/PocketBaseDocumentFields
      example:
        id: PocketBase 记录主键|string
        collectionId: collectionId|string
        collectionName: collectionName|string
        created: 记录创建时间|string
        updated: 记录更新时间|string
        document_id: 文档业务 ID|string
        document_create: 文档创建时间，由数据库自动生成|string
        document_effect_date: 文档生效日期|string
        document_expiry_date: 文档到期日期|string
        document_title: 文档标题|string
        document_type: 文档类型，多选时按 system_dict_id@dict_word_enum|... 保存|string
        document_subtitle: 文档副标题|string
        document_summary: 文档摘要|string
        document_content: 正文内容，保存 Markdown|string
        document_image: 图片附件 ID 集合，底层以 | 分隔|string
        document_video: 视频附件 ID 集合，底层以 | 分隔|string
        document_file: 文件附件 ID 集合，底层以 | 分隔|string
        document_status: 文档状态，仅 有效 / 过期|string
        document_owner: 上传者 openid|string
        document_relation_model: 关联机型 / 模型标识|string
        document_keywords: 关键词，多选后以 | 分隔|string
        document_share_count: 分享次数|number
        document_download_count: 下载次数|number
        document_favorite_count: 收藏次数|number
        document_embedding_status: 文档嵌入状态|string
        document_embedding_error: 文档嵌入错误原因|string
        document_embedding_lasttime: 最后一次嵌入更新时间|string
        document_vector_version: 向量版本号 / 模型名称|string
        document_product_categories: 产品关联文档，多选后以 | 分隔|string
        document_application_scenarios: 筛选依据，多选后以 | 分隔|string
        document_hotel_type: 适用场景，多选后以 | 分隔|string
        document_remark: 备注|string
    PocketBaseDocumentListResponse:
      type: object
      required:
        - page
        - perPage
        - totalItems
        - totalPages
        - items
      properties:
        page:
          type:
            - integer
            - string
          example: 页码 | integer
        perPage:
          type:
            - integer
            - string
          example: 每页条数 | integer
        totalItems:
          type:
            - integer
            - string
          example: 总记录数 | integer
        totalPages:
          type:
            - integer
            - string
          example: 总页数 | integer
        items:
          type: array
          items:
            $ref: ../openapi-wx.yaml#/components/schemas/PocketBaseDocumentRecord
      example:
        page: page|integer
        perPage: perPage|integer
        totalItems: totalItems|integer
        totalPages: totalPages|integer
        items:
          - id: PocketBase 记录主键|string
            collectionId: collectionId|string
            collectionName: collectionName|string
            created: 记录创建时间|string
            updated: 记录更新时间|string
            document_id: 文档业务 ID|string
            document_create: 文档创建时间，由数据库自动生成|string
            document_effect_date: 文档生效日期|string
            document_expiry_date: 文档到期日期|string
            document_title: 文档标题|string
            document_type: 文档类型，多选时按 system_dict_id@dict_word_enum|... 保存|string
            document_subtitle: 文档副标题|string
            document_summary: 文档摘要|string
            document_content: 正文内容，保存 Markdown|string
            document_image: 图片附件 ID 集合，底层以 | 分隔|string
            document_video: 视频附件 ID 集合，底层以 | 分隔|string
            document_file: 文件附件 ID 集合，底层以 | 分隔|string
            document_status: 文档状态，仅 有效 / 过期|string
            document_owner: 上传者 openid|string
            document_relation_model: 关联机型 / 模型标识|string
            document_keywords: 关键词，多选后以 | 分隔|string
            document_share_count: 分享次数|number
            document_download_count: 下载次数|number
            document_favorite_count: 收藏次数|number
            document_embedding_status: 文档嵌入状态|string
            document_embedding_error: 文档嵌入错误原因|string
            document_embedding_lasttime: 最后一次嵌入更新时间|string
            document_vector_version: 向量版本号 / 模型名称|string
            document_product_categories: 产品关联文档，多选后以 | 分隔|string
            document_application_scenarios: 筛选依据，多选后以 | 分隔|string
            document_hotel_type: 适用场景，多选后以 | 分隔|string
            document_remark: 备注|string
