public async Task <IActionResult> CrearMensaje(int usuarioId, MensajeACrearDto mensajeACrearDto)
        {
            if (usuarioId != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
            {
                return(Unauthorized());
            }

            mensajeACrearDto.RemitenteId = usuarioId;

            var receptor = await _coderos.ObtenerUsuario(mensajeACrearDto.ReceptorId);

            if (receptor == null)
            {
                return(BadRequest("No se pudo encontrar al usuario."));
            }

            var mensaje = _mapper.Map <Mensaje> (mensajeACrearDto);

            _coderos.Agregar <Mensaje> (mensaje);

            var mensajeARetornar = _mapper.Map <MensajeACrearDto> (mensaje);

            if (await _coderos.Guardar())
            {
                return(CreatedAtRoute("ObtenerMensaje",
                                      new { id = mensaje.Id }, mensajeARetornar));
            }

            throw new Exception("Error al enviar el mensaje");
        }
        public async Task <IActionResult> AgregarImagen(int usuarioId, [FromForm] ImagenACrearDto imagenACrearDto)
        {
            if (usuarioId != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
            {
                return(Unauthorized());
            }

            var usuarioDeRepo = await _repo.ObtenerUsuario(usuarioId);

            var file             = imagenACrearDto.File;
            var subidaResultados = new ImageUploadResult();

            if (file.Length > 0)
            {
                using (var stream = file.OpenReadStream()) {
                    var parametrosDeSubida = new ImageUploadParams()
                    {
                        File           = new FileDescription(file.Name, stream),
                        Transformation = new Transformation().Width(500).Height(500)
                                         .Crop("fill").Gravity("face")
                    };

                    subidaResultados = cloudinary.Upload(parametrosDeSubida);
                }
            }

            imagenACrearDto.Url       = subidaResultados.Uri.ToString();
            imagenACrearDto.IdPublica = subidaResultados.PublicId;

            var imagen = _mapper.Map <Imagen> (imagenACrearDto);

            if (!usuarioDeRepo.Imagenes.Any(img => img.DePerfil))
            {
                imagen.DePerfil = true;
            }

            usuarioDeRepo.Imagenes.Add(imagen);

            if (await _repo.Guardar())
            {
                var ImagenARetornarDto = _mapper.Map <ImagenARetornarDto> (imagen);
                return(CreatedAtRoute("ObtenerImagen",
                                      new { id = imagen.Id }, ImagenARetornarDto));
            }

            return(BadRequest("No se pudo añadir la imagen"));
        }
        public async Task <IActionResult> ObtenerUsuarios([FromQuery] UsuarioParams usuarioParams)
        {
            var usuarioActualId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value);

            var usuarioDelRepo = await _coderos.ObtenerUsuario(usuarioActualId);

            usuarioParams.UsuarioId = usuarioActualId;

            if (string.IsNullOrEmpty(usuarioParams.Genero))
            {
                usuarioParams.Genero = usuarioDelRepo.Genero == "masculino" ?  "Femenino" : "masculino";
            }

            var usuarios = await _coderos.ObtenerUsuarios(usuarioParams);

            var usuariosARetornar = _mapper.Map <IEnumerable <UsuarioListaDto> > (usuarios);

            Response.AgregarPaginacion(usuarios.PaginaActual, usuarios.TamanoPagina, usuarios.ConteoTotal,
                                       usuarios.PaginasTotales);

            return(Ok(usuariosARetornar));
        }