Example #1
0
        public ActionResult Authenticate(SimpleLoginDto login)
        {
            try
            {
                var tipoCuenta = _tipoCuentaService.GetByCriteria(TipoCuentaCriteria.Create().EqualNombre(login.TipoCuenta));
                var user       = _service.GetByCriteria(UsuarioCriteria.Create().ByTelefono(login.Telefono));
                var cuentas    = _cuentaService.GetCollectionByCriteria(CuentaUsuarioCriteria.Create().ByIdUsuario(user.Id.Value));

                if (!cuentas.Any(item => item.IdTipoCuenta == tipoCuenta.Id && item.Password == StringHelper.GetSHA1(login.Password)))
                {
                    return(Unauthorized());
                }

                var token = JWTTokenGenerator.GenerateToken(login.Telefono);
                if (string.IsNullOrWhiteSpace(token))
                {
                    var error = new ValidationProblemDetails
                    {
                        Title  = "Error de autenticación",
                        Detail = "No se ha podido generar el token de autorización."
                    };
                    return(ValidationProblem(error));
                }

                return(Ok(new { token }));
            }catch
            {
                return(NoContent());
            }
        }
        public IActionResult Create(CuentaUsuarioDto cuentaUsuario)
        {
            try
            {
                if (cuentaUsuario.Usuario == null)
                {
                    throw new ArgumentException("La información para la cuenta de usuario está incompleta.");
                }

                var tiposCuenta = _tipoCuentaService.GetAll();
                if (!tiposCuenta.Any(item => item.Nombre.Equals("cliente", StringComparison.InvariantCultureIgnoreCase)))
                {
                    throw new ArgumentException("No se ha encontrado el tipo de cuenta de cliente.");
                }

                if (_usuarioService.GetByCriteria(UsuarioCriteria.Create().ByTelefono(cuentaUsuario.Usuario.Telefono)) != null)
                {
                    throw new Exception("El número telefónico proporcionado ya se encuentra registrado");
                }

                var cuenta = _mapper.Map <CuentaUsuario>(cuentaUsuario);
                cuenta.IdTipoCuenta = tiposCuenta.First(item => item.Nombre.Equals("cliente", StringComparison.InvariantCultureIgnoreCase)).Id;

                var imagen = new Imagen
                {
                    Image        = ImageConvertHelper.Base64ToByteArray(cuentaUsuario.Usuario.Imagen),
                    NombreImagen = cuentaUsuario.Usuario.NombreImagen
                };
                cuenta.Usuario.Imagen = imagen;

                var result = _cuentaUsuarioService.Create(cuenta);
                result.Usuario.Cuentas.Clear();
                return(Created("", result.Id));
            }
            catch (DbUpdateException ex)
            {
                var error = new ValidationProblemDetails
                {
                    Title  = "Error de creacion de cuenta",
                    Detail = (ex.InnerException as PostgresException).Detail
                };
                return(ValidationProblem(error));
            }
            catch (Exception ex)
            {
                var error = new ValidationProblemDetails
                {
                    Title  = "Error de creacion de cuenta",
                    Detail = ex.Message
                };
                return(ValidationProblem(error));
            }
        }
Example #3
0
        public IActionResult GetByTelefono(string numero)
        {
            try
            {
                var usuario = _usuarioService.GetByCriteria(UsuarioCriteria.Create().ByTelefono(numero));
                if (usuario == null)
                {
                    return(NoContent());
                }

                var cuentas = _cuentaUsuarioService.GetCollectionByCriteria(CuentaUsuarioCriteria.Create().ByIdUsuario(usuario.Id.Value));
                if (cuentas == null)
                {
                    return(NoContent());
                }

                var tiposCuenta   = _tipoCuentaService.GetAll();
                var tipoConductor = tiposCuenta.FirstOrDefault(tc => tc.Nombre.Equals("conductor", StringComparison.InvariantCultureIgnoreCase));

                if (tipoConductor == null)
                {
                    return(NoContent());
                }

                var cuenta = cuentas.FirstOrDefault(c => c.IdTipoCuenta == tipoConductor.Id);
                if (cuenta == null)
                {
                    return(NoContent());
                }

                return(Ok(new { cuenta.Id }));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }