public AplicacionQuery consultarAplicacion(string idAplicacion)
        {
            AplicacionQuery appQ = null;

            try
            {
                Aplicacion app = _ufw.RepositoryQueryAplicacion().Find(new AplicacionSpecification(idAplicacion)).FirstOrDefault();

                if (app == null)
                {
                    throw new Exception("La aplicación es inválida");
                }

                appQ       = new AplicacionQuery();
                appQ.Roles = new List <RolQuery>();

                foreach (Rol r in app.Roles)
                {
                    RolQuery rolQ = new RolQuery();
                    rolQ.Id          = r.Id;
                    rolQ.Nombre      = r.Display;
                    rolQ.Descripcion = r.Descripcion;
                    appQ.Roles.Add(rolQ);
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            return(appQ);
        }
        public AplicacionQuery actualizarAplicacion(AplicacionCmd aplicacion)
        {
            AplicacionQuery app = null;

            try
            {
                throw new NotImplementedException();
            }
            catch (Exception e)
            {
                throw e;
            }

            return(app);
        }
        public AplicacionQuery registrarAplicacion(AplicacionCmd aplicacion)
        {
            AplicacionQuery      appQ      = null;
            AlgoritmoDeSeguridad algoritmo = null;

            try
            {
                if (aplicacion.EsValido())
                {
                    Aplicacion otherApp = _ufw.RepositoryQueryAplicacion().Find(new AplicacionSpecification(aplicacion.IdAplicacion)).FirstOrDefault();

                    if (otherApp == null)
                    {
                        if (aplicacion.PermiteJWT)
                        {
                            algoritmo = _ufw.RepositoryQueryAlgoritmo().Find(new AlgoritmoSpecification(aplicacion.AlgoritmoDeSeguridad)).FirstOrDefault();

                            if (algoritmo == null)
                            {
                                throw new Exception("El algoritmo es inválido");
                            }
                        }


                        Aplicacion app = new Aplicacion();
                        app.IdAplicacion         = aplicacion.IdAplicacion;
                        app.Nombre               = aplicacion.Nombre;
                        app.EmailContacto        = aplicacion.EmailContacto;
                        app.Estado               = true;
                        app.PermiteJWT           = aplicacion.PermiteJWT;
                        app.AlgoritmoDeSeguridad = aplicacion.AlgoritmoDeSeguridad;
                        app.LlaveSecreta         = aplicacion.LlaveSecreta;
                        app.MinutosDeVida        = aplicacion.MinutosDeVida;
                        app.FechaExpiracionLlave = aplicacion.FechaExpiracionLlave;
                        app.EstadoLlave          = (aplicacion.PermiteJWT && (aplicacion.LlaveSecreta != null)) ? true : false;

                        _ufw.BeginTransaction();
                        _ufw.RepositoryCommandAplicacion().Add(app);

                        foreach (RolQuery r in aplicacion.Roles)
                        {
                            _ufw.RoleIdentityRepository().CreateRoleAsync(aplicacion.IdAplicacion, r.Nombre, r.Nombre, r.Descripcion);
                        }

                        _ufw.SaveChanges();
                        _ufw.Commit();
                        app = _ufw.RepositoryQueryAplicacion().Find(new AplicacionSpecification(app.IdAplicacion)).FirstOrDefault();

                        appQ = new AplicacionQuery();
                        appQ.IdAplicacion         = app.IdAplicacion;
                        appQ.Nombre               = app.Nombre;
                        appQ.EmailContacto        = app.EmailContacto;
                        appQ.PermiteJWT           = app.PermiteJWT;
                        appQ.AlgoritmoDeSeguridad = app.AlgoritmoDeSeguridad;
                        appQ.NombreAlgoritmo      = (algoritmo != null) ? algoritmo.Valor : "";
                        appQ.LlaveSecreta         = app.LlaveSecreta;
                        appQ.MinutosDeVida        = app.MinutosDeVida;
                        appQ.FechaExpiracionLlave = app.FechaExpiracionLlave;
                        appQ.Roles = new List <RolQuery>();

                        foreach (Rol r in app.Roles)
                        {
                            RolQuery rolQ = new RolQuery();
                            rolQ.Id          = r.Id;
                            rolQ.Nombre      = r.Display;
                            rolQ.Descripcion = r.Descripcion;
                            appQ.Roles.Add(rolQ);
                        }
                    }
                    else
                    {
                        throw new Exception("Ya existe una Aplicación con ese Identificador");
                    }
                }
                else
                {
                    throw new Exception("La configuración es inválida");
                }
            }
            catch (Exception e)
            {
                _ufw.Rollback();
                throw e;
            }


            return(appQ);
        }