90 lines
3.5 KiB
C#
90 lines
3.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using gehGassiApp.Core.Data;
|
|
using gehGassiApp.Core.Interfaces.Synchronization;
|
|
using gehGassiApp.Domain.Common;
|
|
|
|
namespace gehGassiApp.Core.Services.Synchronization
|
|
{
|
|
/// <summary>
|
|
/// Service der die Verwaltung von Synch-Infos ermöglicht.
|
|
/// </summary>
|
|
public class SyncInfoPullService : ServiceBase<SyncInfoPull>, ISyncInfoPullService
|
|
{
|
|
/// <summary>
|
|
/// Erstellt eine Instanz
|
|
/// </summary>
|
|
/// <param name="unitOfWork">Instanz eines IUnitOfWork</param>
|
|
public SyncInfoPullService(IUnitOfWork unitOfWork) : base(unitOfWork)
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt eine Entität anhand der eindeutigen Id zurück
|
|
/// </summary>
|
|
/// <param name="id">Id der Entität</param>
|
|
/// <param name="noTracking">Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten</param>
|
|
/// <returns>Entität oder null, wenn nicht gefunden</returns>
|
|
public override SyncInfoPull Get(object id, bool noTracking = true)
|
|
{
|
|
return Repository.SingleOrDefault(c => c.Id == (int)id, noTracking);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt eine Entität anhand der eindeutigen Id zurück
|
|
/// </summary>
|
|
/// <param name="id">Id der Entität</param>
|
|
/// <param name="noTracking">Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten</param>
|
|
/// <returns>Entität oder null, wenn nicht gefunden</returns>
|
|
public override async Task<SyncInfoPull> GetAsync(object id, bool noTracking = true)
|
|
{
|
|
return await Repository.SingleOrDefaultAsync(c => c.Id == (int)id, noTracking).ConfigureAwait(false);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Hinzufügen oder Aktualisieren einer SyncInfo zu einem Objekt.
|
|
/// </summary>
|
|
/// <param name="table">Tabelle bzw. Name des Objektes</param>
|
|
/// <param name="lastUpdate">Wann wurde das letzte Mal ein Sync durchgeführt</param>
|
|
/// <returns>Task</returns>
|
|
public async Task AddOrUpddateAsync(string table, DateTimeOffset lastUpdate)
|
|
{
|
|
var syncInfo = await Repository.FirstOrDefaultAsync(c => c.Table == table, false).ConfigureAwait(false);
|
|
if (syncInfo != null && lastUpdate > syncInfo.LastUpdate)
|
|
{
|
|
syncInfo.LastUpdate = lastUpdate;
|
|
Repository.Update(syncInfo);
|
|
}
|
|
else
|
|
{
|
|
syncInfo = new SyncInfoPull()
|
|
{
|
|
Table = table,
|
|
LastUpdate = lastUpdate
|
|
};
|
|
Repository.Add(syncInfo);
|
|
}
|
|
|
|
await CommitAsync().ConfigureAwait(false);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Abfragen einer Sync-Info zu einem Objekt
|
|
/// </summary>
|
|
/// <param name="table">Tabelle bzw. Name des Objektes</param>
|
|
/// <returns>SncInfo wenn gefunden, oder null wenn es noch keine gibt</returns>
|
|
public async Task<SyncInfoPull> GetAsync(string table)
|
|
{
|
|
var syncInfo = await Repository.FirstOrDefaultAsync(c => c.Table == table).ConfigureAwait(false);
|
|
if (syncInfo != null)
|
|
{
|
|
//syncInfo.LastUpdate = syncInfo.LastUpdate.AddMilliseconds(999);
|
|
}
|
|
return syncInfo;
|
|
}
|
|
}
|
|
}
|