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> ActualizarUsuario(int id, UsuarioEdicionDto usuarioEdicionDto)
        {
            if (id != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
            {
                return(Unauthorized());
            }

            var usuarioRepo = await _coderos.ObtenerUsuario(id);

            _mapper.Map(usuarioEdicionDto, usuarioRepo);

            if (await _coderos.Guardar())
            {
                return(NoContent());
            }

            throw new Exception($"Error al actualizar usuario {id}");
        }