add support for Base Eventing Mechanism for Store's ...

This commit is contained in:
2025-07-14 05:59:41 +03:30
parent 36765f55f0
commit 4f6a03e6c9
4 changed files with 787 additions and 506 deletions
+12
View File
@@ -0,0 +1,12 @@
namespace xModels.Base
{
public class XBaseStorableDtoEventModel<T>
{
public T Model { get; set; }
public XBaseStorableDtoEventModel(T model)
{
Model = model;
}
}
}
+84
View File
@@ -0,0 +1,84 @@
using System;
using System.Collections.Generic;
using System.Reactive.Linq;
using System.Reactive.Subjects;
using xModels.Interfaces;
namespace xModels.Base
{
public abstract class XBaseStoreEvent<T, TKey> : IXBaseStoreEvents<T, TKey>
where T : XBaseStorableDto<TKey>
{
//
private readonly ISubject<XBaseStorableDtoEventModel<T>> onAddSubject;
private readonly ISubject<XBaseStorableDtoEventModel<T>> onUpdateSubject;
private readonly ISubject<XBaseStorableDtoEventModel<T>> onRemoveSubject;
//
private readonly ISubject<XBaseStorableDtoEventModel<IEnumerable<T>>> onAddManySubject;
private readonly ISubject<XBaseStorableDtoEventModel<IEnumerable<T>>> onUpdateManySubject;
private readonly ISubject<XBaseStorableDtoEventModel<IEnumerable<T>>> onRemoveManySubject;
//
public IObservable<XBaseStorableDtoEventModel<T>> OnAddObservable => onAddSubject.AsObservable();
public IObservable<XBaseStorableDtoEventModel<T>> OnUpdateObservable => onUpdateSubject.AsObservable();
public IObservable<XBaseStorableDtoEventModel<T>> OnRemoveObservable => onRemoveSubject.AsObservable();
//
public IObservable<XBaseStorableDtoEventModel<IEnumerable<T>>> OnAddManyObservable => onAddManySubject.AsObservable();
public IObservable<XBaseStorableDtoEventModel<IEnumerable<T>>> OnUpdateManyObservable => onUpdateManySubject.AsObservable();
public IObservable<XBaseStorableDtoEventModel<IEnumerable<T>>> OnRemoveManyObservable => onRemoveManySubject.AsObservable();
//
protected XBaseStoreEvent()
{
//
onAddSubject = new ReplaySubject<XBaseStorableDtoEventModel<T>>(1);
onUpdateSubject = new ReplaySubject<XBaseStorableDtoEventModel<T>>(1);
onRemoveSubject = new ReplaySubject<XBaseStorableDtoEventModel<T>>(1);
//
onAddManySubject = new ReplaySubject<XBaseStorableDtoEventModel<IEnumerable<T>>>(1);
onUpdateManySubject = new ReplaySubject<XBaseStorableDtoEventModel<IEnumerable<T>>>(1);
onRemoveManySubject = new ReplaySubject<XBaseStorableDtoEventModel<IEnumerable<T>>>(1);
}
//
#region Base Actions ...
public void AddEvent(XBaseStorableDtoEventModel<T> model)
{
onAddSubject.OnNext(model);
}
public void AddManyEvent(XBaseStorableDtoEventModel<IEnumerable<T>> model)
{
onAddManySubject.OnNext(model);
}
public void RemoveEvent(XBaseStorableDtoEventModel<T> model)
{
onRemoveSubject.OnNext(model);
}
public void RemoveManyEvent(XBaseStorableDtoEventModel<IEnumerable<T>> model)
{
onRemoveManySubject.OnNext(model);
}
public void UpdateEvent(XBaseStorableDtoEventModel<T> model)
{
onUpdateSubject.OnNext(model);
}
public void UpdateManyEvent(XBaseStorableDtoEventModel<IEnumerable<T>> model)
{
onUpdateManySubject.OnNext(model);
}
#endregion
}
}
+30
View File
@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using xModels.Base;
namespace xModels.Interfaces
{
public interface IXBaseStoreEvents<T, TKey> where T : XBaseStorableDto<TKey>
{
//
void AddEvent(XBaseStorableDtoEventModel<T> model);
void UpdateEvent(XBaseStorableDtoEventModel<T> model);
void RemoveEvent(XBaseStorableDtoEventModel<T> model);
//
void AddManyEvent(XBaseStorableDtoEventModel<IEnumerable<T>> model);
void UpdateManyEvent(XBaseStorableDtoEventModel<IEnumerable<T>> model);
void RemoveManyEvent(XBaseStorableDtoEventModel<IEnumerable<T>> model);
//
IObservable<XBaseStorableDtoEventModel<T>> OnAddObservable { get; }
IObservable<XBaseStorableDtoEventModel<T>> OnUpdateObservable { get; }
IObservable<XBaseStorableDtoEventModel<T>> OnRemoveObservable { get; }
//
IObservable<XBaseStorableDtoEventModel<IEnumerable<T>>> OnAddManyObservable { get; }
IObservable<XBaseStorableDtoEventModel<IEnumerable<T>>> OnUpdateManyObservable { get; }
IObservable<XBaseStorableDtoEventModel<IEnumerable<T>>> OnRemoveManyObservable { get; }
}
}
File diff suppressed because it is too large Load Diff