fengling-risk-control/Fengling.RiskControl.Application/Services/MemberIntegrationService.cs

94 lines
2.8 KiB
C#

using System.Net.Http.Json;
using Microsoft.Extensions.Logging;
namespace Fengling.RiskControl.Application.Services;
public class MemberIntegrationService : IMemberIntegrationService
{
private readonly HttpClient _httpClient;
private readonly ILogger<MemberIntegrationService> _logger;
public MemberIntegrationService(HttpClient httpClient, ILogger<MemberIntegrationService> logger)
{
_httpClient = httpClient;
_logger = logger;
}
public async Task<int> GetMemberPointsBalanceAsync(long memberId)
{
try
{
var response = await _httpClient.GetAsync($"/api/v1/members/{memberId}/points/balance");
if (!response.IsSuccessStatusCode)
{
_logger.LogWarning("Failed to get points balance for member {MemberId}: {StatusCode}",
memberId, response.StatusCode);
return 0;
}
var result = await response.Content.ReadFromJsonAsync<PointsBalanceResponse>();
return result?.AvailableBalance ?? 0;
}
catch (Exception ex)
{
_logger.LogError(ex, "Error getting points balance for member {MemberId}", memberId);
return 0;
}
}
public async Task<bool> DeductPointsAsync(long memberId, int points, string reason)
{
try
{
var response = await _httpClient.PostAsJsonAsync($"/api/v1/members/{memberId}/points/deduct", new
{
Points = points,
Reason = reason
});
return response.IsSuccessStatusCode;
}
catch (Exception ex)
{
_logger.LogError(ex, "Error deducting points for member {MemberId}", memberId);
return false;
}
}
public async Task<bool> AddPointsAsync(long memberId, int points, string reason)
{
try
{
var response = await _httpClient.PostAsJsonAsync($"/api/v1/members/{memberId}/points/add", new
{
Points = points,
Reason = reason
});
return response.IsSuccessStatusCode;
}
catch (Exception ex)
{
_logger.LogError(ex, "Error adding points for member {MemberId}", memberId);
return false;
}
}
public async Task<MemberInfo?> GetMemberInfoAsync(long memberId)
{
try
{
var response = await _httpClient.GetAsync($"/api/v1/members/{memberId}");
if (!response.IsSuccessStatusCode)
return null;
return await response.Content.ReadFromJsonAsync<MemberInfo>();
}
catch (Exception ex)
{
_logger.LogError(ex, "Error getting member info for {MemberId}", memberId);
return null;
}
}
}