slidemap3 / src /lib /types.ts
Nanny7's picture
Initial commit: Education platform for HuggingFace Spaces
c5dfbfe
Raw
History Blame Contribute Delete
3.82 kB
// ═══════════════════════════════════════════════════════════════════════════
// TYPES - Education Platform for HuggingFace Spaces
// ═══════════════════════════════════════════════════════════════════════════
// Session Types
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;
}
// User Types
export interface User {
id: string;
name: string;
role: 'teacher' | 'student';
sessionId?: string;
joinedAt: string;
}
// Chat Types
export interface ChatMessage {
id: string;
sessionId: string;
userId: string;
userName: string;
message: string;
isTeacher: boolean;
timestamp: string;
}
// Poll Types
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;
}
// Doubt Types
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;
}
// Reaction Types
export interface Reaction {
sessionId: string;
emoji: string;
count: number;
lastUpdated: string;
}
export type ReactionType = 'πŸ‘' | '❀️' | 'πŸŽ‰' | 'πŸ˜•' | 'πŸš€' | 'πŸ‘' | 'πŸ”₯';
// Whiteboard Types
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;
}
// Slide Types
export interface Slide {
id: string;
sessionId: string;
slideNumber: number;
imageUrl: string;
annotations: WhiteboardStroke[];
createdAt: string;
}
// SSE Event Types
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;
}
// Storage Types (HuggingFace CDN)
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[];
}
// API Request/Response Types
export interface ApiResponse<T = any> {
success: boolean;
data?: T;
error?: string;
message?: string;
}
// Presence Types
export interface PresenceUser {
id: string;
name: string;
role: 'teacher' | 'student';
lastSeen: string;
isOnline: boolean;
}
export interface PresenceUpdate {
sessionId: string;
onlineCount: number;
users: PresenceUser[];
}