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 : ObjectGraphType where TGraph : IGraphType where TEntity : XBaseEntity { public XBaseGraphQLSubscription (IXBaseRepositoryEvents eventProvider = null) { // Name = GetType ().Name; // // Check if base repository patter registered ... if (!eventProvider.IsNull ()) { // // Add ... AddField (new EventStreamFieldType { // Name = nameof (XBaseRepositoryEvents.AddEvent), Type = typeof (XBaseGraphQLEventType), Resolver = new FuncFieldResolver> ( context => context.Source as XBaseEventModel ), Subscriber = new EventStreamResolver> (context => { return eventProvider.OnAddObservable; }) }); // // Add Many ... AddField (new EventStreamFieldType { // Name = nameof (XBaseRepositoryEvents.AddManyEvent), Type = typeof (XBaseGraphQLEventType), Resolver = new FuncFieldResolver>> ( context => context.Source as XBaseEventModel> ), Subscriber = new EventStreamResolver>> (context => { return eventProvider.OnAddManyObservable; }) }); // // Update ... AddField (new EventStreamFieldType { // Name = nameof (XBaseRepositoryEvents.UpdateEvent), Type = typeof (XBaseGraphQLEventType), Resolver = new FuncFieldResolver> ( context => context.Source as XBaseEventModel ), Subscriber = new EventStreamResolver> (context => { return eventProvider.OnUpdateObservable; }) }); // // Update Mnay ... AddField (new EventStreamFieldType { // Name = nameof (XBaseRepositoryEvents.UpdateManyEvent), Type = typeof (XBaseGraphQLEventType), Resolver = new FuncFieldResolver>> ( context => context.Source as XBaseEventModel> ), Subscriber = new EventStreamResolver>> (context => { return eventProvider.OnUpdateManyObservable; }) }); // // Remove ... AddField (new EventStreamFieldType { // Name = nameof (XBaseRepositoryEvents.RemoveEvent), Type = typeof (XBaseGraphQLEventType), Resolver = new FuncFieldResolver> ( context => context.Source as XBaseEventModel ), Subscriber = new EventStreamResolver> (context => { return eventProvider.OnRemoveObservable; }) }); // // Remove Many ... AddField (new EventStreamFieldType { // Name = nameof (XBaseRepositoryEvents.RemoveManyEvent), Type = typeof (XBaseGraphQLEventType), Resolver = new FuncFieldResolver>> ( context => context.Source as XBaseEventModel> ), Subscriber = new EventStreamResolver>> (context => { return eventProvider.OnRemoveManyObservable; }) }); } } } }