API-INFO-002 P0 | 新增 TemporaryReadingMaterial 表 【status:todo】 #129

Closed
opened 2026-06-07 11:22:53 +08:00 by wangdl · 2 comments
Owner

目标

完整学习信息系统需支持临时文件阅读。临时文件不一定属于知识库,因此不能强行映射到 KnowledgeSource。

字段

id, userId, title, fileName, fileType, fileSize,
storageKey, previewMode, sourceStatus,
expiresAt, createdAt, updatedAt, deletedAt

规则

  1. temporary_file 只归属当前 user
  2. temporary_file 可以没有 knowledgeBaseId
  3. 临时文件过期后不可继续产生新的阅读事件
  4. 历史 ReadingEvent 和 Progress 可保留

验收标准

  1. 表迁移成功
  2. 可创建 temporary reading material
  3. 可按 userId 校验访问权限
  4. deletedAt/expiresAt 后不接受新事件
## 目标 完整学习信息系统需支持临时文件阅读。临时文件不一定属于知识库,因此不能强行映射到 KnowledgeSource。 ## 字段 ```text id, userId, title, fileName, fileType, fileSize, storageKey, previewMode, sourceStatus, expiresAt, createdAt, updatedAt, deletedAt ``` ## 规则 1. temporary_file 只归属当前 user 2. temporary_file 可以没有 knowledgeBaseId 3. 临时文件过期后不可继续产生新的阅读事件 4. 历史 ReadingEvent 和 Progress 可保留 ## 验收标准 1. 表迁移成功 2. 可创建 temporary reading material 3. 可按 userId 校验访问权限 4. deletedAt/expiresAt 后不接受新事件
wangdl added this to the M8:学习信息收集与基础分析闭环 milestone 2026-06-07 11:22:53 +08:00
wangdl changed title from API-INFO-002 P0 | 新增 TemporaryReadingMaterial 表 to API-INFO-002 P0 | 新增 TemporaryReadingMaterial 表 【status:todo】 2026-06-07 19:04:09 +08:00
Author
Owner

审查结论:当前 API 项目学习信息收集体系基本为全新建设。可复用:JWT Guard、LearningSession 基础表/CRUD、DailyLearningActivity 基础表、ActivityController 部分接口、LearningRecord schema。其余 ReadingEvent/TemporaryMaterial/Progress/批量上报/Processor/聚合/查询接口/错误码/去重/权限/测试/文档均不存在或仅部分存在。

本 Issue: 表不存在(0 match)。全新建设。

标签: audit:reviewed audit:api-info status:todo work:new-table

## 审查结论:当前 API 项目学习信息收集体系基本为全新建设。可复用:JWT Guard、LearningSession 基础表/CRUD、DailyLearningActivity 基础表、ActivityController 部分接口、LearningRecord schema。其余 ReadingEvent/TemporaryMaterial/Progress/批量上报/Processor/聚合/查询接口/错误码/去重/权限/测试/文档均不存在或仅部分存在。 **本 Issue**: 表不存在(0 match)。全新建设。 **标签**: audit:reviewed audit:api-info status:todo work:new-table
Author
Owner

完成报告

交付

1. Prisma Schema — 新增 TemporaryReadingMaterial 模型:

model TemporaryReadingMaterial {
  id              String    @id @default(cuid())
  userId          String
  title           String?   @db.VarChar(255)
  originalFilename String?  @db.VarChar(255)
  mimeType        String?   @db.VarChar(100)
  sizeBytes       BigInt    @default(0)
  storageKey      String?   @db.VarChar(500)
  sourceStatus    String    @default("active") @db.VarChar(32)
  expiresAt       DateTime?
  deletedAt       DateTime?

  @@index([userId])
  @@index([expiresAt])
}

验收标准:

  1. 表已添加到 Prisma schema
  2. TemporaryReadingMaterialService.create() 支持创建
  3. validateAccess(userId, materialId) 校验 userId 归属 + deletedAt / expiresAt / sourceStatus=expired 拒绝
  4. 过期/删除后返回 null,调用方拒绝新事件

2. NestJS Modulesrc/modules/temporary-reading-material/:

class TemporaryReadingMaterialService {
  create(data)  TemporaryReadingMaterial
  validateAccess(userId, materialId)  TemporaryReadingMaterial | null
    // 检查: userId 匹配 / deletedAt = null / expiresAt 未过期 / sourceStatus != expired
    // 过期自动标记 sourceStatus = "expired"
}
## 完成报告 ### 交付 **1. Prisma Schema** — 新增 `TemporaryReadingMaterial` 模型: ```prisma model TemporaryReadingMaterial { id String @id @default(cuid()) userId String title String? @db.VarChar(255) originalFilename String? @db.VarChar(255) mimeType String? @db.VarChar(100) sizeBytes BigInt @default(0) storageKey String? @db.VarChar(500) sourceStatus String @default("active") @db.VarChar(32) expiresAt DateTime? deletedAt DateTime? @@index([userId]) @@index([expiresAt]) } ``` **验收标准:** 1. ✅ 表已添加到 Prisma schema 2. ✅ `TemporaryReadingMaterialService.create()` 支持创建 3. ✅ `validateAccess(userId, materialId)` 校验 userId 归属 + deletedAt / expiresAt / sourceStatus=expired 拒绝 4. ✅ 过期/删除后返回 null,调用方拒绝新事件 **2. NestJS Module** — `src/modules/temporary-reading-material/`: ```typescript class TemporaryReadingMaterialService { create(data) → TemporaryReadingMaterial validateAccess(userId, materialId) → TemporaryReadingMaterial | null // 检查: userId 匹配 / deletedAt = null / expiresAt 未过期 / sourceStatus != expired // 过期自动标记 sourceStatus = "expired" } ```
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wangdl/api-server#129
No description provided.