Beispiel #1
0
        public TableType(
            TableMetadata mainTable,
            IDatabaseMetadata dbMetadata,
            ITableNameLookup tableNameLookup,
            IHttpContextAccessor httpContextAccessor,
            IDataLoaderContextAccessor accessor,
            IOptionsMonitor <SERGraphQlOptions> optionsDelegate)
        {
            _tableNameLookup     = tableNameLookup;
            _dbMetadata          = dbMetadata;
            _accessor            = accessor;
            _httpContextAccessor = httpContextAccessor;
            _optionsDelegate     = optionsDelegate;

            var permission        = mainTable.Type.Name.ToLower();
            var friendlyTableName = _tableNameLookup.GetFriendlyName(mainTable.Type.Name.ToSnakeCase());

            this.ValidateCUDPermissions(permission);
            this.ValidatePermissions(permission, friendlyTableName, mainTable.Type, _optionsDelegate);

            Name = mainTable.TableName;

            foreach (var mainTableColumn in mainTable.Columns)
            {
                InitMainGraphTableColumn(mainTable.Type, mainTableColumn);
            }
        }
        public SumTableType(
            IDatabaseMetadata dbMetadata,
            TableMetadata mainTable,
            ITableNameLookup tableNameLookup,
            IOptionsMonitor <SERGraphQlOptions> optionsDelegate)
        {
            _tableNameLookup = tableNameLookup;
            _dbMetadata      = dbMetadata;
            _optionsDelegate = optionsDelegate;

            var permission        = mainTable.Type.Name.ToLower();
            var friendlyTableName = _tableNameLookup.GetFriendlyName(mainTable.Type.Name.ToSnakeCase());

            this.ValidatePermissions(permission, friendlyTableName, mainTable.Type, _optionsDelegate);
            // this.RequireAuthentication();

            Name = mainTable.TableName + "_sum";

            Field(
                typeof(DecimalGraphType),
                "response_sum"
                );

            foreach (var mainTableColumn in mainTable.Columns)
            {
                InitMainGraphTableColumn(mainTableColumn);
            }
        }
Beispiel #3
0
 public DatabaseMetadata(DbContext dbContext, ITableNameLookup tableNameLookup)
 {
     _dbContext       = dbContext;
     _tableNameLookup = tableNameLookup;
     _databaseName    = _dbContext.Database.GetDbConnection().Database;
     if (_tables == null)
     {
         ReloadMetadata();
     }
 }
Beispiel #4
0
        public GenericInputType(TableMetadata metaTable, IDatabaseMetadata dbMetadata, ITableNameLookup tableNameLookup, IOptionsMonitor <SERGraphQlOptions> optionsDelegate)
        {
            _dbMetadata      = dbMetadata;
            _tableNameLookup = tableNameLookup;
            _optionsDelegate = optionsDelegate;

            Name = $"{metaTable.Type.Name.ToLower().ToSnakeCase()}_input";
            foreach (var tableColumn in metaTable.Columns)
            {
                InitGraphTableColumn(tableColumn, metaTable.Type);
            }
        }
 public DatabaseMetadata(
     ITableNameLookup tableNameLookup,
     IConfiguration config,
     IOptionsMonitor <SERGraphQlOptions> optionsDelegate)
 {
     _config          = config;
     _tableNameLookup = tableNameLookup;
     _optionsDelegate = optionsDelegate;
     if (_tables == null || !_tables.Any())
     {
         ReloadMetadata();
     }
 }
Beispiel #6
0
        public GraphQLQuery(
            DbContext dbContext,
            IDatabaseMetadata dbMetadata,
            ITableNameLookup tableNameLookup)
        {
            _dbMetadata      = dbMetadata;
            _tableNameLookup = tableNameLookup;
            _dbContext       = dbContext;

            Name = "Query";

            foreach (var metaTable in _dbMetadata.GetTableMetadatas())
            {
                var tableType         = new TableType(metaTable);
                var friendlyTableName = _tableNameLookup.GetFriendlyName(metaTable.TableName);

                AddField(new FieldType
                {
                    Name         = friendlyTableName,
                    Type         = tableType.GetType(),
                    ResolvedType = tableType,
                    Resolver     = new MyFieldResolver(metaTable, _dbContext),
                    Arguments    = new QueryArguments(
                        tableType.TableArgs
                        )
                });

                // lets add key to get list of current table
                var listType = new ListGraphType(tableType);
                AddField(new FieldType
                {
                    Name         = $"{friendlyTableName}_list",
                    Type         = listType.GetType(),
                    ResolvedType = listType,
                    Resolver     = new MyFieldResolver(metaTable, _dbContext),
                    Arguments    = new QueryArguments(
                        tableType.TableArgs
                        )
                });
            }
        }
