using System; using System.Runtime.Caching; using Kreta.Client.Kir.Interfaces; using Kreta.Client.Kir.Models; using Kreta.Client.Kir2Service; using Kreta.Core; using Kreta.Resources; namespace Kreta.Client.Kir { public class KirClient : IKirClient { #region Privát osztály változók private string KirTokenCacheKey { get; set; } private string KirToken { get => Cache.Get(KirTokenCacheKey)?.ToString(); set { if (KirToken == null) { Cache.Add(KirTokenCacheKey, value, new CacheItemPolicy { AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddMinutes(5)) }); } } } private IKirAuthentication KirAuthentication { get; } private KIR2AuthHeaderType Kir2AuthHeaderType { get; set; } private string IntezmenyAzonosito { get; set; } #endregion Privát osztály változók public static string GetServiceUrl() { using (var client = new Service_KIR_IFClient()) { return client.Endpoint.Address.Uri.ToString(); } } public KirClient(IKirAuthentication kirAuthentication, string kirTokenCacheKey) { KirAuthentication = kirAuthentication; try { KirTokenCacheKey = kirTokenCacheKey; if (string.IsNullOrWhiteSpace(KirToken)) { Authenticate(); } else { Kir2AuthHeaderType = KirAuthentication.GetAuthHeader(KirToken); } } catch { throw; } } private void Authenticate() { string kirToken = KirAuthentication.GetKirToken(); if (string.IsNullOrWhiteSpace(kirToken)) { throw new Exception(ErrorResource.AKirRendszerbenTortenoAzonositasKozbenHibaTortent); } KirToken = kirToken; Kir2AuthHeaderType = KirAuthentication.GetAuthHeader(kirToken); } private T CallService(Func action) { return new ClientHelper().CallService(action); } #region Kérelem beküldése public KirKerelemModel.BekuldesResponseModel KerelemBekuldese(KirKerelemModel.BekuldesRequestModel requestModel) { KerelemBekuldesRequestType request = KirKerelemModel.BekuldesRequestModel.ConvertRequestModelToRequestType(requestModel); try { KirKerelemModel.BekuldesResponseModel resultRequest = KerelemBekuldese(request); return resultRequest; } catch { throw; } } private KirKerelemModel.BekuldesResponseModel KerelemBekuldese(KerelemBekuldesRequestType request) { KerelemBekuldesResponseType response = CallService(x => x.KerelemBekuldes(Kir2AuthHeaderType, request)); if (response.isSuccess) { KirKerelemModel.BekuldesResponseModel resultResponse = KirKerelemModel.BekuldesResponseModel.ConvertResponseTypeToResponseModel(response); return resultResponse; } throw new Exception(ErrorResource.NemSikerultAKirKerelemBekuldese); } #endregion Kérelem beküldése #region Kérelem státusz lekérdezés public KirKerelemModel.StatuszLekerdezesResponseModel KerelemStatuszLekerdezes(KirKerelemModel.StatuszLekerdezesRequestModel requestModel) { KerelemStatuszLekerdezesRequestType request = KirKerelemModel.StatuszLekerdezesRequestModel.ConvertRequestModelToRequestType(requestModel); if (!string.IsNullOrWhiteSpace(requestModel.KontenerElemId)) { request.KontenerElemID = requestModel.KontenerElemId; } try { KirKerelemModel.StatuszLekerdezesResponseModel resultResponse = KerelemStatuszLekerdezes(request); return resultResponse; } catch { throw; } } private KirKerelemModel.StatuszLekerdezesResponseModel KerelemStatuszLekerdezes(KerelemStatuszLekerdezesRequestType request) { KerelemStatuszLekerdezesResponseType response = CallService(x => x.KerelemStatuszLekerdezes(Kir2AuthHeaderType, request)); if (response.isSuccess) { KirKerelemModel.StatuszLekerdezesResponseModel resultResponse = KirKerelemModel.StatuszLekerdezesResponseModel.ConvertResponseTypeToResponseModel(response); return resultResponse; } throw new Exception(ErrorResource.NemSikerultAKirStatuszLekerdezes); } #endregion Kérelem státusz lekérdezés } }