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);
}
}
}