160 lines
4.9 KiB
C#
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
|
|
}
|
|
}
|