Beispiel #7
0
        public GraphQLQuery(
            DbContext dbContext,
            IDatabaseMetadata dbMetadata,
            ITableNameLookup tableNameLookup)
        {
            _dbMetadata      = dbMetadata;
            _tableNameLookup = tableNameLookup;
            _dbContext       = dbContext;
            Name             = "Query";
            var assem = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(a => a.ManifestModule.Name == "Mix.Cms.Lib.dll");

            foreach (var metaTable in _dbMetadata.GetTableMetadatas())
            {
                var type              = assem.GetType(metaTable.AssemblyFullName);
                var tableType         = new TableType(metaTable, type);
                var friendlyTableName = metaTable.TableName;
                // _tableNameLookup.GetFriendlyName(metaTable.TableName);
                AddField(new FieldType
                {
                    Name         = friendlyTableName,
                    Type         = tableType.GetType(),
                    ResolvedType = tableType,
                    Resolver     = new MyFieldResolver(metaTable, _dbContext),
                    Arguments    = new QueryArguments(tableType.TableArgs)
                });
                // lets add key to get list of current table
                var listType = new ListGraphType(tableType);
                AddField(new FieldType
                {
                    Name         = $"{friendlyTableName}_list",
                    Type         = listType.GetType(),
                    ResolvedType = listType,
                    Resolver     = new MyFieldResolver(metaTable, _dbContext),
                    Arguments    = new QueryArguments(
                        tableType.TableArgs
                        )
                });
            }
        }
        public GraphQLQuery(
            IDatabaseMetadata dbMetadata,
            ITableNameLookup tableNameLookup,
            IHttpContextAccessor httpContextAccessor,
            FillDataExtensions fillDataExtensions,
            IDataLoaderContextAccessor accessor,
            ISERFieldResolver <TUser, TRole, TUserRole> fieldResolver,
            IOptionsMonitor <SERGraphQlOptions> optionsDelegate
            )
        {
            _dbMetadata          = dbMetadata;
            _tableNameLookup     = tableNameLookup;
            _httpContextAccessor = httpContextAccessor;
            _fillDataExtensions  = fillDataExtensions;
            _accessor            = accessor;
            _optionsDelegate     = optionsDelegate;
            _fieldResolver       = fieldResolver;

            Name = "Query";
            var tables = _dbMetadata.GetTableMetadatas();

            foreach (var metaTable in tables)
            {
                var friendlyTableName = metaTable.Type.Name.ToSnakeCase().ToLower();

                dynamic objectGraphType = null;
                if (!_tableNameLookup.ExistGraphType(metaTable.Type.Name))
                {
                    var inherateType = typeof(TableType <>).MakeGenericType(new Type[] { metaTable.Type });
                    objectGraphType = Activator.CreateInstance(inherateType, new object[] { metaTable,
                                                                                            _dbMetadata, _tableNameLookup, _httpContextAccessor, _accessor, _optionsDelegate });
                }

                var tableType = _tableNameLookup.GetOrInsertGraphType(metaTable.Type.Name, objectGraphType);

                dynamic objectCountGraphType = null;
                if (!_tableNameLookup.ExistGraphType($"{metaTable.Type.Name}_count"))
                {
                    var inherateType = typeof(CountTableType <>).MakeGenericType(new Type[] { metaTable.Type });
                    objectCountGraphType = Activator.CreateInstance(inherateType, new object[] { _dbMetadata, metaTable, _tableNameLookup, _optionsDelegate });
                }

                var countTableType = _tableNameLookup.GetOrInsertGraphType($"{metaTable.Type.Name}_count", objectCountGraphType);

                dynamic objectSumGraphType = null;
                if (!_tableNameLookup.ExistGraphType($"{metaTable.Type.Name}_sum_plus"))
                {
                    var inherateType = typeof(SumTableType <>).MakeGenericType(new Type[] { metaTable.Type });
                    objectSumGraphType = Activator.CreateInstance(inherateType, new object[] { _dbMetadata, metaTable, _tableNameLookup, _optionsDelegate });
                }
                var sumTableType = _tableNameLookup.GetOrInsertGraphType($"{metaTable.Type.Name}_sum_plus", objectSumGraphType);
                var ttype        = typeof(TableType <>).MakeGenericType(new Type[] { metaTable.Type });

                AddField(new FieldType
                {
                    Name         = friendlyTableName,
                    Type         = tableType.GetType(),
                    ResolvedType = tableType,
                    Resolver     = _fieldResolver, // new MyFieldResolver<TUser, TRole, TUserRole>(_fillDataExtensions, _httpContextAccessor),
                    Arguments    = new QueryArguments(tableType.TableArgs)
                });

                var     inherateListType = typeof(ListGraphType <>).MakeGenericType(new Type[] { tableType.GetType() });
                dynamic listType         = Activator.CreateInstance(inherateListType);
                listType.ResolvedType = tableType;

                AddField(new FieldType
                {
                    Name         = $"{friendlyTableName}_list",
                    Type         = listType.GetType(),
                    ResolvedType = listType,
                    Resolver     = _fieldResolver,
                    Arguments    = new QueryArguments(tableType.TableArgs)
                });

                AddField(new FieldType
                {
                    Name         = $"{friendlyTableName}_count",
                    Type         = countTableType.GetType(),
                    ResolvedType = countTableType,
                    Resolver     = _fieldResolver,
                    Arguments    = new QueryArguments(countTableType.TableArgs)
                });

                AddField(new FieldType
                {
                    Name         = $"{friendlyTableName}_sum",
                    Type         = ttype,
                    ResolvedType = sumTableType,
                    Resolver     = _fieldResolver,
                    Arguments    = new QueryArguments(sumTableType.TableArgs)
                });
            }
        }
        public AppMutation(
            IDatabaseMetadata dbMetadata,
            ITableNameLookup tableNameLookup,
            IHttpContextAccessor httpContextAccessor,
            IOptionsMonitor <SERGraphQlOptions> optionsDelegate,
            IDataLoaderContextAccessor accessor
            )
        {
            _dbMetadata          = dbMetadata;
            _httpContextAccessor = httpContextAccessor;
            _tableNameLookup     = tableNameLookup;
            _optionsDelegate     = optionsDelegate;
            _accessor            = accessor;

            this.RequireAuthentication();
            Name = "Mutation";

            foreach (var metaTable in _dbMetadata.GetTableMetadatas())
            {
                if (metaTable.Type == _optionsDelegate.CurrentValue.UserType ||
                    metaTable.Type == _optionsDelegate.CurrentValue.RoleType ||
                    metaTable.Type == _optionsDelegate.CurrentValue.UserRoleType)
                {
                    continue;
                }

                var type = metaTable.Type;
                var friendlyTableName = type.Name.ToLower().ToSnakeCase();

                var     genericInputType = new GenericInputType(metaTable, _dbMetadata, _tableNameLookup, _optionsDelegate);
                dynamic objectGraphType  = null;
                if (!_tableNameLookup.ExistGraphType(metaTable.Type.Name))
                {
                    var inherateType = typeof(TableType <>).MakeGenericType(new Type[] { metaTable.Type });
                    objectGraphType = Activator.CreateInstance(inherateType, new object[] { metaTable,
                                                                                            _dbMetadata, _tableNameLookup, _httpContextAccessor, _accessor, _optionsDelegate });
                }

                var tableType = _tableNameLookup.GetOrInsertGraphType(metaTable.Type.Name, objectGraphType);

                AddField(new FieldType
                {
                    Name         = $"create_{friendlyTableName}",
                    Type         = tableType.GetType(),
                    ResolvedType = tableType,
                    Resolver     = new CUDResolver(type, _httpContextAccessor),
                    Arguments    = new QueryArguments(
                        new QueryArgument(typeof(InputObjectGraphType))
                    {
                        Name = friendlyTableName, ResolvedType = genericInputType
                    },
                        new QueryArgument <BooleanGraphType> {
                        Name = "sendObjFirebase"
                    }
                        ),
                });

                AddField(new FieldType
                {
                    Name         = $"update_{friendlyTableName}",
                    Type         = tableType.GetType(),
                    ResolvedType = tableType,
                    Resolver     = new CUDResolver(type, _httpContextAccessor),
                    Arguments    = new QueryArguments(
                        new QueryArgument(typeof(InputObjectGraphType))
                    {
                        Name = friendlyTableName, ResolvedType = genericInputType
                    },
                        new QueryArgument <NonNullGraphType <IdGraphType> > {
                        Name = "id"
                    },
                        new QueryArgument <BooleanGraphType> {
                        Name = "sendObjFirebase"
                    }
                        )
                });

                AddField(new FieldType
                {
                    Name         = $"delete_{friendlyTableName}",
                    Type         = tableType.GetType(),
                    ResolvedType = tableType,
                    Arguments    = new QueryArguments(
                        new QueryArgument <NonNullGraphType <IdGraphType> > {
                        Name = $"{friendlyTableName}Id"
                    },
                        new QueryArgument <BooleanGraphType> {
                        Name = "sendObjFirebase"
                    }),
                    Resolver = new CUDResolver(type, _httpContextAccessor)
                });
            }
        }
