105 lines
3.9 KiB
C#
105 lines
3.9 KiB
C#
|
|
using CMSMicroservice.Application.DayaLoanCQ.Services;
|
||
|
|
using CMSMicroservice.Domain.Enums;
|
||
|
|
using Microsoft.Extensions.Logging;
|
||
|
|
using System;
|
||
|
|
using System.Collections.Generic;
|
||
|
|
using System.Net.Http;
|
||
|
|
using System.Threading;
|
||
|
|
using System.Threading.Tasks;
|
||
|
|
|
||
|
|
namespace CMSMicroservice.Infrastructure.Services;
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// Mock Implementation برای شبیهسازی Daya API
|
||
|
|
/// این کلاس فقط برای تست و توسعه است و باید با Implementation واقعی جایگزین شود
|
||
|
|
/// </summary>
|
||
|
|
public class MockDayaLoanApiService : IDayaLoanApiService
|
||
|
|
{
|
||
|
|
private readonly ILogger<MockDayaLoanApiService> _logger;
|
||
|
|
|
||
|
|
public MockDayaLoanApiService(ILogger<MockDayaLoanApiService> logger)
|
||
|
|
{
|
||
|
|
_logger = logger;
|
||
|
|
}
|
||
|
|
|
||
|
|
public async Task<List<DayaLoanStatusResult>> CheckLoanStatusAsync(
|
||
|
|
List<string> nationalCodes,
|
||
|
|
CancellationToken cancellationToken = default)
|
||
|
|
{
|
||
|
|
_logger.LogWarning("⚠️ Using MOCK Daya API Service - Replace with real implementation!");
|
||
|
|
|
||
|
|
// شبیهسازی تاخیر شبکه
|
||
|
|
await Task.Delay(100, cancellationToken);
|
||
|
|
|
||
|
|
var results = new List<DayaLoanStatusResult>();
|
||
|
|
|
||
|
|
foreach (var nationalCode in nationalCodes)
|
||
|
|
{
|
||
|
|
// شبیهسازی: کدملیهایی که با 1 شروع میشوند وام گرفتهاند
|
||
|
|
if (nationalCode.StartsWith("1"))
|
||
|
|
{
|
||
|
|
results.Add(new DayaLoanStatusResult
|
||
|
|
{
|
||
|
|
NationalCode = nationalCode,
|
||
|
|
Status = DayaLoanStatus.PendingReceive,
|
||
|
|
ContractNumber = $"MOCK-DAYA-{nationalCode}-{DateTime.Now.Ticks}"
|
||
|
|
});
|
||
|
|
}
|
||
|
|
// شبیهسازی: کدملیهایی که با 2 شروع میشوند رد شدهاند
|
||
|
|
else if (nationalCode.StartsWith("2"))
|
||
|
|
{
|
||
|
|
results.Add(new DayaLoanStatusResult
|
||
|
|
{
|
||
|
|
NationalCode = nationalCode,
|
||
|
|
Status = DayaLoanStatus.Rejected,
|
||
|
|
ContractNumber = null
|
||
|
|
});
|
||
|
|
}
|
||
|
|
// بقیه: هنوز بررسی نشدهاند
|
||
|
|
else
|
||
|
|
{
|
||
|
|
results.Add(new DayaLoanStatusResult
|
||
|
|
{
|
||
|
|
NationalCode = nationalCode,
|
||
|
|
Status = DayaLoanStatus.PendingReceive,
|
||
|
|
ContractNumber = null // هنوز قرارداد صادر نشده
|
||
|
|
});
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
_logger.LogInformation("Mock Daya API returned {Count} results", results.Count);
|
||
|
|
return results;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// Real Implementation برای API واقعی دایا
|
||
|
|
/// TODO: این کلاس باید پیادهسازی شود زمانی که API دایا آماده شد
|
||
|
|
/// </summary>
|
||
|
|
public class DayaLoanApiService : IDayaLoanApiService
|
||
|
|
{
|
||
|
|
private readonly HttpClient _httpClient;
|
||
|
|
private readonly ILogger<DayaLoanApiService> _logger;
|
||
|
|
|
||
|
|
public DayaLoanApiService(HttpClient httpClient, ILogger<DayaLoanApiService> logger)
|
||
|
|
{
|
||
|
|
_httpClient = httpClient;
|
||
|
|
_logger = logger;
|
||
|
|
}
|
||
|
|
|
||
|
|
public async Task<List<DayaLoanStatusResult>> CheckLoanStatusAsync(
|
||
|
|
List<string> nationalCodes,
|
||
|
|
CancellationToken cancellationToken = default)
|
||
|
|
{
|
||
|
|
// TODO: پیادهسازی واقعی API دایا
|
||
|
|
// مثال:
|
||
|
|
// var request = new DayaApiRequest { NationalCodes = nationalCodes };
|
||
|
|
// var response = await _httpClient.PostAsJsonAsync("/api/loan/check", request, cancellationToken);
|
||
|
|
// response.EnsureSuccessStatusCode();
|
||
|
|
// var result = await response.Content.ReadFromJsonAsync<DayaApiResponse>(cancellationToken);
|
||
|
|
// return MapToResults(result);
|
||
|
|
|
||
|
|
throw new NotImplementedException("Real Daya API is not implemented yet. Use MockDayaLoanApiService for testing.");
|
||
|
|
}
|
||
|
|
}
|