wuyi hace 1 mes
padre
commit
538db2c632
Se han modificado 3 ficheros con 0 adiciones y 1050 borrados
  1. 0 399
      docs/admin-detail-api.md
  2. 0 488
      docs/goods-api.md
  3. 0 163
      docs/scan-page-api.md

+ 0 - 399
docs/admin-detail-api.md

@@ -1,399 +0,0 @@
-# 管理员详情接口文档
-
-本文档描述了物品、宠物和人员的管理员详情查询接口。这些接口返回的图片URL会自动加签,确保安全访问。
-
----
-
-## 1. 物品详情接口
-
-### 接口信息
-- **接口路径**: `/goods-info/admin/detail`
-- **请求方法**: `GET`
-- **权限要求**: 管理员权限(ADMIN)
-- **接口描述**: 根据二维码ID获取物品详细信息,返回的图片URL带有阿里云OSS签名
-
-### 请求参数
-
-#### Query 参数
-
-| 参数名 | 类型 | 必填 | 说明 |
-|--------|------|------|------|
-| qrCodeId | string | 是 | 二维码ID |
-
-### 请求示例
-
-```bash
-GET /goods-info/admin/detail?qrCodeId=123
-Authorization: Bearer <admin_token>
-```
-
-### 响应参数
-
-| 参数名 | 类型 | 说明 |
-|--------|------|------|
-| id | number | 物品信息ID |
-| qrCodeId | number | 二维码ID |
-| name | string | 物品名称 |
-| description | string | 物品描述 |
-| photoUrl | string | 物品图片URL(带签名,有效期24小时) |
-| contactName | string | 联系人姓名 |
-| contactPhone | string | 联系人电话 |
-| contactAddress | string | 联系地址 |
-| remarks | string | 备注信息 |
-| createdAt | string | 创建时间 |
-| updatedAt | string | 更新时间 |
-
-### 响应示例
-
-#### 成功响应 (200)
-
-```json
-{
-  "id": 1,
-  "qrCodeId": 123,
-  "name": "笔记本电脑",
-  "description": "MacBook Pro 16寸",
-  "photoUrl": "https://your-bucket.oss-cn-hangzhou.aliyuncs.com/uploads/2024-12-01/xxx.jpg?Expires=1733097600&OSSAccessKeyId=xxx&Signature=xxx",
-  "contactName": "张三",
-  "contactPhone": "13800138000",
-  "contactAddress": "北京市朝阳区xxx",
-  "remarks": "重要物品",
-  "createdAt": "2024-12-01T10:00:00.000Z",
-  "updatedAt": "2024-12-01T10:00:00.000Z"
-}
-```
-
-#### 错误响应
-
-**400 - 参数错误**
-```json
-{
-  "message": "请提供二维码ID"
-}
-```
-
-**404 - 未找到**
-```json
-{
-  "message": "物品信息不存在"
-}
-```
-
-**401 - 未授权**
-```json
-{
-  "message": "未授权访问"
-}
-```
-
-**403 - 权限不足**
-```json
-{
-  "message": "需要管理员权限"
-}
-```
-
----
-
-## 2. 宠物详情接口
-
-### 接口信息
-- **接口路径**: `/pet-info/admin/detail`
-- **请求方法**: `GET`
-- **权限要求**: 管理员权限(ADMIN)
-- **接口描述**: 根据二维码ID获取宠物详细信息,返回的图片URL带有阿里云OSS签名
-
-### 请求参数
-
-#### Query 参数
-
-| 参数名 | 类型 | 必填 | 说明 |
-|--------|------|------|------|
-| qrCodeId | string | 是 | 二维码ID |
-
-### 请求示例
-
-```bash
-GET /pet-info/admin/detail?qrCodeId=456
-Authorization: Bearer <admin_token>
-```
-
-### 响应参数
-
-| 参数名 | 类型 | 说明 |
-|--------|------|------|
-| id | number | 宠物信息ID |
-| qrCodeId | number | 二维码ID |
-| name | string | 宠物名称 |
-| species | string | 物种 |
-| breed | string | 品种 |
-| age | number | 年龄 |
-| gender | string | 性别 |
-| color | string | 颜色 |
-| photoUrl | string | 宠物图片URL(带签名,有效期24小时) |
-| contactName | string | 主人姓名 |
-| contactPhone | string | 主人电话 |
-| contactAddress | string | 联系地址 |
-| medicalHistory | string | 病史 |
-| remarks | string | 备注信息 |
-| createdAt | string | 创建时间 |
-| updatedAt | string | 更新时间 |
-
-### 响应示例
-
-#### 成功响应 (200)
-
-```json
-{
-  "id": 2,
-  "qrCodeId": 456,
-  "name": "旺财",
-  "species": "犬",
-  "breed": "金毛",
-  "age": 3,
-  "gender": "雄性",
-  "color": "金黄色",
-  "photoUrl": "https://your-bucket.oss-cn-hangzhou.aliyuncs.com/uploads/2024-12-01/yyy.jpg?Expires=1733097600&OSSAccessKeyId=xxx&Signature=xxx",
-  "contactName": "李四",
-  "contactPhone": "13900139000",
-  "contactAddress": "上海市浦东新区xxx",
-  "medicalHistory": "已接种狂犬疫苗",
-  "remarks": "性格温顺",
-  "createdAt": "2024-12-01T11:00:00.000Z",
-  "updatedAt": "2024-12-01T11:00:00.000Z"
-}
-```
-
-#### 错误响应
-
-**400 - 参数错误**
-```json
-{
-  "message": "请提供二维码ID"
-}
-```
-
-**404 - 未找到**
-```json
-{
-  "message": "宠物/物品信息不存在"
-}
-```
-
-**401 - 未授权**
-```json
-{
-  "message": "未授权访问"
-}
-```
-
-**403 - 权限不足**
-```json
-{
-  "message": "需要管理员权限"
-}
-```
-
----
-
-## 3. 人员详情接口
-
-### 接口信息
-- **接口路径**: `/person-info/admin/detail`
-- **请求方法**: `GET`
-- **权限要求**: 管理员权限(ADMIN)
-- **接口描述**: 根据二维码ID获取人员详细信息,返回的图片URL带有阿里云OSS签名
-
-### 请求参数
-
-#### Query 参数
-
-| 参数名 | 类型 | 必填 | 说明 |
-|--------|------|------|------|
-| qrCodeId | string | 是 | 二维码ID |
-
-### 请求示例
-
-```bash
-GET /person-info/admin/detail?qrCodeId=789
-Authorization: Bearer <admin_token>
-```
-
-### 响应参数
-
-| 参数名 | 类型 | 说明 |
-|--------|------|------|
-| id | number | 人员信息ID |
-| qrCodeId | number | 二维码ID |
-| name | string | 姓名 |
-| gender | string | 性别(MALE/FEMALE/OTHER) |
-| age | number | 年龄 |
-| phone | string | 电话 |
-| email | string | 邮箱 |
-| address | string | 地址 |
-| photoUrl | string | 照片URL(带签名,有效期24小时) |
-| idCard | string | 身份证号 |
-| emergencyContact | string | 紧急联系人 |
-| emergencyPhone | string | 紧急联系电话 |
-| bloodType | string | 血型 |
-| allergies | string | 过敏史 |
-| medicalHistory | string | 病史 |
-| remarks | string | 备注信息 |
-| createdAt | string | 创建时间 |
-| updatedAt | string | 更新时间 |
-
-### 响应示例
-
-#### 成功响应 (200)
-
-```json
-{
-  "id": 3,
-  "qrCodeId": 789,
-  "name": "王五",
-  "gender": "MALE",
-  "age": 35,
-  "phone": "13700137000",
-  "email": "wangwu@example.com",
-  "address": "广州市天河区xxx",
-  "photoUrl": "https://your-bucket.oss-cn-hangzhou.aliyuncs.com/uploads/2024-12-01/zzz.jpg?Expires=1733097600&OSSAccessKeyId=xxx&Signature=xxx",
-  "idCard": "440106198901011234",
-  "emergencyContact": "王太太",
-  "emergencyPhone": "13800138888",
-  "bloodType": "A型",
-  "allergies": "青霉素过敏",
-  "medicalHistory": "高血压",
-  "remarks": "定期体检",
-  "createdAt": "2024-12-01T12:00:00.000Z",
-  "updatedAt": "2024-12-01T12:00:00.000Z"
-}
-```
-
-#### 错误响应
-
-**400 - 参数错误**
-```json
-{
-  "message": "请提供二维码ID"
-}
-```
-
-**404 - 未找到**
-```json
-{
-  "message": "人员信息不存在"
-}
-```
-
-**401 - 未授权**
-```json
-{
-  "message": "未授权访问"
-}
-```
-
-**403 - 权限不足**
-```json
-{
-  "message": "需要管理员权限"
-}
-```
-
----
-
-## 通用说明
-
-### 认证方式
-所有接口都需要在请求头中携带管理员的 JWT Token:
-
-```
-Authorization: Bearer <your_admin_token>
-```
-
-### 图片URL说明
-- 返回的 `photoUrl` 是带有阿里云OSS签名的完整URL
-- 签名有效期为 **24小时**
-- 过期后需要重新调用接口获取新的签名URL
-- 如果原始数据中没有图片,`photoUrl` 字段可能为 `null` 或空字符串
-
-### 错误码说明
-
-| HTTP状态码 | 说明 |
-|-----------|------|
-| 200 | 请求成功 |
-| 400 | 请求参数错误 |
-| 401 | 未授权,需要登录 |
-| 403 | 权限不足,需要管理员权限 |
-| 404 | 资源不存在 |
-| 500 | 服务器内部错误 |
-
-### 调用示例(JavaScript)
-
-```javascript
-// 使用 fetch 调用物品详情接口
-async function getGoodsDetail(qrCodeId, token) {
-  const response = await fetch(
-    `https://api.example.com/goods-info/admin/detail?qrCodeId=${qrCodeId}`,
-    {
-      method: 'GET',
-      headers: {
-        'Authorization': `Bearer ${token}`,
-        'Content-Type': 'application/json'
-      }
-    }
-  );
-  
-  if (!response.ok) {
-    throw new Error(`HTTP error! status: ${response.status}`);
-  }
-  
-  const data = await response.json();
-  return data;
-}
-
-// 使用示例
-try {
-  const goodsInfo = await getGoodsDetail(123, 'your_admin_token');
-  console.log('物品信息:', goodsInfo);
-  console.log('图片URL:', goodsInfo.photoUrl);
-} catch (error) {
-  console.error('获取失败:', error);
-}
-```
-
-### 调用示例(cURL)
-
-```bash
-# 物品详情
-curl -X GET "https://api.example.com/goods-info/admin/detail?qrCodeId=123" \
-  -H "Authorization: Bearer your_admin_token"
-
-# 宠物详情
-curl -X GET "https://api.example.com/pet-info/admin/detail?qrCodeId=456" \
-  -H "Authorization: Bearer your_admin_token"
-
-# 人员详情
-curl -X GET "https://api.example.com/person-info/admin/detail?qrCodeId=789" \
-  -H "Authorization: Bearer your_admin_token"
-```
-
-### 注意事项
-
-1. **权限验证**: 所有接口都需要管理员权限,普通用户无法访问
-2. **参数验证**: qrCodeId 必须是有效的数字字符串
-3. **图片访问**: 返回的图片URL可以直接在浏览器中访问或用于前端展示
-4. **签名有效期**: 建议在签名过期前重新获取,避免图片无法访问
-5. **容错处理**: 如果图片URL生成失败,接口仍会返回其他数据,但 photoUrl 可能是原始路径
-
-### 性能优化建议
-
-1. **缓存策略**: 可以在客户端缓存详情数据,减少重复请求
-2. **图片预加载**: 对于列表页面,可以预先获取部分详情数据
-3. **批量查询**: 如需查询多个详情,建议分批次请求,避免并发过高
-
----
-
-## 更新日志
-
-- **2024-12-01**: 初始版本,添加三个管理员详情接口
-

+ 0 - 488
docs/goods-api.md

@@ -1,488 +0,0 @@
-# 物品信息接口文档
-
-## 概述
-
-物品信息管理接口用于处理与物品相关的二维码信息,包括创建、更新、查询等操作。
-
-**基础路径**: `/api/goods`
-
-**二维码类型**: `goods`
-
----
-
-## 接口列表
-
-### 1. 创建物品信息
-
-创建新的物品信息并激活二维码。
-
-**接口地址**: `POST /api/goods/create`
-
-**权限要求**: 无需认证(公开接口)
-
-**请求参数**:
-
-| 参数名       | 类型   | 必填 | 说明         | 示例                      |
-| ------------ | ------ | ---- | ------------ | ------------------------- |
-| qrCode       | string | 是   | 二维码编码   | "QR123456789"             |
-| photoUrl     | string | 否   | 物品照片 URL | "uploads/goods/photo.jpg" |
-| name         | string | 是   | 物品名称     | "苹果笔记本电脑"          |
-| contactName  | string | 是   | 联系人姓名   | "张三"                    |
-| contactPhone | string | 是   | 联系电话     | "13800138000"             |
-| contactEmail | string | 否   | 联系邮箱     | "zhangsan@example.com"    |
-
-**请求示例**:
-
-```json
-{
-  "qrCode": "QR123456789",
-  "photoUrl": "https://example.com/uploads/goods/laptop.jpg",
-  "name": "苹果笔记本电脑",
-  "contactName": "张三",
-  "contactPhone": "13800138000",
-  "contactEmail": "zhangsan@example.com"
-}
-```
-
-**成功响应** (201):
-
-```json
-{
-  "message": "物品信息创建成功",
-  "data": {
-    "id": 1,
-    "qrCodeId": 100,
-    "photoUrl": "uploads/goods/laptop.jpg",
-    "name": "苹果笔记本电脑",
-    "contactName": "张三",
-    "contactPhone": "13800138000",
-    "contactEmail": "zhangsan@example.com",
-    "remark": null,
-    "createdAt": "2024-01-01T10:00:00.000Z",
-    "updatedAt": "2024-01-01T10:00:00.000Z"
-  }
-}
-```
-
-**错误响应** (400):
-
-```json
-{
-  "message": "二维码不存在"
-}
-```
-
-```json
-{
-  "message": "二维码类型不匹配"
-}
-```
-
-```json
-{
-  "message": "二维码已激活,无法重复填写"
-}
-```
-
----
-
-### 2. 更新物品信息
-
-通过维护码更新已有的物品信息。
-
-**接口地址**: `PUT /api/goods/update`
-
-**权限要求**: 无需认证(需要维护码验证)
-
-**请求参数**:
-
-| 参数名          | 类型   | 必填 | 说明         | 示例                      |
-| --------------- | ------ | ---- | ------------ | ------------------------- |
-| qrCode          | string | 是   | 二维码编码   | "QR123456789"             |
-| maintenanceCode | string | 是   | 维护码       | "MAINT123456"             |
-| photoUrl        | string | 否   | 物品照片 URL | "uploads/goods/photo.jpg" |
-| name            | string | 否   | 物品名称     | "苹果笔记本电脑"          |
-| contactName     | string | 否   | 联系人姓名   | "张三"                    |
-| contactPhone    | string | 否   | 联系电话     | "13800138000"             |
-| contactEmail    | string | 否   | 联系邮箱     | "zhangsan@example.com"    |
-
-**请求示例**:
-
-```json
-{
-  "qrCode": "QR123456789",
-  "maintenanceCode": "MAINT123456",
-  "name": "苹果笔记本电脑 MacBook Pro",
-  "contactPhone": "13900139000"
-}
-```
-
-**成功响应** (200):
-
-```json
-{
-  "message": "物品信息更新成功",
-  "data": {
-    "id": 1,
-    "qrCodeId": 100,
-    "photoUrl": "uploads/goods/laptop.jpg",
-    "name": "苹果笔记本电脑 MacBook Pro",
-    "contactName": "张三",
-    "contactPhone": "13900139000",
-    "contactEmail": "zhangsan@example.com",
-    "remark": null,
-    "createdAt": "2024-01-01T10:00:00.000Z",
-    "updatedAt": "2024-01-01T11:00:00.000Z"
-  }
-}
-```
-
-**错误响应** (400):
-
-```json
-{
-  "message": "维护码错误"
-}
-```
-
-```json
-{
-  "message": "二维码不存在"
-}
-```
-
----
-
-### 3. 获取物品信息
-
-根据二维码获取物品详细信息。
-
-**接口地址**: `GET /api/goods/get`
-
-**权限要求**: 无需认证(公开接口)
-
-**请求参数**:
-
-| 参数名 | 类型   | 必填 | 说明       | 示例          |
-| ------ | ------ | ---- | ---------- | ------------- |
-| qrCode | string | 是   | 二维码编码 | "QR123456789" |
-
-**请求示例**:
-
-```
-GET /api/goods/get?qrCode=QR123456789
-```
-
-**成功响应** (200):
-
-```json
-{
-  "id": 1,
-  "qrCodeId": 100,
-  "photoUrl": "uploads/goods/laptop.jpg",
-  "name": "苹果笔记本电脑",
-  "contactName": "张三",
-  "contactPhone": "13800138000",
-  "contactEmail": "zhangsan@example.com",
-  "remark": null,
-  "createdAt": "2024-01-01T10:00:00.000Z",
-  "updatedAt": "2024-01-01T10:00:00.000Z"
-}
-```
-
-**错误响应** (400):
-
-```json
-{
-  "message": "请提供二维码参数"
-}
-```
-
-**错误响应** (404):
-
-```json
-{
-  "message": "物品信息不存在"
-}
-```
-
----
-
-### 4. 查询物品列表(管理员)
-
-分页查询物品信息列表,支持多条件筛选。
-
-**接口地址**: `GET /api/goods/list`
-
-**权限要求**: 需要管理员权限
-
-**请求头**:
-
-```
-Authorization: Bearer <token>
-```
-
-**请求参数**:
-
-| 参数名       | 类型   | 必填 | 说明                   | 示例         |
-| ------------ | ------ | ---- | ---------------------- | ------------ |
-| name         | string | 否   | 物品名称(模糊查询)   | "笔记本"     |
-| contactName  | string | 否   | 联系人姓名(模糊查询) | "张三"       |
-| contactPhone | string | 否   | 联系电话(模糊查询)   | "138"        |
-| startDate    | string | 否   | 开始日期(ISO 格式)   | "2024-01-01" |
-| endDate      | string | 否   | 结束日期(ISO 格式)   | "2024-12-31" |
-| page         | number | 否   | 页码(从 1 开始)      | 1            |
-| pageSize     | number | 否   | 每页数量               | 20           |
-
-**请求示例**:
-
-```
-GET /api/goods/list?name=笔记本&page=1&pageSize=20
-```
-
-**成功响应** (200):
-
-```json
-{
-  "content": [
-    {
-      "id": 1,
-      "qrCodeId": 100,
-      "photoUrl": "uploads/goods/laptop.jpg",
-      "name": "苹果笔记本电脑",
-      "contactName": "张三",
-      "contactPhone": "13800138000",
-      "contactEmail": "zhangsan@example.com",
-      "remark": null,
-      "createdAt": "2024-01-01T10:00:00.000Z",
-      "updatedAt": "2024-01-01T10:00:00.000Z"
-    },
-    {
-      "id": 2,
-      "qrCodeId": 101,
-      "photoUrl": "uploads/goods/laptop2.jpg",
-      "name": "联想笔记本电脑",
-      "contactName": "李四",
-      "contactPhone": "13900139000",
-      "contactEmail": "lisi@example.com",
-      "remark": null,
-      "createdAt": "2024-01-02T10:00:00.000Z",
-      "updatedAt": "2024-01-02T10:00:00.000Z"
-    }
-  ],
-  "metadata": {
-    "total": 50,
-    "page": 1,
-    "size": 20
-  }
-}
-```
-
-**错误响应** (401):
-
-```json
-{
-  "message": "未授权"
-}
-```
-
-**错误响应** (403):
-
-```json
-{
-  "message": "权限不足"
-}
-```
-
----
-
-### 5. 管理员更新物品信息
-
-管理员直接通过二维码 ID 更新物品信息,无需维护码。
-
-**接口地址**: `POST /api/goods/admin/update`
-
-**权限要求**: 需要管理员权限
-
-**请求头**:
-
-```
-Authorization: Bearer <token>
-```
-
-**请求参数**:
-
-| 参数名       | 类型   | 必填 | 说明         | 示例                      |
-| ------------ | ------ | ---- | ------------ | ------------------------- |
-| qrCodeId     | number | 是   | 二维码 ID    | 100                       |
-| photoUrl     | string | 否   | 物品照片 URL | "uploads/goods/photo.jpg" |
-| name         | string | 否   | 物品名称     | "苹果笔记本电脑"          |
-| contactName  | string | 否   | 联系人姓名   | "张三"                    |
-| contactPhone | string | 否   | 联系电话     | "13800138000"             |
-| contactEmail | string | 否   | 联系邮箱     | "zhangsan@example.com"    |
-
-**请求示例**:
-
-```json
-{
-  "qrCodeId": 100,
-  "name": "苹果笔记本电脑 MacBook Pro 2024",
-  "contactPhone": "13900139000"
-}
-```
-
-**成功响应** (200):
-
-```json
-{
-  "message": "物品信息更新成功",
-  "data": {
-    "id": 1,
-    "qrCodeId": 100,
-    "photoUrl": "uploads/goods/laptop.jpg",
-    "name": "苹果笔记本电脑 MacBook Pro 2024",
-    "contactName": "张三",
-    "contactPhone": "13900139000",
-    "contactEmail": "zhangsan@example.com",
-    "remark": null,
-    "createdAt": "2024-01-01T10:00:00.000Z",
-    "updatedAt": "2024-01-01T12:00:00.000Z"
-  }
-}
-```
-
-**错误响应** (400):
-
-```json
-{
-  "message": "请提供二维码ID"
-}
-```
-
-```json
-{
-  "message": "物品信息不存在"
-}
-```
-
-**错误响应** (401):
-
-```json
-{
-  "message": "未授权"
-}
-```
-
-**错误响应** (403):
-
-```json
-{
-  "message": "权限不足"
-}
-```
-
----
-
-## 数据模型
-
-### GoodsInfo 物品信息
-
-| 字段名       | 类型   | 说明                            |
-| ------------ | ------ | ------------------------------- |
-| id           | number | 物品信息 ID(主键)             |
-| qrCodeId     | number | 关联的二维码 ID(唯一)         |
-| photoUrl     | string | 物品照片 URL(可选)            |
-| name         | string | 物品名称(最长 100 字符)       |
-| contactName  | string | 联系人姓名(最长 100 字符)     |
-| contactPhone | string | 联系电话(最长 20 字符)        |
-| contactEmail | string | 联系邮箱(可选,最长 100 字符) |
-| remark       | string | 备注信息(可选,最长 500 字符) |
-| createdAt    | Date   | 创建时间                        |
-| updatedAt    | Date   | 更新时间                        |
-
----
-
-## 业务流程
-
-### 创建物品信息流程
-
-1. 用户扫描二维码获取 `qrCode` 参数
-2. 调用创建接口 `POST /api/goods/create`
-3. 系统验证二维码是否存在
-4. 系统验证二维码类型是否为 `goods`
-5. 系统验证二维码是否已激活
-6. 创建物品信息并激活二维码
-7. 返回创建成功的物品信息
-
-### 更新物品信息流程
-
-1. 用户扫描二维码获取 `qrCode` 参数
-2. 用户输入维护码 `maintenanceCode`
-3. 调用更新接口 `PUT /api/goods/update`
-4. 系统验证维护码是否正确
-5. 系统验证二维码是否存在
-6. 如果物品信息不存在,则创建新记录
-7. 如果物品信息存在,则更新记录
-8. 返回更新后的物品信息
-
-### 查询物品信息流程
-
-1. 用户扫描二维码获取 `qrCode` 参数
-2. 调用查询接口 `GET /api/goods/get?qrCode=xxx`
-3. 系统根据二维码查找物品信息
-4. 返回物品详细信息
-
----
-
-## 注意事项
-
-1. **照片 URL 处理**:
-
-   - 如果传入完整 URL(如 `https://example.com/uploads/goods/photo.jpg`),系统会自动提取路径部分(`uploads/goods/photo.jpg`)
-   - 建议直接传入相对路径
-
-2. **二维码激活**:
-
-   - 创建物品信息时会自动激活二维码
-   - 已激活的二维码无法重复创建物品信息
-   - 可以通过维护码更新已激活的二维码信息
-
-3. **维护码**:
-
-   - 维护码在创建二维码时生成
-   - 用于验证用户是否有权限更新物品信息
-   - 请妥善保管维护码
-
-4. **分页查询**:
-
-   - 默认页码为 1,每页 20 条记录
-   - 页码从 1 开始计数
-   - 支持多条件组合查询
-
-5. **权限控制**:
-   - 创建、更新、查询接口为公开接口
-   - 列表查询和管理员更新需要管理员权限
-   - 需要在请求头中携带有效的 JWT Token
-
----
-
-## 错误码说明
-
-| HTTP 状态码 | 说明                          |
-| ----------- | ----------------------------- |
-| 200         | 请求成功                      |
-| 201         | 创建成功                      |
-| 400         | 请求参数错误或业务逻辑错误    |
-| 401         | 未授权(未登录或 Token 无效) |
-| 403         | 权限不足                      |
-| 404         | 资源不存在                    |
-| 500         | 服务器内部错误                |
-
----
-
-## 相关接口
-
-- [二维码管理接口](./qr-code-api.md)
-- [宠物信息接口](./pet-info-api.md)
-- [人员信息接口](./person-info-api.md)
-- [扫描记录接口](./scan-record-api.md)

