/**
 * Obtiene los contactos que se encuentran registrados en el sistemas y estan conectados,
 * a partir de numeros de telefono que recibe
 *
 */
void Servicio::obtenerContactos() {
	Json::Value contactosTelefonoValue = this->getParametroArray(
	keyContantosTelefono, keyDefault);
	vector<string> contactosTelefono = StringUtil::jsonValueToVector(
			contactosTelefonoValue);

	Json::Value respuesta;
	int counter = 0;
	for (unsigned i = 0; i < contactosTelefono.size(); i++) {
		string telefonoActual = contactosTelefono[i];
		Usuario* usuario = Usuario::obtenerPorTelefono(telefonoActual);

		//Agrego los usuarios que estan registrados y que se encuentran conectados

		if (usuario->getId() != keyIdUsuarioNoEncontrado
				&& usuario->getEstadoConexion()) {
			respuesta["contactos"][counter][keyNombre] = usuario->getNombre();
			respuesta["contactos"][counter][keyTelefono] =
					usuario->getTelefono();
			respuesta["contactos"][counter][keyFotoDePerfil] =
					usuario->getFotoDePerfil();
			respuesta["contactos"][counter][keyLocalizacion] = usuario->getLocalizacion();
			counter++;
		}
	}

	this->responder(respuesta.toStyledString(), true);
}
Example #2
0
void StrategyNotificaciones::notificar(Consulta* consulta)
{
	stringstream notificacion;

	string tipoConsulta = (consulta->tipo() == TipoConsulta::comun) ? "COMUN" : "URGENCIA";

	Usuario* medico   = consulta->medico();
	Usuario* paciente = consulta->paciente();

	notificacion << "Paciente diagnosticado: " << paciente->getNombre() << " " << paciente->getApellido() << endl
	             << "Médico notificado: " << medico->getNombre() << " " << medico->getApellido() << endl
	             << "Tipo de consulta: " << tipoConsulta << endl
	             << "Hora de consulta: " << consulta->fechaConsulta() << endl;

	_notificaciones.push_back(notificacion.str());
}
/**
 * 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;

}
void TestConversacion::testSerializacionDeDatosUnaConversacion() {
	Usuario* user = new Usuario("Pepe", "foto", "1568017070");
	Usuario* user2 = new Usuario("Jose", "foto2", "156801515");

	BaseDeDatos* db = BaseDeDatos::getInstance();
	db->setUsuario(user);
	db->setUsuario(user2);

	vector<Usuario*> usuarios;
	usuarios.push_back(user);
	usuarios.push_back(user2);

	vector<Mensaje*> mensajes;
	mensajes.push_back(new Mensaje("cuerpo mensaje 1", "asdasd", "fecha1"));
	mensajes.push_back(new Mensaje("cuerpo mensaje 2", "asdasd2", "fecha2"));

	Conversacion* conversacion = new Conversacion(usuarios, mensajes);
	string conversacionSerializada = conversacion->serializar();

	Conversacion* conv2 = new Conversacion(conversacionSerializada);
	vector<Mensaje*> mensajesDeserealizados = conv2->getMensajes();

	vector<Usuario*> usuariosDeserealizados = conv2->getUsuarios();

	CPPUNIT_ASSERT(
			mensajes[0]->getCuerpo() == mensajesDeserealizados[0]->getCuerpo());
	CPPUNIT_ASSERT(
			mensajes[1]->getCuerpo() == mensajesDeserealizados[1]->getCuerpo());
	CPPUNIT_ASSERT(
			mensajes[0]->getIdUsuarioEmisor()
					== mensajesDeserealizados[0]->getIdUsuarioEmisor());
	CPPUNIT_ASSERT(
			mensajes[1]->getIdUsuarioEmisor()
					== mensajesDeserealizados[1]->getIdUsuarioEmisor());
	CPPUNIT_ASSERT(
			mensajes[0]->getFecha() == mensajesDeserealizados[0]->getFecha());
	CPPUNIT_ASSERT(
			mensajes[1]->getFecha() == mensajesDeserealizados[1]->getFecha());

	CPPUNIT_ASSERT(user->getNombre() == usuariosDeserealizados[0]->getNombre());
	CPPUNIT_ASSERT(user->getId() == usuariosDeserealizados[0]->getId());

	CPPUNIT_ASSERT(
			user2->getNombre() == usuariosDeserealizados[1]->getNombre());
	CPPUNIT_ASSERT(user2->getId() == usuariosDeserealizados[1]->getId());

	delete user;
	delete user2;
	delete conversacion;
	delete conv2;

}
/**
 * Devuelve el id de una conversacion a partir de dos telefonos
 *
 */
