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); } }
public DatabaseMetadata(DbContext dbContext, ITableNameLookup tableNameLookup) { _dbContext = dbContext; _tableNameLookup = tableNameLookup; _databaseName = _dbContext.Database.GetDbConnection().Database; if (_tables == null) { ReloadMetadata(); } }
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(); } }
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 ) }); } }
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) }); } }
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" } ), }); } }