Profesores (Teachers)


Routes

Method URI Action
GET /teachers index
GET /teachers/{id} show
POST /teachers store
PATCH /teachers/{id} update
DELETE /teachers/{id} soft delete
POST /teachers/{id}/assign-teachers relation
GET /teachers/{id}/historic index

Model Attributes

{
  "id": 1,
  "id_document": "00000000",
  "first_name": "teacher",
  "last_name": "test",
  "email": "teacher@idc.com",
  "address": "83717 Jany Fall\nNorth Adityaberg, MD 18735-4415",
  "phone": "+8507954705133",
  "mobile_phone": "+5663221842210",
  "profession": "test",
  "profile_picture": null, // copia del profile_picture del User relacionado  
  "enabled": true,
  "is_coordinator": false,
  "created_at": "2020-03-10 13:28:15",
  "updated_at": "2020-03-10 13:28:15",
  "user_id": 1,
  "supervisor_teacher_id": null // (int) id del coordinador que supervisa este profesor (si aplica)
  "specialization_id": null // (int) id de la especialidad que coordinara un profesor-coordinador
}

Relations

  • Es supervisado por un coordinador (como profesor) BelongsTo supervisor
  • Coordina una especialidad (como coordinador) BelongsTo coordinateSpecialization
  • Supervisa muchos profesores (como coordinador) HasMany supervising
  • Tiene muchas materia_seccion asignadasHasMany courseSections
  • Tiene muchas bitacoras HasMany binnacles
  • Tiene horarios HasMany schedules Through courseSections
  • Tiene clases HasMany lessons Through courseSections
  • Tiene muchas materias asignadas (por materia_seccion) BelongsToMany courses

{primary} Al obtener un modelo con el metodo show o index se puede utilizar un query string especial para cargar las relaciones ?with=relation o ?with=relationA,relationB


Index

{info} Si usuario del request es coordinador se obtendran solo los profesores que el supervisa

Route GET /teachers

Policies

  • Admins
  • Coordinador que supervise al profesor
  • Profesor relacionado

Filters extends Query Filters

Filter Description
search=string Busca a traves de id_document, first_name, last_name, email, address, phone, mobile_phone, profession
enabled=bool Obtener solo los profesores habilitados
is_coordinator=bool Obtener solos los profesores que sean coordinadores
supervisor_teacher=int Filtra por el atributo supervisor_teacher_id
lessons_view_data Si este atributo esta presente en el query string al traer a los profesores se cargara toda la data necesaria en referencia a clases (lessons)

Response 200

[
  {
    // Teacher
  }
]

Store

Route POST /teachers

Policies

  • admins

Request Body

{
  "id_document": "required|string",
  "first_name": "required|string",
  "last_name": "required|string",
  "email": "required|email|unique:users",
  "address": "required|string",
  "phone": "required|string",
  "mobile_phone": "required|string",
  "profession": "required|string",
  "is_coordinator": "required|boolean",

  "enabled": "boolean",
  "profile_picture": "image",

  // Este atributo solo es requerido y utilizado cuando `is_coordinator` es true
  "specialization_id": "required|integer|exists:specializations,id"
}

Response 201

{
  // Teacher
}

Update

Route PATCH /teachers/{id}

Policies

  • admins
  • coordinador que pueda actualizar y este supervisando al profesor especificado
  • profesor relacionado

Request Body

{warning} 1. Si un profesor-coordinador es cambiado a ser solo profesor specialization_id pasa hacer null

2. Solo se permite 1 coordinador por especialidad

{
  "first_name": "string",
  "last_name": "string",
  "address": "string",
  "phone": "string",
  "mobile_phone": "string",
  "profession": "string",

  // Estos atributos tienen efecto solo cuando el usuario autenticado es admin o low_admin
  "id_document": "string",
  "enabled": "boolean",
  "is_coordinator": "boolean",
  // Este atributo solo es utilizado cuando el profesor es coordinador o  pasa hacer coordinador (Si es coordinador luego de actualizar)
  "specialization_id": "integer|exists:specializations,id"
}

Response 200

{
  // Teacher
}

Soft Delete

{primary} Tambien aplica soft-delete al user relacionado

Route DELETE /teachers/{id}

Policies

  • admins

Asignar profesores a coordinador

Permite que un coordinador supervise a profesores

{warning} Solo para profesores que sean coordinadores, si el profesor especificado no es un coordinador se retornara un error

Route POST /teachers/{id}/assign-teachers

Por muy confusa que se vea la ruta se recuerda que un profesor tambien es un coordinador

Policies

  • admins
  • low admins

Request Body

{primary} Si se envia coordinadores en el arreglo se filtraran, solo se tomaran los profesores que no sean coordinadores

{
  "target_teachers_ids": "required|array",
  "target_teachers_ids.*": "integer" // must be an existing teacher
}

Historic

Route GET /teachers/{id}/historic

Policies

  • Admins
  • Coordinador que supervise al profesor
  • Profesor relacionado

Response

{
  "20201": { // By Period
    "BASICA": [ // By Specialization
      // Assigned CourseSections
    ]
  }
}