| |
| |
| |
|
|
| |
| export interface Session { |
| id: string; |
| name: string; |
| teacherId: string; |
| teacherName: string; |
| createdAt: string; |
| isActive: boolean; |
| currentSlide: number; |
| totalSlides: number; |
| slideUrls: string[]; |
| whiteboardData: WhiteboardStroke[]; |
| studentCount: number; |
| maxStudents: number; |
| } |
|
|
| |
| export interface User { |
| id: string; |
| name: string; |
| role: 'teacher' | 'student'; |
| sessionId?: string; |
| joinedAt: string; |
| } |
|
|
| |
| export interface ChatMessage { |
| id: string; |
| sessionId: string; |
| userId: string; |
| userName: string; |
| message: string; |
| isTeacher: boolean; |
| timestamp: string; |
| } |
|
|
| |
| export interface Poll { |
| id: string; |
| sessionId: string; |
| question: string; |
| options: PollOption[]; |
| correctAnswer?: string; |
| duration: number; |
| createdAt: string; |
| endsAt: string; |
| isActive: boolean; |
| results: Record<string, number>; |
| totalVotes: number; |
| votedStudents: string[]; |
| } |
|
|
| export interface PollOption { |
| id: string; |
| text: string; |
| isCorrect?: boolean; |
| } |
|
|
| |
| export interface Doubt { |
| id: string; |
| sessionId: string; |
| studentId: string; |
| studentName: string; |
| question: string; |
| image?: string; |
| slideNumber: number; |
| status: 'pending' | 'in_progress' | 'solved'; |
| createdAt: string; |
| solvedAt?: string; |
| annotatedImage?: string; |
| teacherResponse?: string; |
| } |
|
|
| |
| export interface Reaction { |
| sessionId: string; |
| emoji: string; |
| count: number; |
| lastUpdated: string; |
| } |
|
|
| export type ReactionType = 'π' | 'β€οΈ' | 'π' | 'π' | 'π' | 'π' | 'π₯'; |
|
|
| |
| export interface WhiteboardStroke { |
| id: string; |
| tool: 'pen' | 'eraser' | 'highlighter' | 'text' | 'arrow' | 'circle' | 'rectangle'; |
| color: string; |
| lineWidth: number; |
| points: Point[]; |
| text?: string; |
| slideNumber: number; |
| timestamp: string; |
| } |
|
|
| export interface Point { |
| x: number; |
| y: number; |
| } |
|
|
| |
| export interface Slide { |
| id: string; |
| sessionId: string; |
| slideNumber: number; |
| imageUrl: string; |
| annotations: WhiteboardStroke[]; |
| createdAt: string; |
| } |
|
|
| |
| export type SSEEventType = |
| | 'connected' |
| | 'slide_change' |
| | 'whiteboard_draw' |
| | 'whiteboard_clear' |
| | 'new_poll' |
| | 'poll_update' |
| | 'poll_ended' |
| | 'chat_message' |
| | 'reaction' |
| | 'new_doubt' |
| | 'doubt_update' |
| | 'doubt_solved' |
| | 'student_joined' |
| | 'student_left' |
| | 'session_ended' |
| | 'presence_update'; |
|
|
| export interface SSEEvent { |
| id: string; |
| event: SSEEventType; |
| data: any; |
| timestamp: string; |
| } |
|
|
| |
| export interface StorageFile { |
| path: string; |
| url: string; |
| size: number; |
| contentType: string; |
| uploadedAt: string; |
| } |
|
|
| export interface SessionStorage { |
| sessionId: string; |
| slides: StorageFile[]; |
| whiteboardSnapshots: StorageFile[]; |
| doubts: StorageFile[]; |
| chatHistory: ChatMessage[]; |
| pollHistory: Poll[]; |
| } |
|
|
| |
| export interface ApiResponse<T = any> { |
| success: boolean; |
| data?: T; |
| error?: string; |
| message?: string; |
| } |
|
|
| |
| export interface PresenceUser { |
| id: string; |
| name: string; |
| role: 'teacher' | 'student'; |
| lastSeen: string; |
| isOnline: boolean; |
| } |
|
|
| export interface PresenceUpdate { |
| sessionId: string; |
| onlineCount: number; |
| users: PresenceUser[]; |
| } |
|
|