Files
suixinkan_ios_new/suixinkan/Features/Assets/Assets.md
汉秋 cac22fcc56 新增资产模块,包含云存储与媒体库流程
为云端与素材管理页面接入首页路由,将共享云存储模型迁入 Assets 模块,并补充 API/ViewModel 测试。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-23 16:10:20 +08:00

2.4 KiB

Assets 模块业务逻辑

模块职责

Assets 模块负责首页中的相册云盘和素材管理入口。

  • cloud_management 进入 CloudStorageView
  • cloud_storage_transit 进入 CloudStorageTransitView
  • asset_management 进入 MediaLibraryView(kind: .material)
  • material_upload 进入 MediaLibraryUploadView

album_listalbum_trailersample_managementsample_upload 本轮仍保持占位,后续按相册管理、相册预览上传、样片管理独立迁移。

云盘逻辑

CloudStorageViewModel 只保存云盘模块内状态,包括目录路径、文件列表、筛选、排序、分页和当前操作状态。

云盘上传流程:

  1. 页面通过 PhotosPicker 选择图片或视频。
  2. CloudStorageViewModel 调用 checkCloudUploadPermission
  3. 权限通过后调用 OSSUploadService.uploadCloudFile 上传到 OSS。
  4. 上传成功后调用 cloudFileUpload 把文件 URL 写入云盘。
  5. 刷新当前目录列表。

下载文件只保存到 App 沙盒 Documents/CloudDownloads,不自动写入系统相册。上传/下载记录由 CloudTransferStore 保存,生命周期仅限本次 App 会话,不落盘。

素材管理逻辑

MediaLibraryViewModel 管理素材列表、关键词、审核状态、分页、详情、删除和上下架。

素材上下架规则:

  • 审核通过的素材可以上下架。
  • 审核未通过或待审核素材禁止上下架。
  • 操作成功后刷新素材列表。

MediaLibraryEditorViewModel 管理上传和编辑表单。提交前会校验素材名称、当前景区、打卡点、封面、媒体文件和标签长度。

素材上传流程:

  1. 页面通过 PhotosPicker 选择封面和媒体文件。
  2. 打卡点来源于 ScenicSpotContext.spots
  3. 提交时先把封面和媒体文件上传 OSS。
  4. 再把最终 OSS URL、文件尺寸、文件大小、打卡点 ID 和标签提交给素材接口。
  5. 上传失败时不提交素材接口。

缓存边界

云盘文件列表、素材列表、上传进度、下载记录、OSS STS、本地文件数据和素材表单都不进入 AppSessionAccountContext 或 TabBar 状态。

图片缓存继续交给 Kingfisher 的 RemoteImage。业务模块不自行缓存远程图片文件或 Data

测试要求

新增云盘或素材逻辑时,需要同步补充 API、ViewModel 和路由测试。测试不通过时先修复问题,再继续迁移后续功能。