Add Phase 7: grade history and session-plan item linking
- New tables: lesson_plan_item_grade_history (append-only), lesson_session_plan_item - Grading an item updates current_grade_value and creates immutable history record - Grading a not_started item auto-transitions it to in_progress - Linking items to a session also auto-transitions not_started items - Link operation is idempotent — re-linking same items produces no duplicates - Endpoints: POST/GET /lesson-plan-items/:id/grades, GET /lesson-plan-items/:id/grade-history - Endpoints: POST/GET /lesson-sessions/:id/plan-items - 8 new integration tests
This commit is contained in:
@@ -218,6 +218,30 @@ export const lessonPlanItems = pgTable('lesson_plan_item', {
|
||||
updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),
|
||||
})
|
||||
|
||||
export const lessonPlanItemGradeHistory = pgTable('lesson_plan_item_grade_history', {
|
||||
id: uuid('id').primaryKey().defaultRandom(),
|
||||
lessonPlanItemId: uuid('lesson_plan_item_id')
|
||||
.notNull()
|
||||
.references(() => lessonPlanItems.id),
|
||||
gradingScaleId: uuid('grading_scale_id').references(() => gradingScales.id),
|
||||
gradeValue: varchar('grade_value', { length: 50 }).notNull(),
|
||||
gradedBy: uuid('graded_by').references(() => users.id),
|
||||
sessionId: uuid('session_id').references(() => lessonSessions.id),
|
||||
notes: text('notes'),
|
||||
createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
|
||||
})
|
||||
|
||||
export const lessonSessionPlanItems = pgTable('lesson_session_plan_item', {
|
||||
id: uuid('id').primaryKey().defaultRandom(),
|
||||
sessionId: uuid('session_id')
|
||||
.notNull()
|
||||
.references(() => lessonSessions.id),
|
||||
lessonPlanItemId: uuid('lesson_plan_item_id')
|
||||
.notNull()
|
||||
.references(() => lessonPlanItems.id),
|
||||
createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
|
||||
})
|
||||
|
||||
// --- Type exports ---
|
||||
|
||||
export type Instructor = typeof instructors.$inferSelect
|
||||
@@ -244,3 +268,7 @@ export type LessonPlanSection = typeof lessonPlanSections.$inferSelect
|
||||
export type LessonPlanSectionInsert = typeof lessonPlanSections.$inferInsert
|
||||
export type LessonPlanItem = typeof lessonPlanItems.$inferSelect
|
||||
export type LessonPlanItemInsert = typeof lessonPlanItems.$inferInsert
|
||||
export type LessonPlanItemGradeHistory = typeof lessonPlanItemGradeHistory.$inferSelect
|
||||
export type LessonPlanItemGradeHistoryInsert = typeof lessonPlanItemGradeHistory.$inferInsert
|
||||
export type LessonSessionPlanItem = typeof lessonSessionPlanItems.$inferSelect
|
||||
export type LessonSessionPlanItemInsert = typeof lessonSessionPlanItems.$inferInsert
|
||||
|
||||
Reference in New Issue
Block a user