+ 0 - 163
docs/scan-page-api.md

@@ -1,163 +0,0 @@
-# 扫码页接口文档
-
-本文聚焦终端用户在扫码页(即通过二维码 URL 访问的 H5或小程序页面)所需的开放接口,方便前端快速集成展示、补充信息及安全校验。
-
-## 1. 基础信息
-- **根地址**:`/api`
-- **二维码相关前缀**:`/api/qr`
-- **人员/宠物信息前缀**:`/api/person`、`/api/pet`
-- **扫码记录前缀**:`/api/scan`
-- **认证**:扫码页接口均无需 JWT;带有 `hasRole(UserRole.ADMIN)` 的后台接口未在本文档描述
-- **请求头**:`Content-Type: application/json`
-- **二维码类型**:`person`(人员)、`pet`(宠物/物品),来自 `QrType` 枚举
-
----
-
-## 2. 推荐调用流程
-1. 前端解析二维码中的 `qrCode` 参数
-2. 调用【获取二维码信息】接口,展示二维码基本信息和绑定资料
-3. 若需补充位置或地址,再调用【补充扫描记录】接口
-4. 若用户需维护数据,先调【验证维护码】确认身份,再调用对应的更新接口
-5. 可选:调用【最近扫描记录】展示访问信息
-
----
-
-## 3. 接口清单概览
-
-| 接口 | 方法 | 路径 | 作用 | 说明 |
-| --- | --- | --- | --- | --- |
-| 获取二维码信息 | GET | `/api/qr/info` | 查询二维码及绑定数据,并自动记录一次扫描 | 最常用;返回 `qrType` 与 `info` |
-| 验证维护码 | POST | `/api/qr/verify` | 校验用户输入的维护码 | 通过后才允许调用更新接口 |
-| 补充扫描记录 | POST | `/api/scan/create` | 保存带经纬度/地址的扫描记录 | 可追加精确定位 |
-| 最近扫描记录 | GET | `/api/scan/recent` | 查询某二维码最近 N 次扫描 | 可用于展示访客列表 |
-| 获取人员信息 | GET | `/api/person/get` | 直接返回人员信息实体 | 作为 `qr/info` 的兜底 |
-| 获取宠物信息 | GET | `/api/pet/get` | 直接返回宠物/物品信息实体 | 作为 `qr/info` 的兜底 |
-
----
-
-## 4. 接口详情
-
-### 4.1 获取二维码信息
-- **方法/路径**:`GET /api/qr/info`
-- **查询参数**:
-  - `qrCode` *(string, required)*:二维码编号
-- **行为**:
-  1. 校验 `qrCode`,缺失返回 400
-  2. 自动记录一次扫描(记录请求 IP、User-Agent)
-  3. 返回二维码基础数据 + 绑定的人员或宠物信息
-- **成功响应示例**:
-```json
-{
-  "id": 12,
-  "qrCode": "QR2025ABC...",
-  "qrType": "person",
-  "isActivated": true,
-  "scanCount": 42,
-  "info": {
-    "id": 8,
-    "qrCodeId": 12,
-    "photoUrl": "https://...",
-    "name": "张三",
-    "gender": "male",
-    "phone": "13800000000",
-    "specialNote": "有心脏病",
-    "emergencyContactName": "李四",
-    "emergencyContactPhone": "13900000000",
-    "remark": "..."
-  }
-}
-```
-- **错误响应**:
-  - 400 `{ "message": "请提供二维码参数" }`
-  - 500 `{ "message": "获取信息失败" }`
-
-### 4.2 验证维护码
-- **方法/路径**:`POST /api/qr/verify`
-- **请求体**:
-```json
-{
-  "qrCode": "QR2025ABC...",
-  "maintenanceCode": "AB12CD34"
-}
-```
-- **说明**:
-  - 维护码与二维码生成时随机分配,服务端使用 bcrypt 存储;请通过 HTTPS 传输
-  - 校验通过返回 `{ "message": "验证成功", "valid": true }`
-  - 维护码错误:401 `{ "message": "维护码错误" }`
-  - 其它异常:500 `{ "message": "验证失败" }`
-- **后续操作**:前端可在成功后提交人员或宠物信息更新:
-  - `PUT /api/person/update`
-  - `PUT /api/pet/update`
-  - 两者请求体均需携带 `qrCode` 与 `maintenanceCode`,字段约束参考对应 DTO
-
-### 4.3 补充扫描记录
-- **方法/路径**:`POST /api/scan/create`
-- **请求体**(各字段均为可选,除 `qrCode` 必填):
-```json
-{
-  "qrCode": "QR2025ABC...",
-  "latitude": 31.2304,
-  "longitude": 121.4737,
-  "address": "上海市黄浦区XX路XXX号",
-  "ipAddress": "手动覆盖 IP",
-  "userAgent": "自定义 UA"
-}
-```
-- **处理逻辑**:
-  - 若未提供 `ipAddress` / `userAgent`,自动回退为请求源信息
-  - 保存记录时会同步递增 `scanCount`
-- **响应**:201 `{ "message": "扫描记录创建成功", "data": { ...scanRecord } }`
-- **常见错误**:
-  - 400 `{ "message": "创建失败" }`(参数校验不通过或二维码不存在)
-
-### 4.4 最近扫描记录
-- **方法/路径**:`GET /api/scan/recent`
-- **查询参数**:
-  - `qrCode` *(string, required)*
-  - `limit` *(number, optional, default=10)*:返回最近 N 条
-- **响应**:
-```json
-{
-  "qrCode": "QR2025ABC...",
-  "count": 5,
-  "records": [
-    {
-      "id": 1001,
-      "scanTime": "2025-11-28T02:12:11.123Z",
-      "latitude": 31.2304,
-      "longitude": 121.4737,
-      "address": "上海市...",
-      "ipAddress": "1.2.3.4",
-      "userAgent": "Mozilla/5.0 ..."
-    }
-  ]
-}
-```
-- **错误**:缺参返回 400,查询异常返回 500
-
-### 4.5 获取人员/宠物信息(兜底)
-- `GET /api/person/get?qrCode=...`
-- `GET /api/pet/get?qrCode=...`
-- **用途**:当需要根据 `qrType` 分别渲染或在 `/api/qr/info` 出错时兜底查询
-- **响应**:直接返回对应实体;未录入信息则返回 404 `{ "message": "人员信息不存在" }` / `{ "message": "宠物/物品信息不存在" }`
-
----
-
-## 5. 响应码对照
-
-| 状态码 | 说明 | 常见场景 |
-| --- | --- | --- |
-| 200 | OK | 查询或验证成功 |
-| 201 | Created | 扫描记录创建成功 |
-| 400 | Bad Request | 缺失参数 / DTO 校验失败 |
-| 401 | Unauthorized | 维护码错误 |
-| 404 | Not Found | 未配置人员/宠物资料 |
-| 500 | Internal Server Error | 未知异常 |
-
----
-
-## 6. 开发提示
-- `qrCode` 大小写敏感,需与生成规则一致(`QR` 前缀 + 时间戳 + 随机串)
-- 维护码为 8 位字母数字组合,用户侧应妥善保存并通过 HTTPS 传输
-- DTO 对经纬度、手机号、邮箱等均有限制,前端提交前应做基础校验
-- 后续如需扩展扫码页能力(例如展示更多统计),可追加后台接口或在 Swagger(`/documentation`, dev 环境)中查阅其它 API