/** * Se encarga de actualizar los datos del usuario que recibe, en la * base de datos. */ void Servicio::administrarPerfil() { string nombreUsuario = this->getParametro(keyNombre, keyDefault); string estadoDeConexion = this->getParametro(keyEstadoDeConexion, keyDefault); string fotoDePerfil = this->getParametro(keyFotoDePerfil, keyDefault); bool estado = StringUtil::toBoolean(estadoDeConexion); string localizacion = this->getParametro(keyLocalizacion, keyDefault); string password = this->getParametro(keyPassword, keyDefault); Usuario* user = this->obtenerUsuario(); string token = this->getParametro(keyTokenSesion, keyDefault); if (user->getId() != keyIdUsuarioNoEncontrado) { if (user->getToken() == token) { user->setNombre(nombreUsuario); user->setEstadoConexion(estado); user->setFotoDePerfil(fotoDePerfil); user->setLocalizacion(localizacion); user->setPassword(password); user->persistir(); Loger::getLoger()->info( "Se modificaron los datos del usuario " + user->getNombre() + " correctamente."); this->responder( "Se modificaron los datos del usuario " + user->getNombre() + " correctamente. Token:" + user->getToken(), true); } else { Loger::getLoger()->warn( "El usuario " + user->getNombre() + " no posee un token de session correcto"); this->responder( "El usuario " + user->getNombre() + " no posee un token de session correcto", false); } } else { Loger::getLoger()->warn( "El usuario " + user->getNombre() + " no se encuentra registrado en el sistema"); this->responder( "El usuario " + user->getNombre() + " no se encuentra registrado en el sistema", false); } Loger::getLoger()->guardarEstado(); delete user; }
/** * Devuelve los datos correspondientes al usuario con telefono igual al * recibido. */ void Servicio::consultarUsuarioOnline() { string telefono = this->getParametroIdMetodoGET(urlBaseUsuario); Usuario* user = Usuario::obtenerPorTelefono(telefono); string renovarToken = this->getParametro(keyRenovarToken, keyDefault); bool renovar = StringUtil::toBoolean(renovarToken); if (user->getId() != keyIdUsuarioNoEncontrado) { user->registrarUltimaConexion(); Json::Value respuesta; respuesta[keyNombre] = user->getNombre(); respuesta[keyPassword] = user->getPassword(); if(renovar){ respuesta[keyTokenSesion] = user->calcularTokenDeSesion(); }else{ respuesta[keyTokenSesion] = user->getToken(); } respuesta[keyEstadoDeConexion] = StringUtil::toString( user->getEstadoConexion()); respuesta[keyFotoDePerfil] = user->getFotoDePerfil(); respuesta["idUsuario"] = user->getId(); respuesta[keyLocalizacion] = user->getLocalizacion(); user->persistir(); this->responder(respuesta.toStyledString(), true); Loger::getLoger()->info( "Consulta del usuario " + user->getNombre() + " exitosa."); } else { string msj = "No se pudo obtener el estado del usuario con numero: " + this->getParametro(keyTelefono, keyDefault) + " ya que no se encuentra registrado en el sistema."; Loger::getLoger()->warn(msj); this->responder(msj, false); } Loger::getLoger()->guardarEstado(); delete user; }
/* * Agrega el mensaje que envió el cliente a la conversacion correspondiente y luego la almacena en * la Base de Datos. * */ void Servicio::almacenarListaDifusion() { string idEmisor = this->getParametro(keyIdUsuarioEmisor, keyDefault); string token = this->getParametro(keyTokenSesion, keyDefault); Json::Value contactosTelefonoValue = this->getParametroArray( keyContantosTelefono, keyDefault); vector<string> contactosTelefono = StringUtil::jsonValueToVector( contactosTelefonoValue); //chequeo que los usuarios existan: Usuario *emisor = Usuario::obtenerPorTelefono(idEmisor); if (emisor->getId() == keyIdUsuarioNoEncontrado) { string msj_warning = "No se pudo almacenar la lista de difusion porque el emisor no existe"; this->responder(msj_warning, false); Loger::getLoger()->warn(msj_warning); Loger::getLoger()->guardarEstado(); } else if (emisor->getToken() != token) { Loger::getLoger()->warn( "El usuario " + emisor->getNombre() + " no posee un token de session correcto"); this->responder( "El usuario " + emisor->getNombre() + " no posee un token de session correcto", false); } else { //Obtengo el mensaje: string cuerpo = this->getParametro(keyCuerpo, keyDefault); string fecha = this->getParametro(keyFecha, keyDefault); Mensaje* mensaje = new Mensaje(cuerpo, emisor->getId(), fecha); //Recorro los contactos del telefono para verificar cuales estan registrados y conectados for (unsigned i = 0; i < contactosTelefono.size(); i++) { string telefonoActual = contactosTelefono[i]; Usuario* usuario = Usuario::obtenerPorTelefono(telefonoActual); //Envío mensaje a los usuarios que estan registrados y que se encuentran conectados if (usuario->getId() != keyIdUsuarioNoEncontrado && usuario->getEstadoConexion()) { //almaceno la conversacion (si no existe la creo): Conversacion *conversacion = Conversacion::obtener( emisor->getId() + "-" + usuario->getId()); if (conversacion->getId() != keyIdConversacionNoEncontrada) { conversacion->agregarMensaje(mensaje); conversacion->persistir(); delete conversacion; } else { Conversacion *conversacion = Conversacion::obtener( usuario->getId() + "-" + emisor->getId()); if (conversacion->getId() != keyIdConversacionNoEncontrada) { conversacion->agregarMensaje(mensaje); conversacion->persistir(); delete conversacion; } else { vector<Usuario*> usuarios; usuarios.push_back(emisor); usuarios.push_back(usuario); vector<Mensaje*> mensajes; mensajes.push_back(mensaje); Conversacion *nuevaConversacion = new Conversacion( usuarios, mensajes); nuevaConversacion->persistir(); delete nuevaConversacion; } } } } this->responder("Lista de difusion enviada correctamente", true); delete mensaje; } }
/* * Agrega el mensaje que envió el cliente a la conversacion correspondiente y luego la almacena en * la Base de Datos. * */ void Servicio::almacenarConversacion() { string idEmisor = this->getParametro(keyIdUsuarioEmisor, keyDefault); string idReceptor = this->getParametro(keyIdUsuarioReceptor, keyDefault); //chequeo que los usuarios existan: Usuario *emisor = Usuario::obtenerPorTelefono(idEmisor); Usuario *receptor = Usuario::obtenerPorTelefono(idReceptor); string token = this->getParametro(keyTokenSesion, keyDefault); if (emisor->getId() == keyIdUsuarioNoEncontrado || receptor->getId() == keyIdUsuarioNoEncontrado) { string msj_warning = "No se pudo almacenar la conversacion porque: "; if (emisor->getId() == keyIdUsuarioNoEncontrado) msj_warning.append("el emisor no existe."); if (receptor->getId() == keyIdUsuarioNoEncontrado) msj_warning.append(" el receptor no existe."); this->responder(msj_warning, false); Loger::getLoger()->warn(msj_warning); Loger::getLoger()->guardarEstado(); } else { if (emisor->getToken() == token) { //Obtengo el mensaje: string cuerpo = this->getParametro(keyCuerpo, keyDefault); string fecha = this->getParametro(keyFecha, keyDefault); Mensaje* mensaje = new Mensaje(cuerpo, emisor->getId(), fecha); //almaceno la conversacion (si no existe la creo): Conversacion *conversacion = Conversacion::obtener( emisor->getId() + "-" + receptor->getId()); if (conversacion->getId() != keyIdConversacionNoEncontrada) { conversacion->agregarMensaje(mensaje); conversacion->persistir(); delete conversacion; } else { Conversacion *conversacion = Conversacion::obtener( receptor->getId() + "-" + emisor->getId()); if (conversacion->getId() != keyIdConversacionNoEncontrada) { conversacion->agregarMensaje(mensaje); conversacion->persistir(); delete conversacion; } else { vector<Usuario*> usuarios; usuarios.push_back(emisor); usuarios.push_back(receptor); vector<Mensaje*> mensajes; mensajes.push_back(mensaje); Conversacion *nuevaConversacion = new Conversacion(usuarios, mensajes); nuevaConversacion->persistir(); delete nuevaConversacion; } } this->responder(mensaje->getId(), true); delete mensaje; } else { string msj = "El usuario " + emisor->getNombre() + " no posee un token de session correcto"; Loger::getLoger()->warn(msj); this->responder(msj, false); } } }