kreta/Kreta.BusinessLogic/Classes/MobileApi/Naplo/V2/Co/ResponseWrapperCo.cs
2024-03-13 00:33:46 +01:00

56 lines
2.2 KiB
C#

using System;
using System.Net;
using Kreta.BusinessLogic.Classes.MobileApi.Naplo.V2.Logic;
namespace Kreta.BusinessLogic.Classes.MobileApi.Naplo.V2.Co
{
public sealed class ResponseWrapperCo<T> where T : class, new()
{
public HttpStatusCode StatusCode { get; private set; } = HttpStatusCode.NotFound;
public DateTime UtolsoSzinkronDatumUtc { get; } = DateTime.UtcNow;
public string Hash => string.IsNullOrWhiteSpace(DatabaseHash + SourceHash) ? null : DatabaseHash + "." + SourceHash;
public bool IsHashesOk => IsDatabaseHashOk && IsSourceHashOk;
public bool IsDatabaseHashOk
=> !string.IsNullOrWhiteSpace(RequestHash) && !string.IsNullOrWhiteSpace(DatabaseHash) && RequestHash.StartsWith(DatabaseHash, StringComparison.CurrentCultureIgnoreCase);
public bool IsSourceHashOk
=> !string.IsNullOrWhiteSpace(RequestHash) && !string.IsNullOrWhiteSpace(SourceHash) && RequestHash.EndsWith(SourceHash, StringComparison.CurrentCultureIgnoreCase);
private string RequestHash { get; }
private string DatabaseHash { get; }
private string SourceHash { get; set; }
public T Adatcsomag { get; private set; } = null;
private ResponseWrapperCo() { }
public ResponseWrapperCo(string requestHash, string databaseHash = null)
{
RequestHash = requestHash;
DatabaseHash = databaseHash;
}
/// <param name="isStrictMode">True: Adatcsomag prop is only assigned if all hash are ok.</param>
public void FillData(T adatcsomag, bool isStrictMode = false)
{
StatusCode = HttpStatusCode.OK;
SourceHash = HashLogic.CreateSourceHash(adatcsomag);
if (isStrictMode)
{
Fill(IsHashesOk, adatcsomag);
}
else
{
Fill(IsSourceHashOk, adatcsomag);
}
}
private void Fill(bool isHashOk, T adatcsomag)
{
if (isHashOk)
{
StatusCode = HttpStatusCode.NotModified;
}
else
{
Adatcsomag = adatcsomag;
}
}
}
}