119 lines
3.0 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace gehGassiApp.Domain.Common
{
/// <summary>
/// Repräsentiert ein Objekt das Synchronisations-Infos für Tabellen speichert.
/// Dient der Prüfung wann das letzte mal Pull-Aktionen durchgeführt wurden
/// </summary>
public class SyncInfoPull
{
/// <summary>
/// Eindeutige Id
/// </summary>
[Key]
public int Id { get; set; }
/// <summary>
/// Objekt-Typ bzw. Tabellenname
/// </summary>
[Required]
[MaxLength(100)]
public string Table { get; set; }
/// <summary>
/// Datum + Uhrzeit der Aktion
/// </summary>
[Required]
public DateTimeOffset LastUpdate { get; set; }
}
/// <summary>
/// Repräsentiert ein Objekt das Synchronisations-Infos für Tabellen speichert.
/// Dient der Prüfung wann das letzte mal Push-Aktionen durchgeführt wurden und was gepusht werden muss
/// </summary>
public class SyncInfoPush
{
/// <summary>
/// Eindeutige Id
/// </summary>
[Key]
public Guid Id { get; set; }
/// <summary>
/// Objekt-Typ bzw. Tabellenname
/// </summary>
[Required]
[MaxLength(100)]
public string Table { get; set; }
/// <summary>
/// Schlüssel nach Objekt
/// </summary>
[Required]
[MaxLength(100)]
public string Key { get; set; }
/// <summary>
/// Welche Operation wurde durchgeführt?
/// </summary>
[Required]
public SyncOperation Operation { get; set; }
/// <summary>
/// Datum + Uhrzeit der Aktion
/// </summary>
[Required]
public DateTimeOffset DateTime { get; set; }
/// <summary>
/// Daten als JSON seralisiert
/// </summary>
public string Value { get; set; }
/// <summary>
/// Gibt die Daten als Typ (Objekt) zurück
/// </summary>
/// <typeparam name="T">Typ des Objektes</typeparam>
/// <returns>Objekt oder null</returns>
public T GetValue<T>()
{
if (string.IsNullOrEmpty(Value)) return default;
try
{
var result = JsonSerializer.Deserialize<T>(Value, new JsonSerializerOptions(JsonSerializerDefaults.Web));
return result;
}
catch{}
return default;
}
}
/// <summary>
/// Welche Art von Operation wurde durchgeführt?
/// </summary>
public enum SyncOperation
{
/// <summary>
/// Anlegen
/// </summary>
Create = 1,
/// <summary>
/// Bearbeiten
/// </summary>
Edit = 2,
/// <summary>
/// Löschen
/// </summary>
Delete = 3
}
}