Files
xDataService/GraphQL/XBaseGraphQLSubscription.cs
2026-05-15 02:51:02 +03:30

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