Sala de PCs
Gestión de Profesores y reservas de sala para las sesiones de laboratorio.
Un Profesor representa a un docente que puede reservar una sala.
Una SalaPC es la reserva de un profesor para una fecha y turno específico en una sala.
Paginación especial: Este módulo usa el parámetro
Limit (predeterminado: 20)
en lugar de page_size. El parámetro de página sigue siendo page.
Horario único: No se permiten reservas duplicadas. La combinación de
date + hour es única (restricción unique_together en el modelo).
Crear o actualizar una reserva sobre una fecha y hora ya ocupadas devuelve 409 Conflict.
Franjas horarias: El formulario de agendamiento del frontend acota la hora de inicio
a tramos de 30 minutos, de 08:00 a 17:00. El backend acepta cualquier
HH:MM:SS
válido; la restricción de tramos se aplica en la interfaz.
5
Endpoints Profesores
5
Endpoints SalaPC
Modelos de Datos
Profesor
tabla: profesor| Campo | Tipo | Constraint | Descripción |
|---|---|---|---|
| id | integer | auto | Clave primaria autoincremental. |
| nombre | string(100) | opcional | Nombre del profesor. |
| apellido | string(100) | opcional | Apellido del profesor. |
| correo | requerido | Correo electrónico del profesor. | |
| asignatura | string(100) | requerido | Asignatura que imparte el profesor. |
SalaPC
tabla: salapc| Campo | Tipo | Constraint | Descripción |
|---|---|---|---|
| id | integer | auto | Clave primaria autoincremental. |
| profesor | FK → Profesor | requerido | ID del profesor que reserva la sala. Se elimina en cascada. |
| profesor_name | string | solo lectura | Nombre del profesor (campo virtual del serializer). |
| curso | string(100) | requerido | Curso que usará la sala (ej. 3°B). |
| asignatura | string(100) | requerido | Asignatura de la sesión. |
| date | date | requerido | Fecha de uso. Formato: YYYY-MM-DD. |
| hour | time | requerido | Hora de inicio. Formato: HH:MM:SS. Junto con date forma una clave única (no se repiten reservas en la misma fecha y hora). |
Profesores
CRUD completo sobre los docentes que utilizan las salas de laboratorio.
GET
/api/v1/profesores
Listar todos los profesores (paginado)
🔒 login
▶
Parámetros de consulta
| Parámetro | Tipo | Descripción |
|---|---|---|
| page | integer | Número de página (predeterminado: 1). |
| Limit | integer | Registros por página (predeterminado: 20). |
200 OK
200 OK — application/json
{ "links": { "next": "http://127.0.0.1:8000/api/v1/profesores?page=2", "previous": null }, "items": 25, "status": "ok", "page": "1/2", "data": [ { "id": 1, "nombre": "Carlos", "apellido": "Pérez", "correo": "cperez@colegio.cl", "asignatura": "Programación I" } ] }
POST
/api/v1/profesores
Registrar un nuevo profesor
🔒 login
▶
Cuerpo de la petición (JSON)
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
| nombre | string | opcional | Nombre del profesor (máx. 100 caracteres). |
| apellido | string | opcional | Apellido del profesor (máx. 100 caracteres). |
| correo | string (email) | requerido | Correo electrónico del profesor. |
| asignatura | string | requerido | Asignatura que imparte (máx. 100 caracteres). |
201 Created
400 Bad Request
GET
/api/v1/profesores/{id}
Obtener un profesor por ID
🔒 login
▶
200 OK
404 Not Found
200 OK
{ "status": "ok", "data": { "id": 1, "nombre": "Carlos", "apellido": "Pérez", "correo": "cperez@colegio.cl", "asignatura": "Programación I" } }
PUT
/api/v1/profesores/{id}
Actualizar un profesor
🔒 login
▶
Actualización completa. Se deben enviar todos los campos requeridos.
Mismos campos que el POST. Ver sección anterior para referencia.
200 OK
400 Bad Request
404 Not Found
DELETE
/api/v1/profesores/{id}
Eliminar un profesor
🛡️ admin
▶
Requiere rol admin. Al eliminar un profesor se eliminan todas sus reservas de sala.
200 OK
403 Forbidden
404 Not Found
Reservas de Sala
Gestión de las reservas de sala de computadoras por profesores.
GET
/api/v1/salapcs
Listar todas las reservas (paginado)
🔒 login
▶
Parámetros de consulta
| Parámetro | Tipo | Descripción |
|---|---|---|
| page | integer | Número de página (predeterminado: 1). |
| Limit | integer | Registros por página (predeterminado: 20). |
200 OK
200 OK — application/json
{ "links": { ... }, "items": 40, "status": "ok", "page": "1/2", "data": [ { "id": 1, "profesor": 3, "profesor_name": "Carlos", "curso": "3°B", "asignatura": "Programación I", "date": "2026-04-07", "hour": "10:00:00" } ] }
POST
/api/v1/salapcs
Crear una nueva reserva de sala
🔒 login
▶
Cuerpo de la petición (JSON)
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
| profesor | integer | requerido | ID del profesor que realiza la reserva. |
| curso | string | requerido | Curso que usará la sala (máx. 100 caracteres). |
| asignatura | string | requerido | Asignatura de la sesión (máx. 100 caracteres). |
| date | string (date) | requerido | Fecha de uso. Formato: YYYY-MM-DD. |
| hour | string (time) | requerido | Hora de inicio. Formato: HH:MM:SS. |
Ejemplo de petición
Request Body
{ "profesor": 3, "curso": "3°B", "asignatura": "Bases de Datos", "date": "2026-04-10", "hour": "14:00:00" }
201 Created
400 Bad Request
409 Conflict
Si ya existe una reserva en esa
date y hour, la API responde
409 Conflict sin crear el registro.
409 Conflict
{ "status": "error", "message": "Ya existe una reserva para esa fecha y hora. Elige otro horario." }
GET
/api/v1/salapcs/{id}
Obtener una reserva por ID
🔒 login
▶
200 OK
404 Not Found
200 OK
{ "status": "ok", "data": { "id": 5, "profesor": 3, "profesor_name": "Carlos", "curso": "3°B", "asignatura": "Bases de Datos", "date": "2026-04-10", "hour": "14:00:00" } }
PUT
/api/v1/salapcs/{id}
Actualizar una reserva
🔒 login
▶
Actualización completa. Se deben enviar todos los campos requeridos.
Mismos campos que el POST. Ver sección anterior para referencia.
Igual que en el POST: cambiar la reserva a una
date y hour ya ocupadas
por otra reserva devuelve 409 Conflict.
200 OK
400 Bad Request
404 Not Found
409 Conflict
DELETE
/api/v1/salapcs/{id}
Eliminar una reserva
🛡️ admin
▶
Requiere rol admin. Esta acción es irreversible.
200 OK
403 Forbidden
404 Not Found