kreta/Kreta.Client/Kir/KirClient.cs
2024-03-13 00:33:46 +01:00

160 lines
4.9 KiB
C#

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<T>(Func<Service_KIR_IFClient, T> 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
}
}