fengling-risk-control/Fengling.RiskControl.Application/Events/MemberEventSubscriptions.cs

51 lines
1.7 KiB
C#

using Fengling.RiskControl.Domain.Aggregates.RiskScores;
using Fengling.RiskControl.Domain.Repositories;
using MediatR;
namespace Fengling.RiskControl.Application.Events;
public class MemberRegisteredEventHandler : INotificationHandler<Fengling.Member.Domain.Events.Member.MemberRegisteredEvent>
{
private readonly IRiskScoreRepository _scoreRepository;
public MemberRegisteredEventHandler(IRiskScoreRepository scoreRepository)
{
_scoreRepository = scoreRepository;
}
public async Task Handle(Fengling.Member.Domain.Events.Member.MemberRegisteredEvent notification, CancellationToken cancellationToken)
{
var baselineScore = RiskScore.Create(
notification.MemberId,
"member_registration",
$"reg_{notification.MemberId}",
expiresAt: DateTime.UtcNow.AddDays(30));
await _scoreRepository.AddAsync(baselineScore);
}
}
public class PointsChangedEventHandler : INotificationHandler<Fengling.Member.Domain.Events.Points.PointsChangedEvent>
{
private readonly IRiskScoreRepository _scoreRepository;
public PointsChangedEventHandler(IRiskScoreRepository scoreRepository)
{
_scoreRepository = scoreRepository;
}
public async Task Handle(Fengling.Member.Domain.Events.Points.PointsChangedEvent notification, CancellationToken cancellationToken)
{
if (notification.ChangedPoints > 1000)
{
var score = RiskScore.Create(
notification.MemberId,
"large_point_change",
notification.AccountId.ToString());
score.AddRiskFactor("large_point_change", 25, $"大额积分变动: {notification.ChangedPoints}");
await _scoreRepository.AddAsync(score);
}
}
}