void Servicio::obtenerIdConversacion() {
	string telefonoUsuarioEmisor = this->getParametro(keyTelefonoEmisor,
			keyDefault);
	;
	string telefonoUsuarioRecceptor = this->getParametro(keyTelefonoReceptor,
			keyDefault);

	Usuario* usuarioEmisor = Usuario::obtenerPorTelefono(telefonoUsuarioEmisor);
	Usuario* usuarioReceptor = Usuario::obtenerPorTelefono(
			telefonoUsuarioRecceptor);

	if (usuarioEmisor->getId() != keyIdUsuarioNoEncontrado
			&& usuarioReceptor->getId() != keyIdUsuarioNoEncontrado) {
		vector<Mensaje*> mensajes;
		vector<Usuario*> usuarios;
		usuarios.push_back(usuarioEmisor);
		usuarios.push_back(usuarioReceptor);
		Conversacion *conversacion = Conversacion::obtener(
				usuarioEmisor->getId() + "-" + usuarioReceptor->getId());
		if (conversacion->getId() == keyIdConversacionNoEncontrada) {
			conversacion = Conversacion::obtener(
					usuarioReceptor->getId() + "-" + usuarioEmisor->getId());
		}
		string idConversacion = conversacion->getId();
		if (idConversacion != keyIdUsuarioNoEncontrado) {
			this->responder(idConversacion, true);
		} else {
			//Si la conversacion no existe devuelvo como id uno default para estos dos usuarios
			Conversacion* conversacion = new Conversacion(usuarios, mensajes);
			string idConversacion = conversacion->getId();

			this->responder(idConversacion, false);
		}
	} else {
		Usuario* user;
		if (usuarioEmisor->getId() == keyIdUsuarioNoEncontrado) {
			user = usuarioEmisor;
		} else {
			user = usuarioReceptor;
		}
		string msj_warn = "Usuario " + user->getNombre()
				+ " no se encuentra registrado en el sistema";

		Loger::getLoger()->warn(msj_warn);
		this->responder(msj_warn, false);
	}

	delete usuarioEmisor;
	delete usuarioReceptor;
}
/**
 * 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;

}
/*
 * 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;
	}
}
void Servicio::obtenerConversaciones() {
	Json::Value idsConversacionesValue = this->getParametroArray(
	keyIdConversaciones, keyDefault);
	vector<string> idsConversaciones = StringUtil::jsonValueToVector(
			idsConversacionesValue);

	string idUsuario = this->getParametroIdMetodoGET(
			urlBaseUsuarioConversaciones);

	Usuario* usuario = Usuario::obtenerPorTelefono(idUsuario);
	if (usuario->getId() != keyIdUsuarioNoEncontrado) {
		vector<string> idsConversacionesActuales =
				usuario->obtnerIdsConversaciones();
		vector<Conversacion*> nuevasConversaciones;

		for (unsigned i = 0; i < idsConversacionesActuales.size(); i++) {
			string idActual = idsConversacionesActuales[i];

			//Si no esta en las conversaciones que me llegan, quiere decir que es una nueva conversacion.
			//Tengo que enviarla al cliente
			if (!StringUtil::vectorContiene(idsConversaciones, idActual)) {
				Conversacion* nuevaConversacion = Conversacion::obtener(
						idActual);
				if (nuevaConversacion->getId()
						!= keyIdConversacionNoEncontrada) {
					nuevasConversaciones.push_back(nuevaConversacion);
				} else {
					Loger::getLoger()->warn(
							"La conversacion " + idActual
									+ " no se encuentra en el sistema");
				}
			}
		}

		Json::Value respuesta;

		for (unsigned i = 0; i < nuevasConversaciones.size(); i++) {
			Conversacion* conv = nuevasConversaciones[i];

			vector<Mensaje*> mens = conv->getMensajes();
			Mensaje* ultimoMensj = mens[mens.size() - 1];

			Usuario* usuarioContacto = conv->getUsuarios().at(0);
			if (usuarioContacto->getId() == usuario->getId()) {
				usuarioContacto = conv->getUsuarios().at(1);
			}

			respuesta["conversaciones"][i]["id"] = conv->getId();
			respuesta["conversaciones"][i]["ultimoMensaje"] =
					ultimoMensj->getCuerpo();
			respuesta["conversaciones"][i]["usuarioNombre"] =
					usuarioContacto->getNombre();
			respuesta["conversaciones"][i]["usuarioTelefono"] =
					usuarioContacto->getTelefono();
			respuesta["conversaciones"][i]["usuarioFotoDePerfil"] =
					usuarioContacto->getFotoDePerfil();

		}

		this->responder(respuesta.toStyledString(), true);

	} else {
		Loger::getLoger()->warn(
				"El usuario " + idUsuario + " no se encuentra en el sistema");
	}

}
/*
 * 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);
		}
	}

}
Example #10
0
void ComandosUsuario::altaReactivacionUsuario()
{
	IControladorUsuario* cUsuario = FabricaControladores::instancia()->controladorUsuario()->instancia();
	bool exito;
	Usuario* newUser;
	
	do
		
	{
		exito = true;
		string ci;
		cout << "Ingrese la Cedula de Identidad del Usuario (o presione q para salir): " << endl;
		cin >> ci;

		if (ci=="q")
			return;

		if (cUsuario->findUsuario(ci) != NULL)
		{
			cout << "El usuario ya existe en el sistema. " << endl;
			Usuario* usuario = cUsuario->findUsuario(ci);
			cout << "Nombre: "   << usuario->getNombre() << endl;
			cout << "Apellido: " << usuario->getApellido() << endl;
			if (usuario->getGenero() == Genero::femenino)
				cout << "Sexo: Femenino" << endl;
			else
			{
				if (usuario->getGenero() == Genero::indeterminado)
					cout << "Sexo: Indeterminado" << endl;
				else
					cout << "Sexo: Masculino" << endl;
			}		

			cout << "Edad: " << usuario->edad() << endl;
			
			vector<Rol> roles;
			for (vector<Rol>::iterator it = usuario->roles().begin(); it != usuario->roles().end(); ++it)
			{
				Rol rol = *it;
			if (rol == Rol::admin)
				cout << "Rol: Admin" << endl;

			if (rol == Rol::medico)
				cout << "Rol: Medico" << endl;

			if (rol == Rol::socio)
				cout << "Rol: Socio" << endl;

			if (rol == Rol::master)
				cout << "Rol: Master" << endl;			
			}
			
			if (usuario->estaActivo())
				cout << "Estado: Activo" << endl;
//				roles.insert(roles.begin(), rol);	
			else
			{
				cout << "Estado: Inactivo" << endl;
				cout << "¿Desea reactivar el usuario? (y/n)?" << endl;
				string reactivar;
				cin >> reactivar;
				if (reactivar=="y")
				{
					usuario->activar();
					cout << "El usuario ha sido reactivado." << endl;
				}
			}	
		}
		else
		{
			string nombre;
			string apellido;
			Fecha fechaNac;
			string gen;
			string r1, r2;
			Genero genero;
			Roles roles {};

			cout << "Ingrese el nombre del Usuario: " << endl;
			cin >> nombre;

			cout << "Ingrese el apellido del Usuario: " << endl;
			cin >> apellido;

			cout << "Ingrese el sexo (M/f): " << endl;
			cin >> gen;

			if (gen=="f")
				genero = Genero::femenino;
			else
				genero = Genero::masculino;

			int dia, mes, anyo;

			cout << "Ingrese el dia del nacimiento: " << endl;
			cin >> dia;
			cout << "Ingrese el mes del nacimiento: " << endl;
			cin >> mes;
			cout << "Ingrese el anyo del nacimiento: " << endl;
			cin >> anyo;

			fechaNac = Fecha(dia, mes, anyo);

			cout << "Ingrese el primer rol [a(dmin), m(edico), s(ocio)]: " << endl;
			cin >> r1;

			cout << "Ingrese el segundo rol (n para omitir): " << endl;
			cin >> r2;
			
			if (r1 == "a")
			{
				roles.push_back(Rol::admin);
			}
			else if (r1 == "m")
			{
				roles.push_back(Rol::medico);
			}
			else // socio por defecto
			{
				roles.push_back(Rol::socio);
			}
			
			if (r2 == "a")
			{
				if (r1 == "m")
				{
					cout << "Error, el usuario no puede ser medico y administrativo a la vez." << endl;
					exito = false;
				}
				else
					roles.push_back(Rol::admin);
			}
			else if (r2 == "m")
			{	if (r1 == "a")
				{
					cout << "Error, el usuario no puede ser medico y administrativo a la vez." << endl;
					exito = false;
				}
				else
					roles.push_back(Rol::medico);
			}
			else if (r2 != "n") // socio por defecto
			{
				roles.push_back(Rol::socio);
			}
			
			if (exito)
			{
				newUser = cUsuario->altaUsuario(ci, nombre, apellido, genero, fechaNac, roles);
				cout << "El usuario fue dado de alta con exito." << endl;
			}
			else
				cout << "Ocurrió un error imprevisto." << endl;
		}
	}