using System; using GraphQL.Types; using xDataService.Db; using xDataService.GraphQL; using xDataService.Interfaces; using xDataService.Providers; using xModels.Base; namespace xDataService.Models { /// /// a Global non Generic Repository Descriptor ... /// public class XRepositoryDescriptor { /// /// Entity Key Type ... /// /// public Type Key { get; set; } = null; /// /// Entity Type ... /// /// public Type Entity { get; set; } = null; /// /// Context Type ... /// /// public Type Context { get; set; } = null; /// /// Graph Type Key ... /// /// public Type GraphTypeKey { get; set; } = null; /// /// Graph Type ... /// /// public Type GraphType { get; set; } = null; /// /// Entity Type GraphQL Schema ... /// /// public Type GraphSchema { get; set; } = null; /// /// Entity GraphQL Type Helper ... /// /// public Type GraphTypeHelperService { get; set; } = null; /// /// Entity GraphQL Type Helper ... /// /// public Type GraphTypeHelperImplementation { get; set; } = null; /// /// Entity GrapQL Query ... /// /// public Type GraphQuery { get; set; } = null; /// /// Repository Event Provider ... /// /// public Type EventsService { get; set; } = null; /// /// Repository Event Provider ... /// /// public Type EventsImplementation { get; set; } = null; /// /// Repository Key Generator for Entity ... /// /// public Type KeyGeneratorService { get; set; } = null; /// /// Repository Key Generator for Entity ... /// /// public Type KeyGeneratorImplementation { get; set; } = null; /// /// Repository Data Access Design Pattern ... /// /// public Type RepositoryService { get; set; } = null; /// /// Repository Data Access Design Pattern ... /// /// public Type RepositoryImplementation { get; set; } = null; /// /// Database Data Seeder ... /// public Type SeederService { get; set; } = null; /// /// Database Data Seeder ... /// public Type SeederImplementation { get; set; } = null; } /// /// a Repository Descriptor ... /// /// /// public class XRepositoryDescriptor : XRepositoryDescriptor where TEntity : XBaseEntity { public XRepositoryDescriptor() : base() { // Key = typeof(TKey); Entity = typeof(TEntity); } } /// /// a Repository Descriptor ... /// public class XRepositoryDescriptor< TEntity, TKey, TKeyGeneratorService, TKeyGeneratorImplementation > : XRepositoryDescriptor where TEntity : XBaseEntity where TKeyGeneratorService : IXKeyGenerator where TKeyGeneratorImplementation : XKeyGenerator { public XRepositoryDescriptor() : base() { // KeyGeneratorService = typeof(TKeyGeneratorService); KeyGeneratorImplementation = typeof(TKeyGeneratorImplementation); } } /// /// a Repository Descriptor ... /// public class XRepositoryDescriptor< TEntity, TKey, TKeyGeneratorService, TKeyGeneratorImplementation, TEventsService, TEventsImplementation > : XRepositoryDescriptor< TEntity, TKey, TKeyGeneratorService, TKeyGeneratorImplementation > where TEntity : XBaseEntity where TEventsService : IXBaseRepositoryEvents where TKeyGeneratorService : IXKeyGenerator where TEventsImplementation : XBaseRepositoryEvents where TKeyGeneratorImplementation : XKeyGenerator { public XRepositoryDescriptor() : base() { // EventsService = typeof(TEventsService); EventsImplementation = typeof(TEventsImplementation); } } /// /// a Repository Descriptor ... /// public class XRepositoryDescriptor< TEntity, TKey, TKeyGeneratorService, TKeyGeneratorImplementation, TEventsService, TEventsImplementation, TGraph, TGraphKey, TGraphQuery, TGraphTypeHelperService, TGraphTypeHelperImplementation, TGraphSchema > : XRepositoryDescriptor< TEntity, TKey, TKeyGeneratorService, TKeyGeneratorImplementation, TEventsService, TEventsImplementation > where TGraphSchema : Schema where TGraphKey : IGraphType where TEntity : XBaseEntity where TGraph : XBaseGraphObjectType where TEventsService : IXBaseRepositoryEvents where TKeyGeneratorService : IXKeyGenerator where TEventsImplementation : XBaseRepositoryEvents where TKeyGeneratorImplementation : XKeyGenerator where TGraphTypeHelperService : IXBaseGraphQLTypeHelper where TGraphQuery : XBaseGraphQLQuery where TGraphTypeHelperImplementation : XBaseGraphQLTypeHelper { public XRepositoryDescriptor() : base() { // GraphType = typeof(TGraph); GraphTypeKey = typeof(TGraphKey); GraphQuery = typeof(TGraphQuery); GraphSchema = typeof(TGraphSchema); GraphTypeHelperService = typeof(TGraphTypeHelperService); GraphTypeHelperImplementation = typeof(TGraphTypeHelperImplementation); } } /// /// a Repository Descriptor ... /// public class XInMemoryRepositoryDescriptor< TEntity, TKey, TKeyGeneratorService, TKeyGeneratorImplementation, TEventsService, TEventsImplementation, TGraph, TGraphKey, TGraphQuery, TGraphTypeHelperService, TGraphTypeHelperImplementation, TGraphSchema, TRepositoryService, TRepositoryImplementation > : XRepositoryDescriptor< TEntity, TKey, TKeyGeneratorService, TKeyGeneratorImplementation, TEventsService, TEventsImplementation, TGraph, TGraphKey, TGraphQuery, TGraphTypeHelperService, TGraphTypeHelperImplementation, TGraphSchema > where TGraphSchema : Schema where TGraphKey : IGraphType where TEntity : XBaseEntity where TGraph : XBaseGraphObjectType where TEventsService : IXBaseRepositoryEvents where TKeyGeneratorService : IXKeyGenerator where TRepositoryService : IXBaseRepository where TEventsImplementation : XBaseRepositoryEvents where TKeyGeneratorImplementation : XKeyGenerator where TGraphTypeHelperService : IXBaseGraphQLTypeHelper where TRepositoryImplementation : XBaseInMemoryRepository where TGraphQuery : XBaseGraphQLQuery where TGraphTypeHelperImplementation : XBaseGraphQLTypeHelper { public XInMemoryRepositoryDescriptor() : base() { // RepositoryService = typeof(TRepositoryService); RepositoryImplementation = typeof(TRepositoryImplementation); } } /// /// a Repository Descriptor ... /// public class XInMemoryRepositoryDescriptor< TEntity, TKey, TKeyGeneratorService, TKeyGeneratorImplementation, TEventsService, TEventsImplementation, TGraph, TGraphKey, TGraphQuery, TGraphTypeHelperService, TGraphTypeHelperImplementation, TGraphSchema, TRepositoryService, TRepositoryImplementation, TSeederService, TSeederImplementation > : XRepositoryDescriptor< TEntity, TKey, TKeyGeneratorService, TKeyGeneratorImplementation, TEventsService, TEventsImplementation, TGraph, TGraphKey, TGraphQuery, TGraphTypeHelperService, TGraphTypeHelperImplementation, TGraphSchema > where TGraphSchema : Schema where TGraphKey : IGraphType where TEntity : XBaseEntity where TGraph : XBaseGraphObjectType where TSeederService : IXBaseDbSeeder where TEventsService : IXBaseRepositoryEvents where TKeyGeneratorService : IXKeyGenerator where TRepositoryService : IXBaseRepository where TSeederImplementation : XBaseDbSeeder where TEventsImplementation : XBaseRepositoryEvents where TKeyGeneratorImplementation : XKeyGenerator where TGraphTypeHelperService : IXBaseGraphQLTypeHelper where TRepositoryImplementation : XBaseInMemoryRepository where TGraphQuery : XBaseGraphQLQuery where TGraphTypeHelperImplementation : XBaseGraphQLTypeHelper { public XInMemoryRepositoryDescriptor() : base() { // SeederService = typeof(TSeederService); SeederImplementation = typeof(TSeederImplementation); // RepositoryService = typeof(TRepositoryService); RepositoryImplementation = typeof(TRepositoryImplementation); } } /// /// a Repository Descriptor ... /// public class XMongoRepositoryDescriptor< TEntity, TKey, TKeyGeneratorService, TKeyGeneratorImplementation, TEventsService, TEventsImplementation, TGraph, TGraphKey, TGraphQuery, TGraphTypeHelperService, TGraphTypeHelperImplementation, TGraphSchema, TRepositoryService, TRepositoryImplementation > : XRepositoryDescriptor< TEntity, TKey, TKeyGeneratorService, TKeyGeneratorImplementation, TEventsService, TEventsImplementation, TGraph, TGraphKey, TGraphQuery, TGraphTypeHelperService, TGraphTypeHelperImplementation, TGraphSchema > where TGraphSchema : Schema where TGraphKey : IGraphType where TEntity : XBaseEntity where TGraph : XBaseGraphObjectType where TEventsService : IXBaseRepositoryEvents where TKeyGeneratorService : IXKeyGenerator where TRepositoryService : IXBaseRepository where TEventsImplementation : XBaseRepositoryEvents where TKeyGeneratorImplementation : XKeyGenerator where TRepositoryImplementation : XBaseMongoRepository where TGraphTypeHelperService : IXBaseGraphQLTypeHelper where TGraphQuery : XBaseGraphQLQuery where TGraphTypeHelperImplementation : XBaseGraphQLTypeHelper { public XMongoRepositoryDescriptor() : base() { // RepositoryService = typeof(TRepositoryService); RepositoryImplementation = typeof(TRepositoryImplementation); } } /// /// a Repository Descriptor ... /// public class XMongoRepositoryDescriptor< TEntity, TKey, TKeyGeneratorService, TKeyGeneratorImplementation, TEventsService, TEventsImplementation, TGraph, TGraphKey, TGraphQuery, TGraphTypeHelperService, TGraphTypeHelperImplementation, TGraphSchema, TRepositoryService, TRepositoryImplementation, TSeederService, TSeederImplementation > : XRepositoryDescriptor< TEntity, TKey, TKeyGeneratorService, TKeyGeneratorImplementation, TEventsService, TEventsImplementation, TGraph, TGraphKey, TGraphQuery, TGraphTypeHelperService, TGraphTypeHelperImplementation, TGraphSchema > where TGraphSchema : Schema where TGraphKey : IGraphType where TEntity : XBaseEntity where TGraph : XBaseGraphObjectType where TSeederService : IXBaseDbSeeder where TEventsService : IXBaseRepositoryEvents where TSeederImplementation : XBaseDbSeeder where TKeyGeneratorService : IXKeyGenerator where TRepositoryService : IXBaseRepository where TEventsImplementation : XBaseRepositoryEvents where TKeyGeneratorImplementation : XKeyGenerator where TRepositoryImplementation : XBaseMongoRepository where TGraphTypeHelperService : IXBaseGraphQLTypeHelper where TGraphQuery : XBaseGraphQLQuery where TGraphTypeHelperImplementation : XBaseGraphQLTypeHelper { public XMongoRepositoryDescriptor() : base() { // SeederService = typeof(TSeederService); SeederImplementation = typeof(TSeederImplementation); // RepositoryService = typeof(TRepositoryService); RepositoryImplementation = typeof(TRepositoryImplementation); } } /// /// a Repository Descriptor ... /// public class XEFRepositoryDescriptor< TEntity, TKey, TKeyGeneratorService, TKeyGeneratorImplementation, TEventsService, TEventsImplementation, TGraph, TGraphKey, TGraphQuery, TGraphTypeHelperService, TGraphTypeHelperImplementation, TGraphSchema, TRepositoryService, TRepositoryImplementation, TContext > : XRepositoryDescriptor< TEntity, TKey, TKeyGeneratorService, TKeyGeneratorImplementation, TEventsService, TEventsImplementation, TGraph, TGraphKey, TGraphQuery, TGraphTypeHelperService, TGraphTypeHelperImplementation, TGraphSchema > where TGraphSchema : Schema where TContext : XDbContext where TGraphKey : IGraphType where TEntity : XBaseEntity where TGraph : XBaseGraphObjectType where TEventsService : IXBaseRepositoryEvents where TKeyGeneratorService : IXKeyGenerator where TRepositoryService : IXBaseRepository where TEventsImplementation : XBaseRepositoryEvents where TKeyGeneratorImplementation : XKeyGenerator where TGraphTypeHelperService : IXBaseGraphQLTypeHelper where TGraphQuery : XBaseGraphQLQuery where TRepositoryImplementation : XBaseEFRepository where TGraphTypeHelperImplementation : XBaseGraphQLTypeHelper { public XEFRepositoryDescriptor() : base() { // Context = typeof(TContext); RepositoryService = typeof(TRepositoryService); RepositoryImplementation = typeof(TRepositoryImplementation); } } /// /// a Repository Descriptor ... /// public class XEFRepositoryDescriptor< TEntity, TKey, TKeyGeneratorService, TKeyGeneratorImplementation, TEventsService, TEventsImplementation, TGraph, TGraphKey, TGraphQuery, TGraphTypeHelperService, TGraphTypeHelperImplementation, TGraphSchema, TRepositoryService, TRepositoryImplementation, TContext, TSeederService, TSeederImplementation > : XRepositoryDescriptor< TEntity, TKey, TKeyGeneratorService, TKeyGeneratorImplementation, TEventsService, TEventsImplementation, TGraph, TGraphKey, TGraphQuery, TGraphTypeHelperService, TGraphTypeHelperImplementation, TGraphSchema > where TGraphSchema : Schema where TContext : XDbContext where TGraphKey : IGraphType where TEntity : XBaseEntity where TGraph : XBaseGraphObjectType where TSeederService : IXBaseDbSeeder where TEventsService : IXBaseRepositoryEvents where TSeederImplementation : XBaseDbSeeder where TKeyGeneratorService : IXKeyGenerator where TRepositoryService : IXBaseRepository where TEventsImplementation : XBaseRepositoryEvents where TKeyGeneratorImplementation : XKeyGenerator where TGraphTypeHelperService : IXBaseGraphQLTypeHelper where TGraphQuery : XBaseGraphQLQuery where TRepositoryImplementation : XBaseEFRepository where TGraphTypeHelperImplementation : XBaseGraphQLTypeHelper { public XEFRepositoryDescriptor() : base() { // SeederService = typeof(TSeederService); SeederImplementation = typeof(TSeederImplementation); // Context = typeof(TContext); RepositoryService = typeof(TRepositoryService); RepositoryImplementation = typeof(TRepositoryImplementation); } } }