Personalizar Servicio REST (API Guarani 3)

Buen día, nos comunicamos para transmitir una inquietud que nos ha surgido

Actualmente necesitamos crear un servicio en la API que a partir del DNI del alumno obtenga los siguientes datos

  • Nombre y Apellido
  • Propuesta
  • Unidad Académica
  • Fecha de Ultimo Examen
  • Año de Ingreso
  • Año de última Reinscripción

Tenemos diseñada la consulta que necesitamos realizar en la base de datos


select a.identificacion,
a.apellido_nombres,
ra.codigo ra_codigo,
ra.nombre ra_nombre,
a.propuesta_codigo,
a.propuesta_nombre,
get_fecha_ingreso_alumno(a.alumno) fecha_ingreso_alumno,
(select max(anio_academico) from sga_reinscripciones as r where r.alumno=a.alumno ) ultima_reinscripcion,
(select max(fecha) from vw_hist_academica_basica as ha where ha.alumno=a.alumno) ultimo_examen
from vw_alumnos as a,
sga_propuestas_ra as pra,
sga_responsables_academicas ra
where identificacion='dni_alumno'
and a.propuesta=pra.propuesta
and pra.responsable_academica=ra.responsable_academica

Hemos revisado la documentación de como personalizar servicios REST
https://documentacion.siu.edu.ar/wiki/SIU-Guarani/Version3.21.0/personalizaciones/rest

Pero, no hemos logrado diseñar adecuadamente los archivos de recursos y modelos necesarios para el correcto funcionamiento de la API, nos seria de gran utilidad encontrar los medios para realizar debug, y poder saber en que estamos fallando

Adjunto código de ambos documentos
– rest_alumnos.php –

<?php

namespace PERS\Guarani\php\rest\v1\modelos;
use SIU\Guarani\php\rest\v1\modelos\rest_alumnos_nucleo;

class rest_alumnos extends rest_alumnos_nucleo{
     
     /**
     * @var rest_alumnos
     */
    protected $modelo;

    public static function _get_modelos_comedor(){
        $alumno = array(
           'nombre'     => array('type' => 'string'),
           'apellido' => array('type'  => 'string'),
           'propuesta' => array('type'  => 'string'),
           'unidad_academica' => array('type'  => 'string'),
           'fecha_ult_examen' => array('type'  => 'string'),
           'anio_ingreso' => array('type'  => 'string'),
           'anio_ult_reincripcion' => array('type'  => 'string'),
        );

        return array('Alumno' => $alumno);
    }

    function __construct()
    {
                $this->modelo = \guarani::rest(rest_alumnos::class);
    }

    function get_alumno($dni_alumno)
    {
        $consulta = "select a.identificacion,
		                a.apellido_nombres,
		                ra.codigo ra_codigo,
		                ra.nombre ra_nombre,
		                a.propuesta_codigo,
		                a.propuesta_nombre,
		                get_fecha_ingreso_alumno(a.alumno) fecha_ingreso_alumno,
		                (select max(anio_academico) from sga_reinscripciones as r where r.alumno=a.alumno ) ultima_reinscripcion,
		                (select max(fecha) from vw_hist_academica_basica as ha where ha.alumno=a.alumno) ultimo_examen
                from vw_alumnos as a,
	                sga_propuestas_ra as pra,
	                sga_responsables_academicas ra
                where identificacion='$dni_alumno'
                  and a.propuesta=pra.propuesta
                  and pra.responsable_academica=ra.responsable_academica;"

        return $consulta;    
    }
} 

– recurso_alumnos_comedor.php –

<?php

namespace personalizacion\php\rest\v1;
// namespace PERS\Guarani\php\rest\v1\alumnos_unsj;

use SIU\Guarani\php\rest\v1\alumnos\recurso_alumnos;
use SIUToba\rest\rest;
use SIUToba\rest\lib\rest_validador;
use SIUToba\rest\lib\rest_error;

class recurso_alumnos_comedor extends recurso_alumnos {

    public static function _get_modelos()
    {
        //Obtengo los modelos de la clase padre (recurso_alumnos)
        $modelo = parent::_get_modelos();

        //Le agrego la propiedad 'dni'.
        $modelo['alumno_comedor']['username'] = array('type' => 'string');
        return $modelo;
    }
}
?>

Desde ya agradecemos cualquier ayuda en la resolución de este inconveniente
Saludos cordiales

Hola Fernando,

Ustedes quieren personalizar el servicio GET /alumnos para agregar esos datos o crear un nuevo servicio?

Saludos, Florencia.

Buen día Florencia

Si de ser posible, nos gustaría extender la funcionalidad de Alumno, para mostrar estos parámetros

Saludos

Fernando,

Deberían crear el archivo <path proyecto Guaraní>/personalizacion/php/rest/v2/alumnos_unsj/recurso_alumnos_unsj.php con el contenido que adjunto. Sólo agregué como ejemplo el dato ‘apellido’. Hagan lo mismo con los restantes.

Además, deben modificar el archivo <path proyecto Guaraní>/personalizacion/php/rest/v2/modelos/rest_alumnos.php, para que sea similar al que adjunto. Fijense que en el método ‘get_list’ van a tener que invocar a un método personalizado que retorne los datos que necesitan a partir del tipo y número de documento (yo puse $this->modelo->metodo_personalizado($tipo_documento, $numero_documento), obviamente no les va a funcionar así).

Recuerden además que deben agregar el servicio personalizado en el archivo ‘<path proyecto Guaraní>/instalacion/i__desarrollo/p__guarani/rest/recurso_usuarios.php’. Luego acceden al servicio como: <URL Guaraní>/rest/v2/alumnos-unsj?tipo_documento=&numero_documento=<número>.

Saludos, Florencia.
8


alumnos_unsj.zip (1.3 KB)

Muchas gracias Florencia, me ha servido mucho tus documentos, respecto al método personalizado que mencionas, me quedaron un par de preguntas

¿Debería definir este método personalizado dentro del archivo rest_alumnos.php?
¿Existe alguna función ejemplo similar, donde se devuelvan datos a partir de una sentencia de consulta tipo postgres?
Es para guiarme mejor

Desde ya, muchas gracias
Saludos

Fernando,

Fijate que en la clase original ‘rest_alumnos_nucleo’ (<path proyecto Guaraní>/php/rest/v2/modelos/rest_alumnos_nucleo.php), el método ‘get_list’ tiene la sentencia:

$rs = $this->modelo->get_contactos_persona_rest($tipo_documento, $numero_documento);

Ese método se encuentra en la clase ‘co_personas’. Ustedes deberían extender dicha clase de consulta PHP (pueden ver un ejemplo en la sección “Modificar la clase de consulta” de https://documentacion.siu.edu.ar/wiki/SIU-Guarani/Version3.21.0/personalizaciones/reporte#Aplicar_cambios_en_objetos_correspondientes) y agregar allí el método personalizado que luego invocan.

Saludos, Florencia.
2