118 lines
2.3 KiB
TypeScript
118 lines
2.3 KiB
TypeScript
export type Term = '春' | '暑' | '秋' | '寒'
|
|
|
|
export interface StudentProfile {
|
|
id: string
|
|
name: string
|
|
grade: string
|
|
subject: string
|
|
academicYear: number
|
|
term: Term
|
|
guardianTitle: string
|
|
startTime: string
|
|
endTime: string
|
|
createdAt: number
|
|
updatedAt: number
|
|
}
|
|
|
|
export interface StudentProfileDefaults {
|
|
grade: string
|
|
subject: string
|
|
lessonDurationMinutes: number
|
|
}
|
|
|
|
export interface StudentDraft {
|
|
name: string
|
|
grade: string
|
|
subject: string
|
|
academicYear: number
|
|
term: Term
|
|
guardianTitle: string
|
|
startTime: string
|
|
endTime: string
|
|
}
|
|
|
|
export interface FeedbackRecord {
|
|
id: string
|
|
profileId: string | null
|
|
feedbackDate: string
|
|
content: string
|
|
createdAt: number
|
|
updatedAt: number
|
|
}
|
|
|
|
export interface FeedbackDraft {
|
|
profileId: string | null
|
|
feedbackDate: string
|
|
content: string
|
|
feedbackSessionId?: string | null
|
|
}
|
|
|
|
export interface HealthStatus {
|
|
status: string
|
|
databaseConfigured: boolean
|
|
speechConfigured: boolean
|
|
speechAvailable: boolean
|
|
speechProvider: string | null
|
|
summaryConfigured: boolean
|
|
wechatAuthConfigured: boolean
|
|
developmentAuthEnabled: boolean
|
|
}
|
|
|
|
export type VoiceProcessingStatus = 'recording' | 'processing' | 'ready' | 'failed'
|
|
|
|
export interface VoiceAudioSegment {
|
|
id: string
|
|
sequence: number
|
|
durationMs: number
|
|
status: 'processing' | 'ready' | 'failed'
|
|
errorMessage: string | null
|
|
}
|
|
|
|
export interface VoiceLesson {
|
|
id: string
|
|
sequence: number
|
|
status: VoiceProcessingStatus
|
|
durationMs: number
|
|
appliedDirectly: boolean
|
|
includedInGeneration: boolean
|
|
segments: VoiceAudioSegment[]
|
|
startedAt: number
|
|
endedAt: number | null
|
|
}
|
|
|
|
export interface FeedbackSession {
|
|
id: string
|
|
profileId: string | null
|
|
feedbackDate: string
|
|
content: string
|
|
status: 'active' | 'finalized'
|
|
lessonCount: number
|
|
totalDurationMs: number
|
|
processingSegmentCount: number
|
|
failedSegmentCount: number
|
|
needsGeneration: boolean
|
|
lessons: VoiceLesson[]
|
|
createdAt: number
|
|
updatedAt: number
|
|
}
|
|
|
|
export interface VoiceLessonCreated {
|
|
id: string
|
|
sequence: number
|
|
status: VoiceProcessingStatus
|
|
startedAt: number
|
|
}
|
|
|
|
export interface VoiceLessonFinished {
|
|
id: string
|
|
status: VoiceProcessingStatus
|
|
durationMs: number
|
|
transcript: string
|
|
canApplyDirectly: boolean
|
|
}
|
|
|
|
export interface GeneratedFeedback {
|
|
content: string
|
|
method: 'llm' | 'extractive'
|
|
}
|