using System;
using System.Collections.Generic;
using System.Reactive.Linq;
using System.Reactive.Subjects;
using xDataService.Interfaces;
using xDataService.Models;
namespace xDataService.Providers {
///
/// Some Events can be Raised on Some Actions Happens on Repositories ...
/// this is the Base Events Class ...
///
///
public abstract class XBaseRepositoryEvents : IXBaseRepositoryEvents {
//
private readonly ISubject> onAddSubject;
private readonly ISubject> onUpdateSubject;
private readonly ISubject> onRemoveSubject;
//
private readonly ISubject>> onAddManySubject;
private readonly ISubject>> onUpdateManySubject;
private readonly ISubject>> onRemoveManySubject;
//
protected XBaseRepositoryEvents () {
//
onAddSubject = new ReplaySubject> (1);
onUpdateSubject = new ReplaySubject> (1);
onRemoveSubject = new ReplaySubject> (1);
//
onAddManySubject = new ReplaySubject>> (1);
onUpdateManySubject = new ReplaySubject>> (1);
onRemoveManySubject = new ReplaySubject>> (1);
}
//
public void AddEvent (XBaseEventModel model) => onAddSubject.OnNext (model);
public void UpdateEvent (XBaseEventModel model) => onUpdateSubject.OnNext (model);
public void RemoveEvent (XBaseEventModel model) => onRemoveSubject.OnNext (model);
//
public void AddManyEvent (XBaseEventModel> model) => onAddManySubject.OnNext (model);
public void UpdateManyEvent (XBaseEventModel> model) => onUpdateManySubject.OnNext (model);
public void RemoveManyEvent (XBaseEventModel> model) => onRemoveManySubject.OnNext (model);
//
public IObservable> OnAddObservable => onAddSubject.AsObservable ();
public IObservable> OnUpdateObservable => onUpdateSubject.AsObservable ();
public IObservable> OnRemoveObservable => onRemoveSubject.AsObservable ();
//
public IObservable>> OnAddManyObservable => onAddManySubject.AsObservable ();
public IObservable>> OnUpdateManyObservable => onUpdateManySubject.AsObservable ();
public IObservable>> OnRemoveManyObservable => onRemoveManySubject.AsObservable ();
}
}