using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using gehGassiApp.Domain.Common;
namespace gehGassiApp.Core.Interfaces.Synchronization
{
///
/// Schnittstellenbeschreibung für einen Service der die Verwaltung von Push Synch-Infos ermöglicht.
///
public interface ISyncInfoPushService : IService
{
///
/// Hinzufügen eines Push-Deltas
///
/// Typ des Objekts
/// Name der Tabelle = nameof(objekt)
/// ID des Objektes als string
/// Operationstyp. Hinzufügen, Aktualisieren, Löschen
/// Objekt das Serialisiert werden soll
/// SyncInfoPush
Task AddAsync(string table, string key, SyncOperation operation, T value);
///
/// Gibt eine Liste aller offenen SyncInfoPushs einer Tabelle zurück
///
/// Tabelle = nameof(objcet)
/// Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten
/// Liste von SyncInfoPushs
Task> GetAllAsync(string table, bool noTracking = true);
///
/// Entfernen einer SyncInfoPush
///
/// Eindeutige Id
/// Task
Task RemoveAsync(Guid id);
///
/// Entfernen einer SyncInfoPush
///
/// SyncInfoPush
/// Task
Task RemoveAsync(SyncInfoPush item);
///
/// Löschen aller Sync-Infos
///
/// Task
Task RemoveAllAsync();
///
/// Löschen aller Sync-Infos
///
/// Datum vor welchem alle Sync-Infos gelöscht werden sollen
/// Task
Task RemoveAllAsync(DateTimeOffset before);
///
/// Löschen aller Sync-Infos einer Tabelle
///
/// Tabelle = nameof(objcet)
/// Task
Task RemoveAllAsync(string table);
///
/// Löschen aller Sync-Infos einer Tabelle
///
/// Tabelle = nameof(objcet)
/// Datum vor welchem alle Sync-Infos gelöscht werden sollen
/// Task
Task RemoveAllAsync(string table, DateTimeOffset before);
///
/// Gibt zurück ob offene Push-Infos anliegen
///
/// Anzahl offene Push-Infos
Task HasOpenAsync();
///
/// Gibt zurück ob für eine Tabelle offene Push-Infos anliegen
///
/// Tabelle = nameof(objcet)
/// Anzahl offene Push-Infos
Task HasOpenAsync(string table);
}
}