Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/Renzo717/Aula-Virtual-Universidad-Radiolocucion/llms.txt

Use this file to discover all available pages before exploring further.

Every subject (materia) in NuestraVoz — Campus Virtual has a dedicated virtual classroom — a self-contained space where teachers post announcements, share downloadable files, and configure one-click quick-access links to external tools such as Zoom or course syllabi. Students only ever see the classrooms of subjects they are actively enrolled in.

What is a Virtual Classroom?

A virtual classroom (aula) is the per-subject hub inside NuestraVoz. It is identified by a materiaId and groups all content related to a single subject:

Planificación

Announcements (anuncios) from the teacher or admin, displayed in reverse chronological order alongside the quick-access panel.

Actividades

Assigned activities and their submission status (see Activities & Submissions).

Recursos

Downloadable files uploaded by the teacher — lecture slides, PDFs, audio, and more.

Accesos Rápidos

Customizable icon-buttons that open external URLs in a new tab, e.g. the Zoom meeting room or the course programme.

Announcements (Anuncios)

Announcements are brief notices posted by an admin or docente inside a classroom. Each announcement has a tipo that controls how it is displayed.

info

Standard informational notice — used for regular updates, reminders, and news.

warning

High-visibility notice — rendered with a warning style to draw student attention to deadlines or policy changes.

Creating an Announcement

Only users with the admin or docente role may post announcements.
POST /api/aula/:materiaId/anuncios

{
  "titulo": "Parcial reprogramado",
  "contenido": "El parcial del jueves pasa al lunes 17 a las 18:00 hs.",
  "tipo": "warning"
}
titulo
string
required
Short headline for the announcement. Minimum 2 characters.
contenido
string
required
Body text of the announcement. Minimum 2 characters.
tipo
string
default:"info"
Display style. Accepted values: info or warning.
All announcements are returned ordered by created_at descending, so the most recent announcement always appears first.

Resources (Recursos)

Resources are individual files attached to a classroom. They are uploaded by a docente or admin and made available for any enrolled student to download.

Supported File Types

The backend infers the resource type automatically from the file’s MIME type:
MIME prefix / keywordtipo value
image/*imagen
video/*video
audio/*audio
application/pdf, Word, spreadsheet, presentationdocumento / hoja / presentacion
Anything elsedocumento

Upload Limits

Each file must be 20 MB or smaller. The upload endpoint (POST /api/aula/:materiaId/recursos) accepts a single file per request using multipart/form-data. Files are stored in Supabase Storage under the recursos bucket at the path materias/:materiaId/:timestamp_filename.

Upload Payload

curl -X POST /api/aula/:materiaId/recursos \
  -F "archivo=@slides.pdf" \
  -F "nombre=Clase 3 — Introducción a la producción radiofónica" \
  -F "descripcion=Diapositivas de la tercera clase"
nombre
string
required
Display name shown to students. Maximum 150 characters.
descripcion
string
Optional description. Maximum 2 000 characters.
Quick-access links are icon-buttons rendered in the classroom sidebar that open a URL in a new tab. Teachers can add, edit, reorder, and delete them at any time.

Available Icons

Each acceso rápido requires an icono value chosen from the ACCESO_RAPIDO_ICONOS constant defined in @nuestravoz/shared:
Icon nameTypical use
linkGeneric external link
video_camera_frontLive class / Zoom
menu_bookCourse programme or textbook
groupsStudy group or forum
languageExternal website
descriptionDocument or handout
quizQuiz or self-assessment tool
calendar_monthAcademic calendar
folderFile repository
emailContact or mailing list
schoolInstitutional resource
cloud_downloadDownloadable file
visibilityPreview / view resource
open_in_newOpen in new tab
POST /api/aula/:materiaId/accesos

{
  "nombre": "Sala Zoom",
  "icono": "video_camera_front",
  "url": "https://zoom.us/j/123456789"
}
nombre
string
required
Button label shown to students. Minimum 2 characters.
icono
string
required
Material Symbols icon name. Must be one of the ACCESO_RAPIDO_ICONOS values listed above.
url
string
required
Fully-qualified URL. Must pass URL validation.
Links are returned ordered by orden ascending, then by created_at ascending. The PUT /api/aula/:materiaId/accesos/:accesoId endpoint accepts the same fields (all optional) to update an existing link.

Access Model

The API enforces role-based scoping so each user only sees what they are entitled to:
1

Admin

Sees all active subjects across every career. Can post announcements, upload resources, and manage quick-access links in any classroom.
2

Docente

Sees only the subjects where they are the assigned docente_id. Has full write access within those classrooms.
3

Preceptor

Sees all active subjects that belong to a career (carrera_id IS NOT NULL). Has read-only access to classroom content; write access is limited to the Finales panel.
4

Estudiante

Sees only the subjects they are actively enrolled in. Enrollment can be either via a career cohort (carrera_id) or as a direct per-subject enrollment (materia_id). Students cannot post announcements, upload resources, or modify quick-access links.
A student’s list of accessible subjects is computed dynamically at request time by the getEstudianteMateriaIds helper. It unions career-cohort enrollments and direct per-subject enrollments, filtering to only activa inscriptions and activa materias.

Student View: Upcoming Activities

On the Actividades tab, students see each activity enriched with a mi_entrega summary field:
interface MiEntregaResumen {
  estado: string;    // "entregada" | "calificada"
  nota: number | null;
  tardia: boolean;
}
The /api/aula/mis-pendientes endpoint returns every active activity across all of a student’s enrolled subjects (optionally filtered by materiaId), each annotated with mi_entrega so a dashboard widget can surface what still needs to be submitted.

Build docs developers (and LLMs) love