NonInventPurchasingSystem/CPRNIMS.Domain/UIServices/Finance/RR.cs
2026-01-20 07:44:30 +08:00

145 lines
5.1 KiB
C#

using CPRNIMS.Domain.UIContracts.Common;
using CPRNIMS.Domain.UIContracts.Finance;
using CPRNIMS.Infrastructure.Helper;
using CPRNIMS.Infrastructure.Models.Account;
using CPRNIMS.Infrastructure.Models.Common;
using CPRNIMS.Infrastructure.ViewModel.Finance;
using CPRNIMS.Infrastructure.ViewModel.PR;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace CPRNIMS.Domain.UIServices.Finance
{
public class RR : IRR
{
private readonly IConfiguration _configuration;
private readonly TokenHelper _tokenHelper;
private readonly IApiConfigurationService _apiConfigurationService;
public RR(IConfiguration configuration, TokenHelper tokenHelper,
IApiConfigurationService apiConfigurationService)
{
_configuration = configuration;
_tokenHelper = tokenHelper;
_apiConfigurationService = apiConfigurationService;
}
#region SendRequest service
public async Task<RRVM> SendPostApiRequest(User user,
RRVM viewModel, string apiEndpoint)
{
var token = await _tokenHelper.GetJwtTokenAsync(user);
try
{
if (string.IsNullOrEmpty(token))
{
// Handle token retrieval failure
return null;
}
viewModel.UserId = user.UserId;
var jsonContent = JsonSerializer.Serialize(viewModel);
var content = new StringContent(jsonContent, Encoding.UTF8, "application/json");
using (var httpClient = _apiConfigurationService.CreateHttpClientWithDefaultHeaders(token))
{
HttpResponseMessage response;
response = await httpClient.PostAsync(apiEndpoint, content);
if (response.IsSuccessStatusCode)
{
var responseObject = JsonSerializer.Deserialize<ResponseObject>(await response.Content.ReadAsStringAsync());
viewModel.Message = responseObject.message;
viewModel.StatusResponse = responseObject.statusResponse;
return viewModel;
}
else
{
// Handle API request failure
return null;
}
}
}
catch (Exception ex)
{
ex.ToString();
throw;
}
}
public async Task<List<RRVM>> SendGetApiRequest(User user,
RRVM viewModel,
string apiEndpoint)
{
var token = await _tokenHelper.GetJwtTokenAsync(user);
try
{
if (string.IsNullOrEmpty(token))
{
// Handle token retrieval failure
return null;
}
viewModel.UserId = user.UserId;
var jsonContent = JsonSerializer.Serialize(viewModel);
var content = new StringContent(jsonContent, Encoding.UTF8, "application/json");
using (var httpClient = _apiConfigurationService.CreateHttpClientWithDefaultHeaders(token))
{
HttpResponseMessage response;
response = await httpClient.PostAsync(apiEndpoint, content);
if (response.IsSuccessStatusCode)
{
var jsonResponse = await response.Content.ReadAsStringAsync();
var options = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
};
var myArtWork = JsonSerializer.Deserialize<List<RRVM>>(jsonResponse, options);
return myArtWork;
}
else
{
// Handle API request failure
return null;
}
}
}
catch (Exception ex)
{
throw;
}
}
#endregion
#region Get
public async Task<List<RRVM>> GetAllClosedPO(User user, RRVM viewModel)
{
return await SendGetApiRequest(user, viewModel,
_configuration["LLI:NonInvent:RRMgmt:GetAllClosedPO"]);
}
public async Task<List<RRVM>> GetRRDetailByPO(User user, RRVM viewModel)
{
return await SendGetApiRequest(user, viewModel,
_configuration["LLI:NonInvent:RRMgmt:GetRRDetailByPO"]);
}
#endregion
#region Post Put
public async Task<RRVM> PostPutPayment(User user, RRVM viewModel)
{
return await SendPostApiRequest(user, viewModel,
_configuration["LLI:NonInvent:RRMgmt:PostPutPayment"]);
}
#endregion
}
}