paths:
  attachmentRecords:
    get:
      operationId: getPocketBaseAttachmentRecords
      tags:
        - 附件信息
      summary: 根据 attachments_id 查询单条或多条附件信息
      description: |
        使用 PocketBase 原生 records list 接口查询 `tbl_attachments`。

        当前线上权限规则：
        - `listRule = is_delete = 0`，因此任何客户端都可直接读取未软删除附件
        - 原生 `create/update/delete` 仍仅管理员或管理后台用户允许

        标准调用方式有两种：
        1. 按 `attachments_id` 查询单条：
           - `filter=attachments_id="ATT-1774599142438-8n1UcU"`
           - `perPage=1`
           - `page=1`
        2. 按多个 `attachments_id` 批量查询：
           - 使用 `||` 组合多个等值条件
           - 例如：`filter=attachments_id="ATT-1774599142438-8n1UcU" || attachments_id="ATT-1774599143999-7pQkLm"`
           - 传 `perPage` 为预期返回条数，`page=1`

        注意：
        - 这是 PocketBase 原生返回结构，不是 hooks 统一 `{ statusCode, errMsg, data }` 包装
        - `attachments_link` 返回的是 PocketBase 文件字段值，不是完整下载地址
        - 若需文件流地址，可按 PocketBase 标准文件路径自行拼接：`/pb/api/files/{collectionId}/{recordId}/{attachments_link}`
      parameters:
        - name: filter
          in: query
          required: false
          description: |
            PocketBase 标准过滤表达式。

            - 按 `attachments_id` 精确查询单条：`attachments_id="ATT-1774599142438-8n1UcU"`
            - 按多个 `attachments_id` 批量查询：`attachments_id="ATT-1774599142438-8n1UcU" || attachments_id="ATT-1774599143999-7pQkLm"`
            - 不传该参数时，返回分页列表
          schema:
            type: string
          example: attachments_id="ATT-1774599142438-8n1UcU"
        - name: page
          in: query
          required: false
          description: 页码
          schema:
            type: integer
            minimum: 1
            default: 1
        - name: perPage
          in: query
          required: false
          description: 每页条数；单查建议为 `1`，批量查询建议设置为预期条数
          schema:
            type: integer
            minimum: 1
            default: 20
      responses:
        "200":
          description: 查询成功
          content:
            application/json:
              schema:
                $ref: ../openapi-wx.yaml#/components/schemas/PocketBaseAttachmentListResponse
              example:
                page: page|integer
                perPage: perPage|integer
                totalItems: totalItems|integer
                totalPages: totalPages|integer
                items:
                  - id: PocketBase 记录主键|string
                    collectionId: 集合ID|string
                    collectionName: 集合名称|string
                    attachments_id: 附件业务 ID|string
                    attachments_link: PocketBase 文件字段值，可按标准文件路径拼接文件流地址|string
                    attachments_filename: 原始文件名|string
                    attachments_filetype: 文件类型 / MIME|string
                    attachments_size: 文件大小|number
                    attachments_owner: 上传者业务标识|string
                    attachments_md5: 文件 MD5|string
                    attachments_ocr: OCR 识别结果|string
                    attachments_status: 附件状态|string
                    attachments_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
    PocketBaseAttachmentRecord:
      type: object
      properties:
        id:
          type: string
          description: PocketBase 记录主键
          example: PocketBase记录主键 | string
        collectionId:
          type: string
          description: 集合ID
          example: 集合ID | string
        collectionName:
          type: string
          description: 集合名称
          example: 集合名称 | string
        attachments_id:
          type: string
          description: 附件业务 ID
          example: 附件业务ID | string
        attachments_link:
          type: string
          description: PocketBase 文件字段值，可按标准文件路径拼接文件流地址
          example: PocketBase文件字段值，可拼接文件流地址 | string
        attachments_filename:
          type: string
          description: 原始文件名
          example: 原始文件名 | string
        attachments_filetype:
          type: string
          description: 文件类型 / MIME
          example: 文件类型或MIME | string
        attachments_size:
          type:
            - number
            - integer
            - string
          description: 文件大小
          example: 文件大小 | number
        attachments_owner:
          type: string
          description: 上传者业务标识
          example: 上传者业务标识 | string
        attachments_md5:
          type: string
          description: 文件 MD5
          example: 文件MD5 | string
        attachments_ocr:
          type: string
          description: OCR 识别结果
          example: OCR识别结果 | string
        attachments_status:
          type: string
          description: 附件状态
          example: 附件状态 | string
        attachments_remark:
          type: string
          description: 备注
          example: 备注 | string
      example:
        id: PocketBase 记录主键|string
        collectionId: 集合ID|string
        collectionName: 集合名称|string
        attachments_id: 附件业务 ID|string
        attachments_link: PocketBase 文件字段值，可按标准文件路径拼接文件流地址|string
        attachments_filename: 原始文件名|string
        attachments_filetype: 文件类型 / MIME|string
        attachments_size: 文件大小|number
        attachments_owner: 上传者业务标识|string
        attachments_md5: 文件 MD5|string
        attachments_ocr: OCR 识别结果|string
        attachments_status: 附件状态|string
        attachments_remark: 备注|string
    PocketBaseAttachmentListResponse:
      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/PocketBaseAttachmentRecord
      example:
        page: page|integer
        perPage: perPage|integer
        totalItems: totalItems|integer
        totalPages: totalPages|integer
        items:
          - id: PocketBase 记录主键|string
            collectionId: 集合ID|string
            collectionName: 集合名称|string
            attachments_id: 附件业务 ID|string
            attachments_link: PocketBase 文件字段值，可按标准文件路径拼接文件流地址|string
            attachments_filename: 原始文件名|string
            attachments_filetype: 文件类型 / MIME|string
            attachments_size: 文件大小|number
            attachments_owner: 上传者业务标识|string
            attachments_md5: 文件 MD5|string
            attachments_ocr: OCR 识别结果|string
            attachments_status: 附件状态|string
            attachments_remark: 备注|string
