56 lines
2.2 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|