107 lines
4.9 KiB
C#
107 lines
4.9 KiB
C#
using System.Collections.Generic;
|
|
using GraphQL.Resolvers;
|
|
using GraphQL.Types;
|
|
using xCommons.Extensions;
|
|
using xDataService.Providers;
|
|
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;
|
|
})
|
|
});
|
|
}
|
|
}
|
|
}
|
|
} |