Initial Commit ...
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
using System.Collections.Generic;
|
||||
using GraphQL.Resolvers;
|
||||
using GraphQL.Types;
|
||||
using xCommons.Extensions;
|
||||
using xDataService.Events;
|
||||
using xDataService.Interfaces;
|
||||
using xDataService.Models;
|
||||
using xModels.Base;
|
||||
|
||||
namespace xDataService.GraphQL {
|
||||
public abstract class XBaseGraphQLSubscription<TEntity, TKey, TGraph> : ObjectGraphType
|
||||
where TGraph : IGraphType
|
||||
where TEntity : XBaseEntity<TKey> {
|
||||
public XBaseGraphQLSubscription (IXBaseRepositoryEvents<TEntity> eventProvider = null) {
|
||||
//
|
||||
Name = GetType ().Name;
|
||||
|
||||
//
|
||||
// Check if base repository patter registered ...
|
||||
if (!eventProvider.IsNull ()) {
|
||||
//
|
||||
// Add ...
|
||||
AddField (new EventStreamFieldType {
|
||||
//
|
||||
Name = nameof (XBaseRepositoryEvents<TEntity>.AddEvent),
|
||||
Type = typeof (XBaseGraphQLEventType<TEntity, TKey, TGraph>),
|
||||
Resolver = new FuncFieldResolver<XBaseEventModel<TEntity>> (
|
||||
context => context.Source as XBaseEventModel<TEntity>
|
||||
),
|
||||
Subscriber = new EventStreamResolver<XBaseEventModel<TEntity>> (context => {
|
||||
return eventProvider.OnAddObservable;
|
||||
})
|
||||
});
|
||||
|
||||
//
|
||||
// Add Many ...
|
||||
AddField (new EventStreamFieldType {
|
||||
//
|
||||
Name = nameof (XBaseRepositoryEvents<TEntity>.AddManyEvent),
|
||||
Type = typeof (XBaseGraphQLEventType<TEntity, TKey, TGraph>),
|
||||
Resolver = new FuncFieldResolver<XBaseEventModel<IEnumerable<TEntity>>> (
|
||||
context => context.Source as XBaseEventModel<IEnumerable<TEntity>>
|
||||
),
|
||||
Subscriber = new EventStreamResolver<XBaseEventModel<IEnumerable<TEntity>>> (context => {
|
||||
return eventProvider.OnAddManyObservable;
|
||||
})
|
||||
});
|
||||
|
||||
//
|
||||
// Update ...
|
||||
AddField (new EventStreamFieldType {
|
||||
//
|
||||
Name = nameof (XBaseRepositoryEvents<TEntity>.UpdateEvent),
|
||||
Type = typeof (XBaseGraphQLEventType<TEntity, TKey, TGraph>),
|
||||
Resolver = new FuncFieldResolver<XBaseEventModel<TEntity>> (
|
||||
context => context.Source as XBaseEventModel<TEntity>
|
||||
),
|
||||
Subscriber = new EventStreamResolver<XBaseEventModel<TEntity>> (context => {
|
||||
return eventProvider.OnUpdateObservable;
|
||||
})
|
||||
});
|
||||
|
||||
//
|
||||
// Update Mnay ...
|
||||
AddField (new EventStreamFieldType {
|
||||
//
|
||||
Name = nameof (XBaseRepositoryEvents<TEntity>.UpdateManyEvent),
|
||||
Type = typeof (XBaseGraphQLEventType<TEntity, TKey, TGraph>),
|
||||
Resolver = new FuncFieldResolver<XBaseEventModel<IEnumerable<TEntity>>> (
|
||||
context => context.Source as XBaseEventModel<IEnumerable<TEntity>>
|
||||
),
|
||||
Subscriber = new EventStreamResolver<XBaseEventModel<IEnumerable<TEntity>>> (context => {
|
||||
return eventProvider.OnUpdateManyObservable;
|
||||
})
|
||||
});
|
||||
|
||||
//
|
||||
// Remove ...
|
||||
AddField (new EventStreamFieldType {
|
||||
//
|
||||
Name = nameof (XBaseRepositoryEvents<TEntity>.RemoveEvent),
|
||||
Type = typeof (XBaseGraphQLEventType<TEntity, TKey, TGraph>),
|
||||
Resolver = new FuncFieldResolver<XBaseEventModel<TEntity>> (
|
||||
context => context.Source as XBaseEventModel<TEntity>
|
||||
),
|
||||
Subscriber = new EventStreamResolver<XBaseEventModel<TEntity>> (context => {
|
||||
return eventProvider.OnRemoveObservable;
|
||||
})
|
||||
});
|
||||
|
||||
//
|
||||
// Remove Many ...
|
||||
AddField (new EventStreamFieldType {
|
||||
//
|
||||
Name = nameof (XBaseRepositoryEvents<TEntity>.RemoveManyEvent),
|
||||
Type = typeof (XBaseGraphQLEventType<TEntity, TKey, TGraph>),
|
||||
Resolver = new FuncFieldResolver<XBaseEventModel<IEnumerable<TEntity>>> (
|
||||
context => context.Source as XBaseEventModel<IEnumerable<TEntity>>
|
||||
),
|
||||
Subscriber = new EventStreamResolver<XBaseEventModel<IEnumerable<TEntity>>> (context => {
|
||||
return eventProvider.OnRemoveManyObservable;
|
||||
})
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user