Beispiel #10
0
        public AppSubscriptions(
            IDatabaseMetadata dbMetadata,
            ITableNameLookup tableNameLookup,
            IHttpContextAccessor httpContextAccessor,
            IOptionsMonitor <SERGraphQlOptions> optionsDelegate,
            IDataLoaderContextAccessor accessor
            )
        {
            _dbMetadata          = dbMetadata;
            _httpContextAccessor = httpContextAccessor;
            _tableNameLookup     = tableNameLookup;
            _optionsDelegate     = optionsDelegate;
            _accessor            = accessor;

            this.RequireAuthentication();
            Name = "subscription";

            foreach (var metaTable in _dbMetadata.GetTableMetadatas())
            {
                if (metaTable.Type == _optionsDelegate.CurrentValue.UserType ||
                    metaTable.Type == _optionsDelegate.CurrentValue.RoleType ||
                    metaTable.Type == _optionsDelegate.CurrentValue.UserRoleType)
                {
                    continue;
                }

                var type = metaTable.Type;
                var friendlyTableName = type.Name.ToLower().ToSnakeCase();

                dynamic objectGraphType = null;
                if (!_tableNameLookup.ExistGraphType(metaTable.Type.Name))
                {
                    var inherateType = typeof(TableType <>).MakeGenericType(new Type[] { metaTable.Type });
                    objectGraphType = Activator.CreateInstance(inherateType, new object[] { metaTable,
                                                                                            _dbMetadata, _tableNameLookup, _httpContextAccessor, _accessor, _optionsDelegate });
                }

                var tableType = _tableNameLookup.GetOrInsertGraphType(metaTable.Type.Name, objectGraphType);

                var     inherateResolverType = typeof(AppFuncFieldResolver <>).MakeGenericType(new Type[] { metaTable.Type });
                dynamic funcFieldResolver    = Activator.CreateInstance(inherateResolverType);

                var     inherateEventStreamType = typeof(AppEventStreamResolver <>).MakeGenericType(new Type[] { metaTable.Type });
                dynamic eventStreamResolver     = Activator.CreateInstance(inherateEventStreamType, new object[] { _httpContextAccessor });

                AddField(new EventStreamFieldType
                {
                    Name         = $"subsciption_{friendlyTableName}",
                    Type         = tableType.GetType(),
                    ResolvedType = tableType,
                    Resolver     = funcFieldResolver,
                    Subscriber   = eventStreamResolver,
                    Arguments    = new QueryArguments(
                        new QueryArgument <StringGraphType> {
                        Name = "field"
                    },
                        new QueryArgument <IntGraphType> {
                        Name = "value"
                    },
                        new QueryArgument <StringGraphType> {
                        Name = "string_value"
                    }
                        ),
                });
            }
        }