using Fengling.RiskControl.Domain.Aggregates.RiskScores; using Fengling.RiskControl.Domain.Repositories; using MediatR; namespace Fengling.RiskControl.Application.Events; public class MemberRegisteredEventHandler : INotificationHandler { 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 { 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); } } }