/** * Se consume en GET /personas/{id}/deportes * @summary Retorna todos los deportes que practica la persona. * @responses 200 array {"$ref":"Deporte"} * @responses 404 No se pudo encontrar a la persona */ function get_list($id_persona) { //si estuviese en el padre, se llamaria como get_deportes_list $deportes = modelo_persona::get_deportes($id_persona); $deportes_vista = rest_hidratador::hidratar(current($this->_get_modelos()), $deportes); rest::response()->get($deportes_vista); }
/** * Se consume en GET /personas/{id}/juego_de_mesa * @summary Retorna todos los juegos de mesa que juega la persona. * @responses 200 array {"$ref":"Juego"} * @responses 404 No se pudo encontrar a la persona */ function get_list($id_persona) { $juegos_mesa = modelo_persona::get_juegos($id_persona, 1); if ($juegos_mesa && !empty($juegos_mesa)) { $juegos_mesa_vista = rest_hidratador::hidratar(current($this->_get_modelos()), $juegos_mesa); rest::response()->get($juegos_mesa_vista); } else { rest::response()->not_found(); } }
/** * Dado el username, retorna el api_key. * @param $api_key * @return mixed string\null. El api_key o NULL si el usuario no existe */ function get_usuario_api_key($api_key) { $usuarios_ini = toba_modelo_rest::get_ini_usuarios($this->modelo_proyecto); foreach ($usuarios_ini->get_entradas() as $username => $u) { if (isset($u['api_key']) && $u['api_key'] === $api_key) { return $username; } } rest::app()->logger->info("No se encontro 'api_key = {$api_key}' para ningún usuario de rest_usuarios.ini"); return NULL; }
/** * @param $path * * @return anotaciones_docs */ protected function add_modelos($path) { $lector = rest::app()->lector_recursos; //new lector_recursos_archivo($this->api_root); $archivo = $lector->get_recurso(explode('/', $path)); $i = new rest_instanciador(); $i->archivo = $archivo['archivo']; $objeto = $i->get_instancia(); if (method_exists($objeto, '_get_modelos')) { $modelo = new modelo_recursos(); $specs = $modelo->to_swagger($objeto->_get_modelos()); $this->list['definitions'] = array_merge($this->list['definitions'], $specs); } else { rest::app()->logger->debug('El objeto no tiene el metodo _get_modelos. Clase: ' . get_class($objeto)); return array(); } }
/** * Lee el parametro 'order' del request y arma el ORDER BY de la sql * Solo permite ordenar por los campos definidos en el constructor (evitar inyeccion sql). * * @param null $default si no hay un param order, se usa el default * * @throws rest_error * * @return string */ public function get_sql_order_by($default = null) { $get_order = rest::request()->get("order"); $usar_default = false; if (trim($get_order) == '') { if ($default !== null) { $usar_default = true; $get_order = $default; } else { return ""; } } $sql_order_by = array(); $get_campos = explode(",", $get_order); foreach ($get_campos as $get_campo) { $get_campo = trim($get_campo); $signo = substr($get_campo, 0, 1); switch ($signo) { case '+': $signo = " ASC"; break; case '-': $signo = " DESC"; break; default: throw new rest_error(400, "Parámetro 'order' invalido. Se esperaba + o - y se recibio '{$signo}'"); } $campo = substr($get_campo, 1); if ($usar_default) { $sql_order_by[] = $campo . $signo; } elseif (!isset($this->campos_ordenables[$campo])) { throw new rest_error(400, "Parámetro 'order' invalido. No esta permitido ordenar por campo '{$campo}'"); } else { $alias_sql = $this->campos_ordenables[$campo]['alias_sql']; $sql_order_by[] = $alias_sql . $signo; } } if (empty($sql_order_by)) { return ""; } else { return "ORDER BY " . implode(', ', $sql_order_by); } }
/** * $relajar_ocultos boolean no checkea campos obligatorios cuando no se especifican */ protected function procesar_input_edicion($relajar_ocultos = false) { /**Validacion del input del usuario, de acuerdo a la especificacion de la API * La PersonaEditar tiene solo los campos editables, ej: el id no se puede setear */ $datos = rest::request()->get_body_json(); $spec_persona = $this->get_spec_persona(true, 'PersonaEditar'); rest_validador::validar($datos, $spec_persona, $relajar_ocultos); /**Transformo el input del usuario a formato del modelo, deshaciendo la hidratacion. * Por ejemplo, cambia el nombre de fecha_nacimiento (vista) a fecha_nac (modelo) * Se pueden requerir otros pasos, en casos mas complejos */ $datos = rest_hidratador::deshidratar_fila($datos, $spec_persona); return $datos; }