Módulo Sala de PCs

🌐 Base: /api/v1/

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
CampoTipoConstraintDescripción
id integer auto Clave primaria autoincremental.
nombre string(100) opcional Nombre del profesor.
apellido string(100) opcional Apellido del profesor.
correo email requerido Correo electrónico del profesor.
asignatura string(100) requerido Asignatura que imparte el profesor.

SalaPC

tabla: salapc
CampoTipoConstraintDescripció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)

Parámetros de consulta

ParámetroTipoDescripció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

Cuerpo de la petición (JSON)

CampoTipoRequeridoDescripció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
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
⚠️
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)

Parámetros de consulta

ParámetroTipoDescripció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

Cuerpo de la petición (JSON)

CampoTipoRequeridoDescripció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
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
⚠️
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