Round 22: Exam Calendar, Tablet Grading, Student Achievements, Notification Center, Announcements, Styling

- Exam Calendar View: Teacher exam planning with calendar integration
  - Teachers create/modify exams, admin full CRUD, students read-only
  - CalendarEvent integration, 2-week warning, AI test availability badge
  - Monthly/weekly calendar view, list view, statistics

- Tablet Grading View: Stylus annotation and AI grading audit
  - HTML5 Canvas with PointerEvent pressure sensitivity
  - Tool palette: pen, highlighter, eraser, text, stamp
  - Quick grade buttons (German 1-6 scale)
  - AI grading audit with detailed feedback and suggestions

- Student Achievements View: Badges, XP, leaderboard
  - Badge collection grid with category filters
  - Level/XP system with progress bars
  - Leaderboard with opt-in
  - Daily/weekly challenges

- Student Study Planner View: Pomodoro timer, weekly schedule
  - Pomodoro timer with focus score
  - Weekly study schedule with drag-and-drop
  - AI study recommendations
  - Session history and statistics

- Notification Center View: Categories, filters, bulk actions
  - 6 categories, 4 priority levels
  - Real-time polling (10 seconds)
  - Preferences with quiet hours
  - Statistics charts

- School Announcements View: CRUD, read receipts
  - 6 announcement types with gradient headers
  - Pin-to-top, read receipts, target audience
  - Admin/teacher create, students/parents view

- Bug fixes: AnnouncementRead model user relation, User API schoolId field
- i18n: 200+ new keys, breadcrumb navigation fixes
- Styling: Gradient headers, animations, hover effects across all new views
This commit is contained in:
Mustafa Cetin committed 2026-07-29 22:56:40 +00:00
1 parent 9e22214470
commit 490bd0650f
30 files changed
+10844 -31

No files matched your search

+37
View File
@@ -2702,6 +2702,43 @@ export function deleteNotifications(ids?: string[]): Promise<{ success: boolean
return apiDelete<{ success: boolean }>(`/api/notifications${ids ? `?ids=${ids.join(',')}` : ''}`);
}
/* ── Notification Preferences ──────────────────────────────────── */
export interface NotificationPreferencesData {
id: string;
userId: string;
schoolId: string;
academicEnabled: boolean;
behavioralEnabled: boolean;
administrativeEnabled: boolean;
calendarEnabled: boolean;
communicationEnabled: boolean;
systemEnabled: boolean;
quietHoursStart: string | null;
quietHoursEnd: string | null;
quietHoursEnabled: boolean;
emailDigestEnabled: boolean;
emailDigestFrequency: string;
}
export function fetchNotificationPreferences(): Promise<NotificationPreferencesData> {
return apiGet<NotificationPreferencesData>('/api/notifications/preferences');
}
export function updateNotificationPreferences(data: Partial<NotificationPreferencesData>): Promise<NotificationPreferencesData> {
return apiPut<NotificationPreferencesData>('/api/notifications/preferences', data);
}
/* ── Announcement Read Receipts ────────────────────────────────── */
export function markAnnouncementRead(announcementId: string): Promise<{ readReceipt: { id: string; announcementId: string; userId: string; readAt: string } }> {
return apiPost('/api/announcements/' + announcementId + '/read', {});
}
export function getAnnouncementReads(announcementId: string): Promise<{ reads: Array<{ id: string; userId: string; readAt: string; user: { id: string; firstName: string; lastName: string } }>; totalReads: number }> {
return apiGet('/api/announcements/' + announcementId + '/read');
}
/* ── Batch Delete & Reorder ─────────────────────────────────────────── */
export async function deleteBatchProgressEntries(ids: string[]): Promise<void> {