服务架构图
路由规则
| 请求路径 | 转发服务 | 说明 |
|---|---|---|
| /api/login, /api/register | user-service | 登录注册 |
| /api/token/**, /api/login-logs/** | user-service | 令牌/日志 |
| /api/users/** | user-service | 用户管理 |
| /api/profile/** | user-service | 个人资料 |
| /api/drive/** | drive-service | 网盘管理 |
| /api/icon/** | drive-service | Icon管理 |
| /api/movies/** | tmdb-service | 电影管理 |
| /api/tmdb/**, /api/tmdb-scraper/** | tmdb-service | TMDB刮削 |
用户认证服务
wangpan-user-service : 8081请求体
成功响应示例
失败响应示例 — 用户名或密码错误
失败响应示例 — 账号被禁用
失败响应示例 — 参数缺失
userType 说明
| 值 | 角色 | 权限说明 |
|---|---|---|
| 0 | 普通用户 | 仅访问自己的数据(如日志只看自己的) |
| 1 | VIP 用户 | 普通用户 + 更多存储空间 |
| 2 | 管理员 | 可查看所有用户数据(如全部日志) |
请求体
成功响应示例
失败响应示例 — 用户名已存在
失败响应示例 — 参数缺失
请求头
成功响应示例 — Token 有效
失败响应示例 — Token 无效或已过期
权限说明
| 用户类型 | 可见范围 |
|---|---|
| 普通用户(userType=0/1) | 仅自己的登录记录 |
| 管理员(userType=2) | 所有用户的登录记录 |
查询参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| username | String | 否 | 按用户名模糊筛选(管理员可用) |
| result | String | 否 | 登录结果:success / fail |
| startDate | String | 否 | 开始日期(含),格式:yyyy-MM-dd,如 2026-06-01 |
| endDate | String | 否 | 结束日期(含),格式:yyyy-MM-dd,如 2026-06-10 |
| pageNo | int | 否 | 页码,默认 1 |
| pageSize | int | 否 | 每页条数,默认 20 |
提示:可组合使用多个筛选条件,如 ?result=fail&startDate=2026-06-01&endDate=2026-06-10
成功响应示例
失败响应示例 — 未登录
失败响应示例 — 权限不足
用户管理
wangpan-user-service : 8081 仅管理员 (userType=2)权限说明
| 角色 | 访问权限 |
|---|---|
| 普通/VIP 用户 | 403 权限不足 |
| 管理员 | 可查看所有用户列表 |
查询参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| username | String | 否 | 用户名模糊搜索 |
| status | int | 否 | 状态:0=禁用, 1=正常, 2=锁定 |
| userType | int | 否 | 角色:0=普通, 1=VIP, 2=管理员 |
| pageNo | int | 否 | 页码,默认 1 |
| pageSize | int | 否 | 每页条数,默认 20 |
成功响应示例
失败响应示例 — 权限不足
失败响应示例 — 未登录
请求体
成功响应
失败响应示例 — 用户名已存在
失败响应示例 — 参数缺失
失败响应示例 — 权限不足
失败响应示例 — 服务器错误
路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
| userId | Long | 目标用户 ID |
请求体(部分更新,只传需要修改的字段)
成功响应
失败响应示例 — 用户不存在
失败响应示例 — 参数缺失
失败响应示例 — 权限不足
失败响应示例 — 服务器错误
路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
| userId | Long | 要删除的用户 ID |
说明
软删除操作,将 is_deleted 设为 1,不物理删除数据。
成功响应
失败响应示例 — 用户不存在
失败响应示例 — 删除失败
失败响应示例 — 权限不足
失败响应示例 — 服务器错误
个人资料
wangpan-user-service : 8081功能说明
获取当前登录用户的基本信息(不含密码等敏感字段)。
成功响应示例
失败响应示例 — 未登录
失败响应示例 — 用户不存在
功能说明
修改当前登录用户的用户名。
校验规则:
- 用户名不能为空
- 新用户名不能与当前用户名相同
- 新用户名不能被其他用户占用
请求体
成功响应示例
失败响应示例 — 用户名已存在
失败响应示例 — 参数错误
功能说明
修改当前登录用户的头像。
流程:
- 接收 Base64 编码的图片数据
- 解析 MIME 类型和 Base64 内容
- 上传到 MinIO(路径:avatar/{userId}_{timestamp}.{ext})
- 更新数据库中的 avatar_url 字段
支持的图片格式:PNG、JPG/JPEG、GIF、WebP
请求体
成功响应示例
失败响应示例 — 图片格式不支持
失败响应示例 — MinIO 上传失败
网盘管理服务
wangpan-drive-service : 8082请求体
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | String | 是 | 网盘名称 |
| description | String | 否 | 网盘描述 |
| logoData | String | 否 | Logo图片Base64编码,支持 data:image/xxx;base64, 前缀格式,上传后存储到MinIO,数据库仅保存URL |
成功响应示例
失败响应示例 — 参数缺失
失败响应示例 — 未登录
查询参数
| 参数 | 默认值 | 说明 |
|---|---|---|
| pageNo | 1 | 页码 |
| pageSize | 20 | 每页条数 |
响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
| id | Long | 网盘ID |
| name | String | 网盘名称 |
| description | String | 网盘描述 |
| logoUrl | String | 网盘Logo图片链接(MinIO存储地址) |
| folderCount | Integer | 文件夹数量 |
| fileCount | Integer | 文件数量 |
| totalSize | Long | 总大小(字节) |
| status | String | 状态 |
| createTime | String | 创建时间 |
| updateTime | String | 更新时间 |
成功响应示例
失败响应示例 — 未登录
路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
| id | Long | 网盘ID |
响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
| id | Long | 网盘ID |
| name | String | 网盘名称 |
| description | String | 网盘描述 |
| logoUrl | String | 网盘Logo图片链接(MinIO存储地址) |
| folderCount | Integer | 文件夹数量 |
| fileCount | Integer | 文件数量 |
| totalSize | Long | 总大小(字节) |
| status | String | 状态 |
| createTime | String | 创建时间 |
| updateTime | String | 更新时间 |
成功响应示例
失败响应示例 — 网盘不存在
失败响应示例 — 未登录
请求体
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | String | 否 | 网盘名称 |
| description | String | 否 | 网盘描述 |
| logoData | String | 否 | 新的Logo图片Base64编码,传入后覆盖旧Logo;不传则保留原Logo |
成功响应示例
失败响应示例 — 网盘不存在
失败响应示例 — 权限不足
路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
| id | Long | 网盘ID |
成功响应示例
失败响应示例 — 网盘不存在
失败响应示例 — 权限不足
请求体
成功响应示例
失败响应示例 — 参数缺失
失败响应示例 — 网盘不存在
查询参数
| 参数 | 默认值 | 说明 |
|---|---|---|
| parentId | 0 | 父文件夹 ID |
成功响应示例
失败响应示例 — 网盘不存在
失败响应示例 — 未登录
路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
| driveId | Long | 网盘ID |
| folderId | Long | 文件夹ID |
响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
| id | Long | 文件夹ID |
| driveId | Long | 所属网盘ID |
| parentId | Long | 父文件夹ID(0表示根目录) |
| name | String | 文件夹名称 |
| description | String | 文件夹描述 |
| depth | Integer | 层级深度 |
| childFolderCount | Integer | 子文件夹数量 |
| fileCount | Integer | 文件数量 |
| totalSize | Long | 总大小(字节) |
| createTime | String | 创建时间 |
| updateTime | String | 更新时间 |
成功响应示例
失败响应示例 — 文件夹不存在
失败响应示例 — 未登录
路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
| driveId | Long | 网盘ID |
| folderId | Long | 文件夹ID |
请求体(部分更新)
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | String | 否 | 文件夹名称 |
| description | String | 否 | 文件夹描述 |
| parentId | Long | 否 | 父文件夹ID(可移动文件夹) |
成功响应示例
失败响应示例 — 文件夹不存在
失败响应示例 — 权限不足
路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
| driveId | Long | 网盘ID |
| folderId | Long | 文件夹ID |
说明
删除文件夹前会检查文件夹是否为空,如果包含子文件夹或电影文件则拒绝删除。
错误码
| code | 说明 |
|---|---|
| 400 | 文件夹不为空或数据库操作失败 |
| 401 | 未登录或Token无效 |
| 403 | 无权访问该文件夹 |
路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
| driveId | Long | 网盘ID |
请求体
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| title | String | 是 | 文件名(同时作为电影标题,后续通过 TMDB 刮削补充信息) |
| folderId | Long | 否 | 目标文件夹ID,默认0(根目录) |
说明
只记录文件名,不上传文件数据。创建后通过 TMDB 刮削接口补充电影的海报、描述、评分等信息。自动检测 MIME 类型(mp4/mkv/avi → video/mp4)。
成功响应示例
失败响应示例 — 参数缺失
失败响应示例 — 网盘不存在
路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
| driveId | Long | 网盘ID |
| folderId | Long | 文件夹ID(0表示根目录) |
查询参数
| 参数 | 默认值 | 说明 |
|---|---|---|
| pageNo | 1 | 页码 |
| pageSize | 20 | 每页条数(最大100) |
响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
| list[].id | Long | 电影ID |
| list[].title | String | 电影名称 |
| list[].originalName | String | 原始文件名 |
| list[].mimeType | String | MIME类型 |
| list[].fileSize | Long | 文件大小(字节) |
| list[].extension | String | 文件扩展名 |
| list[].minioUrl | String | MinIO文件访问URL |
| list[].rating | Integer | 评分 |
| list[].tags | String | 标签 |
| total | Integer | 总数 |
| pageNo | Integer | 当前页码 |
| pageSize | Integer | 每页条数 |
成功响应示例
失败响应示例 — 网盘不存在
失败响应示例 — 未登录
路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
| driveId | Long | 网盘ID |
| movieId | Long | 电影ID |
响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
| id | Long | 电影ID |
| driveId | Long | 所属网盘ID |
| folderId | Long | 所属文件夹ID |
| title | String | 电影名称 |
| originalName | String | 原始文件名 |
| mimeType | String | MIME类型 |
| fileSize | Long | 文件大小(字节) |
| extension | String | 文件扩展名 |
| description | String | 描述 |
| maintainer | String | 维护者 |
| status | String | 状态 |
| category | String | 分类 |
| scrapeType | String | 刮削类型 |
| rating | Integer | 评分 |
| tags | String | 标签 |
| overview | String | 电影简介(TMDB刮削) |
| casts | String | 主演(逗号分隔,TMDB刮削) |
| directors | String | 导演(逗号分隔,TMDB刮削) |
| minioUrl | String | MinIO文件访问URL |
| posterUrl | String | 海报URL |
| createTime | String | 创建时间 |
| updateTime | String | 更新时间 |
成功响应示例
失败响应示例 — 电影不存在
失败响应示例 — 未登录
路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
| driveId | Long | 网盘ID |
| movieId | Long | 电影ID |
请求体(部分更新,所有字段可选)
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| title | String | 电影名称 |
| originalName | String | 原始文件名(用于 TMDB 刮削有误时修改) |
| description | String | 描述 |
| rating | Integer | 评分 0-100 |
| tags | String | 标签 |
| category | String | 分类 |
说明
用于 TMDB 刮削有误时,用户可自定义修改文件名等信息。所有字段均为可选,只更新传入的字段。
成功响应示例
失败响应示例 — 电影不存在
失败响应示例 — 权限不足
路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
| driveId | Long | 网盘ID |
| movieId | Long | 电影ID |
说明
逻辑删除(软删除),删除后自动更新网盘和文件夹的统计信息。
成功响应示例
失败响应示例 — 电影不存在
失败响应示例 — 权限不足
功能说明
查询当前用户所有网盘下所有文件夹中的电影,按标题(title)分组找出重复的电影。返回每组重复电影的详细信息,包括所在文件夹的完整路径,前端可让用户选择删除其中一个。
成功响应
返回字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| duplicateGroups | Array | 重复电影分组列表 |
| duplicateGroups[].title | String | 重复的电影标题 |
| duplicateGroups[].count | Integer | 该标题下的重复数量 |
| duplicateGroups[].movies | Array | 该标题下的所有电影记录 |
| duplicateGroups[].movies[].id | Long | 电影ID(可用于删除接口) |
| duplicateGroups[].movies[].folderPath | String | 所在文件夹完整路径,如"网盘名/文件夹1/文件夹2" |
| totalGroups | Integer | 重复组总数 |
| totalDuplicates | Integer | 涉及重复的电影总数 |
错误码
| code | 说明 |
|---|---|
| 401 | 未登录或 Token 无效 |
| 500 | 服务器内部错误 |
Icon 管理服务
wangpan-drive-service : 8082请求体(JSON)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | String | 是 | Icon 名称(最大100字符) |
| url | String | 条件必填 | 外网链接 URL(最大500字符,linkType为external或both时必填) |
| internalUrl | String | 条件必填 | 内网链接 URL(最大500字符,linkType为internal或both时必填) |
| linkType | String | 否 | 链接类型:external(仅外网,默认)/ internal(仅内网)/ both(内外网) |
| description | String | 否 | Icon 描述(最大500字符) |
| sortOrder | Integer | 否 | 排序值,数字越小越靠前,默认0 |
请求示例(仅外网)
请求示例(内外网都有)
成功响应(200)
功能说明
查询当前登录用户的所有 Icon,按 sortOrder 升序、createTime 降序排列。每个用户只能看到自己创建的 Icon。
成功响应(200)
路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
| id | Long | Icon ID |
成功响应(200)
失败响应示例 — Icon 不存在
失败响应示例 — 未登录
路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
| id | Long | Icon ID |
请求体(JSON,所有字段可选)
| 字段 | 类型 | 说明 |
|---|---|---|
| name | String | Icon 名称 |
| url | String | 外网链接 |
| internalUrl | String | 内网链接 |
| linkType | String | 链接类型:external / internal / both |
| description | String | Icon 描述 |
| sortOrder | Integer | 排序值 |
请求示例
成功响应(200)
错误码
| code | 说明 |
|---|---|
| 401 | 未登录或 Token 无效 |
| 500 | Icon 不存在或无权修改 |
路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
| id | Long | Icon ID |
成功响应(200)
错误码
| code | 说明 |
|---|---|
| 401 | 未登录或 Token 无效 |
| 500 | Icon 不存在或无权删除 |
功能说明
上传自定义图标图片替换自动抓取的 logo。上传后会自动删除旧的 MinIO 图片,防止硬盘空间浪费。系统每 24 小时自动清理无用图片。
路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
| id | Long | Icon ID |
请求格式
multipart/form-data
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| file | File | 是 | 图片文件(png/jpg/jpeg/gif/webp/ico,最大 1MB) |
请求示例(curl)
成功响应(200)
失败响应示例 — 文件为空
失败响应示例 — 文件格式不支持
失败响应示例 — 文件超过 1MB
失败响应示例 — Icon 不存在
TMDB 刮削服务
wangpan-tmdb-service : 8083功能说明
从当前用户的电影库中随机抽取3部电影用于首页展示。
推荐规则:
- 从 00:00 到 23:59 返回固定的3部电影
- 当天不管查询多少次都返回相同的结果
- 第二天 00:00 后重新随机挑选3部
- 推荐结果缓存在 wp_daily_recommend 表中
成功响应示例
返回字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| list | Array | 推荐的电影列表(最多3部) |
| list[].id | Long | 电影ID |
| list[].title | String | 电影标题 |
| list[].posterUrl | String | 海报URL |
| list[].rating | Integer | 评分(0-100) |
| list[].category | String | 分类 |
| list[].tags | String | 标签 |
| list[].createTime | String | 创建时间 |
| count | Integer | 实际返回的电影数量(可能小于3) |
失败响应示例 — 未登录或 Token 无效
失败响应示例 — 服务器内部错误
功能说明
从 wp_drive_movie 表查询当前用户所有电影,按文件夹分组返回,每个文件夹最多返回 10 条电影数据。支持分页:pageNo 控制文件夹分页。
查询参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| keyword | String | 否 | 搜索关键词 |
| status | String | 否 | 电影状态:active(正常)/ deleted(已删除) |
| scrapeType | String | 否 | 刮削类型:tmdb / manual / none |
| sortBy | String | 否 | 排序字段(如 createTime、rating、title) |
| sortOrder | String | 否 | 排序方向:asc / desc |
| pageNo | int | 否 | 页码,默认 1 |
| pageSize | int | 否 | 每页条数(文件夹数),默认 20 |
响应字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| totalFolders | Integer | 文件夹总数 |
| pageNo | Integer | 当前页码 |
| pageSize | Integer | 每页条数 |
| folderGroups[].folderId | Long | 文件夹ID |
| folderGroups[].movieCount | Integer | 该文件夹下返回的电影数量 |
| folderGroups[].movies[].id | Long | 电影ID |
| folderGroups[].movies[].driveId | Long | 所属网盘ID |
| folderGroups[].movies[].folderId | Long | 所属文件夹ID |
| folderGroups[].movies[].title | String | 电影名称 |
| folderGroups[].movies[].originalName | String | 原始文件名 |
| folderGroups[].movies[].mimeType | String | MIME类型 |
| folderGroups[].movies[].fileSize | Long | 文件大小(字节) |
| folderGroups[].movies[].extension | String | 文件扩展名 |
| folderGroups[].movies[].description | String | 描述 |
| folderGroups[].movies[].scrapeStatus | String | 刮削状态 |
| folderGroups[].movies[].rating | Integer | 评分(0-100) |
| folderGroups[].movies[].tags | String | 标签 |
| folderGroups[].movies[].overview | String | 电影简介(TMDB刮削) |
| folderGroups[].movies[].casts | String | 主演(逗号分隔,TMDB刮削) |
| folderGroups[].movies[].directors | String | 导演(逗号分隔,TMDB刮削) |
| folderGroups[].movies[].posterUrl | String | 竖版海报URL(2:3 比例) |
| folderGroups[].movies[].backdropUrl | String | 横版背景图URL(16:9 比例) |
| folderGroups[].movies[].minioUrl | String | MinIO 文件访问URL |
| folderGroups[].movies[].createTime | String | 创建时间 |
| folderGroups[].movies[].updateTime | String | 更新时间 |
响应示例
失败响应示例 — 未登录或 Token 无效
失败响应示例 — 参数错误
功能说明
查询单部电影的完整详情信息,包括基本信息、海报、评分、简介、导演、主演等。
路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
| id | Long | 电影ID |
响应字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| id | Long | 电影ID |
| driveId | Long | 所属网盘ID |
| folderId | Long | 所属文件夹ID |
| title | String | 电影名称 |
| originalName | String | 原始文件名 |
| mimeType | String | MIME类型 |
| fileSize | Long | 文件大小(字节) |
| extension | String | 文件扩展名 |
| description | String | 电影描述 |
| scrapeStatus | String | 刮削状态:pending/scraping/success/failed |
| rating | Integer | 评分(0-100) |
| overview | String | 电影简介(TMDB刮削) |
| casts | String | 主演(逗号分隔,TMDB刮削) |
| directors | String | 导演(逗号分隔,TMDB刮削) |
| posterUrl | String | 竖版海报URL(2:3 比例) |
| backdropUrl | String | 横版背景图URL(16:9 比例) |
| tags | String | 标签(逗号分隔) |
| createTime | String | 创建时间 |
| updateTime | String | 更新时间 |
成功响应示例
失败响应示例 — 电影不存在
失败响应示例 — 未登录或 Token 无效
功能说明
查询单部电影的刮削状态,返回三种状态:刮削中(scraping)、刮削失败(failed)、刮削成功(success)。
路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
| id | Long | 电影ID |
响应字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| movieId | Long | 电影ID |
| title | String | 电影名称 |
| status | String | 刮削状态:scraping / failed / success / unknown |
| message | String | 状态描述信息 |
| error | String | 失败原因(仅 status=failed 时返回) |
| posterUrl | String | 竖版海报URL(仅 status=success 时返回) |
| backdropUrl | String | 横版背景图URL(仅 status=success 时返回) |
| rating | Integer | 评分(仅 status=success 时返回) |
| category | String | 分类(仅 status=success 时返回) |
| tags | String | 标签(仅 status=success 时返回) |
| overview | String | 电影简介(仅 status=success 时返回) |
| casts | String | 主演(仅 status=success 时返回) |
| directors | String | 导演(仅 status=success 时返回) |
响应示例 - 刮削中
响应示例 - 刮削失败
响应示例 - 刮削成功
失败响应示例 — 未登录或 Token 无效
失败响应示例 — 电影不存在
功能说明
创建新的电影记录,title 为必填字段。
请求体(所有字段可选,title 必填)
成功响应示例
失败响应示例 — 缺少必填字段
失败响应示例 — 未登录或 Token 无效
功能说明
更新指定电影的信息,支持部分更新。
路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
| id | Long | 电影ID |
请求体(部分更新,所有字段可选)
成功响应示例
失败响应示例 — 电影不存在
失败响应示例 — 未登录或 Token 无效
功能说明
删除指定的电影记录。
路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
| id | Long | 电影ID |
成功响应示例
失败响应示例 — 电影不存在
失败响应示例 — 未登录或 Token 无效
功能说明
批量删除多个电影记录。
请求体
成功响应示例
失败响应示例 — 参数错误
失败响应示例 — 未登录或 Token 无效
功能说明
获取当前用户的电影数量统计,按刮削类型和分类分组。
响应示例
失败响应示例 — 未登录或 Token 无效
功能说明
获取当前用户配置的 TMDB API Key。
成功响应示例
失败响应示例 — 未登录或 Token 无效
请求体
功能说明
手动触发单部电影刮削,自动匹配TMDB最佳结果。刮削完成后会更新电影的简介、导演、主演、海报等信息。注意:两次请求需间隔5秒,防止频繁点击。
请求方式
支持两种方式传递 movieId:
1. URL 查询参数:?movieId=1
2. 请求体 JSON:
响应字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| movieId | Long | 电影ID |
| userId | Long | 用户ID |
| tmdbId | Long | TMDB电影ID |
| title | String | 电影标题(来自TMDB) |
| originalTitle | String | 原始标题(外文) |
| overview | String | 电影简介 |
| releaseDate | String | 上映日期 |
| posterPath | String | TMDB海报路径 |
| backdropPath | String | TMDB背景图路径 |
| localPosterUrl | String | 本地竖版海报URL(MinIO) |
| localBackdropUrl | String | 本地横版背景图URL(MinIO) |
| tmdbRating | Integer | TMDB评分(0-100分制) |
| voteCount | Integer | 投票数 |
| runtime | Integer | 片长(分钟) |
| genres | String | 类型(逗号分隔) |
| directors | String | 导演(逗号分隔,最多2位) |
| casts | String | 主演(逗号分隔,最多5位) |
| originalLanguage | String | 原始语言 |
| productionCountries | String | 制片国家(逗号分隔) |
| cacheTime | String | 缓存时间 |
| status | String | 缓存状态 |
成功响应示例
失败响应示例 — 操作过于频繁
失败响应示例 — 未找到匹配结果
失败响应示例 — 未登录或 Token 无效
功能说明
根据电影ID自动获取标题,搜索TMDB返回所有匹配结果。如果查询出多条结果,前端应展示列表让用户选择。
查询参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| movieId | Long | 是 | 电影ID(自动获取标题搜索) |
| keyword | String | 否 | 自定义搜索关键词(不传则使用电影标题) |
响应字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| movieId | Long | 电影ID |
| keyword | String | 搜索关键词 |
| total | Integer | 搜索结果总数 |
| list[].tmdbId | Long | TMDB电影ID(用于确认刮削) |
| list[].title | String | 电影标题 |
| list[].originalTitle | String | 原始标题 |
| list[].releaseDate | String | 上映日期 |
| list[].overview | String | 电影简介 |
| list[].posterPath | String | 海报图片URL |
| list[].voteAverage | Double | 评分 |
响应示例
功能说明
用户从搜索结果中选择一部电影后,调用此接口执行刮削。刮削完成后会更新电影的简介、导演、主演、海报等信息。注意:两次请求需间隔5秒,防止频繁点击。
请求体
响应字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| movieId | Long | 电影ID |
| userId | Long | 用户ID |
| tmdbId | Long | TMDB电影ID |
| title | String | 电影标题(来自TMDB) |
| originalTitle | String | 原始标题(外文) |
| overview | String | 电影简介 |
| releaseDate | String | 上映日期 |
| posterPath | String | TMDB海报路径 |
| backdropPath | String | TMDB背景图路径 |
| localPosterUrl | String | 本地竖版海报URL(MinIO) |
| localBackdropUrl | String | 本地横版背景图URL(MinIO) |
| tmdbRating | Integer | TMDB评分(0-100分制) |
| voteCount | Integer | 投票数 |
| runtime | Integer | 片长(分钟) |
| genres | String | 类型(逗号分隔) |
| directors | String | 导演(逗号分隔,最多2位) |
| casts | String | 主演(逗号分隔,最多5位) |
| originalLanguage | String | 原始语言 |
| productionCountries | String | 制片国家(逗号分隔) |
| cacheTime | String | 缓存时间 |
| status | String | 缓存状态 |
成功响应示例
失败响应示例 — 操作过于频繁
失败响应示例 — 电影不存在
失败响应示例 — 未登录或 Token 无效
请求体(movieIds 可选)
响应示例
查询参数
| 参数 | 默认值 | 说明 |
|---|---|---|
| pageNo | 1 | 页码 |
| pageSize | 20 | 每页条数 |
响应示例
功能说明
手动触发 TMDB 定时扫描任务,查找需要刮削的电影并执行刮削。无需请求体。
响应示例
查询参数
| 参数 | 默认值 | 说明 |
|---|---|---|
| pageNo | 1 | 页码 |
| pageSize | 20 | 每页条数 |
响应示例
路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
| movieId | Long | 电影ID |
功能说明
删除指定电影的 TMDB 刮削缓存,下次刮削时将重新从 TMDB 获取数据。
响应示例
通用响应格式
状态码说明
| 状态码 | 说明 |
|---|---|
| 200 | 请求成功 |
| 400 | 请求参数错误 |
| 401 | 未授权 / 令牌无效 |
| 403 | 权限不足 |
| 404 | 资源不存在 |
| 500 | 服务器内部错误 |
认证说明
除以下 3 个接口 外,所有接口都需要在请求头中携带访问令牌:
无需 Token 的接口:
POST /api/login 用户登录
POST /api/register 用户注册
GET /api/token/validate?token=xxx 令牌验证(token 通过 URL 参数传递)
需要 Token 的接口(带 需Token 标识):
在请求头中添加:Authorization: Bearer <token>