Viewing All Classes
The main admin dashboard displays all virtual classes in the system.Class Data Structure
Each virtual class contains:Unique MongoDB ObjectId for the class
Google Calendar event ID for synchronization
User ID of the class host/organizer
8-character random code for class access
Class start date and time
Class end date and time
Either
individual or grupal (group class)Maximum number of students allowed
Current number of enrolled students
Class status:
scheduled, pending, completed, or cancelledActivity assignment status:
uploaded or pendingGoogle Meet link for the virtual class
prisma/schema.prisma:130-153
Filtering Classes
Administrators can filter classes by status:Filter Options
-
Scheduled Classes (
?status=scheduled)- Shows upcoming and active classes
- Classes with status “scheduled”
-
Completed Classes (
?status=completed)- Historical classes that have finished
- Useful for analytics and reporting
-
All Classes (default)
- Displays every class regardless of status
- Sorted by start time (descending)
Implementation
Server Action:src/app/(dashboard)/admin/actions.ts:6-20
The
getAllClasses function uses React’s cache() to optimize performance. Results are cached and don’t change with URL parameters.Creating Activities
Administrators can create AI-powered learning activities for any scheduled class.Activity Assignment Workflow
- Navigate to
/admin/actividad/[classId] - Fill out the activity creation form
- Submit to generate and assign the activity
- Students receive access to the activity after class completion
Activity Form Fields
Virtual class ID (auto-populated, read-only)
Title of the exam or activity
Detailed description and instructions for the activity
Difficulty level:
easy (inicial), medium (intermedio), or hard (avanzado)Activity type:
exam- Written examinationaudio- Listening comprehensionvideo- Video-based activityreading- Reading comprehension
Activity content in Markdown format (unsolved version)
Answer key/solved version in Markdown format
src/app/(dashboard)/admin/actividad/[classId]/page.tsx:44-150
Activity Upload Process
When an activity is uploaded:Step 1: Create Task
Task record is created with the activity content.
Step 2: Update UserActivity
All participants in the class receive the activity:Step 3: Mark Activity as Uploaded
Step 4: Increment Class Counter
Student total class count is incremented:src/app/(dashboard)/admin/actividad/[classId]/actions.ts:20-117
Class Participants
Adding Participants
Users can join classes using an access code. The system handles:- Duplicate Prevention: Checks if user is already enrolled
- Capacity Management: Enforces
maxParticipantslimit - Role Assignment: Distinguishes between host (
anfitrion) and participants (participante)
src/services/functions/index.ts:280-335
Participant Tracking
TheparticipantsIds array stores all enrolled user IDs:
Class Status Management
Status Workflow
- pending - Initial state after booking
- scheduled - After payment approval and calendar event creation
- completed - Class has finished
- cancelled - Class was cancelled
prisma/schema.prisma:35-40
Access Codes
Each class receives a unique 8-character access code:src/services/functions/index.ts:187
Google Meet Integration
Classes are automatically connected to Google Meet:- Meet links are stored in
htmlLinkfield - Links are generated when calendar events are created
- Synchronized with Google Calendar via admin’s refresh token
Related Features
User Activity Tracking
Monitor student progress through the
UserActivity modelPayment Integration
Classes are created after successful payment