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 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; } /// True: Adatcsomag prop is only assigned if all hash are ok. 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; } } } }