94 lines
2.8 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|