82 lines
2.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace gehGassiApp.Core.Interfaces.Synchronization
{
/// <summary>
/// Schnittstellenbeschreibung für einen Service der Push- und Pull unterstützt
/// </summary>
public interface ISyncPushPullService<T> where T : class
{
/// <summary>
/// Holen der Daten vom lokalen Speicher die noch nicht synchronisiert wurden und senden an den Server
/// </summary>
/// <param name="accessToken">Aktuelles Accesstoken</param>
/// <param name="token">CancellationToken</param>
/// <returns>Task</returns>
Task<SyncResult<T>> PushAsync(string accessToken, CancellationToken token);
/// <summary>
/// Holen der letzten Daten vom Server und Synchronisieren mit den lokalen Daten
/// </summary>
/// <param name="language">Sprache</param>
/// <param name="accessToken">Aktuelles Accesstoken</param>
/// <param name="token">CancellationToken</param>
/// <returns>Task</returns>
Task<SyncResult<T>> PullAsync(string language, string accessToken, CancellationToken token);
}
/// <summary>
/// Ergebnis einer Synchronisierung
/// </summary>
/// <typeparam name="T">Typ der Klasse</typeparam>
public class SyncResult<T> where T : class
{
/// <summary>
/// Hinzugefügte Items
/// </summary>
public List<T> Added { get; set; }
/// <summary>
/// Aktualisierte Items
/// </summary>
public List<T> Updated { get; set; }
/// <summary>
/// Gelöschte Items
/// </summary>
public List<T> Deleted { get; set; }
/// <summary>
/// Wann war das letzte Update?
/// </summary>
public DateTimeOffset? LastUpdate { get; set; }
/// <summary>
/// Gibt an ob Änderungen vorliegen
/// </summary>
public bool HasChanges
{
get
{
var changed = Added.Count > 0 || Updated.Count > 0 || Deleted.Count > 0;
return changed;
}
}
/// <summary>
/// Erstellt eine Instanz
/// </summary>
public SyncResult()
{
Added = new List<T>();
Updated = new List<T>();
Deleted = new List<T>();
LastUpdate = null;
}
}
}