38 lines
1.3 KiB
C#
38 lines
1.3 KiB
C#
using Fengling.RiskControl.Domain.Aggregates.RiskRules;
|
|
using Fengling.RiskControl.Domain.Aggregates.RiskScores;
|
|
|
|
namespace Fengling.RiskControl.Application.Services;
|
|
|
|
public record RiskEvaluationRequest
|
|
{
|
|
public long MemberId { get; init; }
|
|
public string EntityType { get; init; } = string.Empty;
|
|
public string EntityId { get; init; } = string.Empty;
|
|
public string ActionType { get; init; } = string.Empty;
|
|
public Dictionary<string, object> Context { get; init; } = new();
|
|
}
|
|
|
|
public record RiskEvaluationResult
|
|
{
|
|
public int TotalScore { get; init; }
|
|
public RiskLevel RiskLevel { get; init; }
|
|
public RiskRuleAction RecommendedAction { get; init; }
|
|
public List<RiskFactorResult> Factors { get; init; } = new();
|
|
public bool Blocked { get; init; }
|
|
public string Message { get; init; } = string.Empty;
|
|
}
|
|
|
|
public record RiskFactorResult
|
|
{
|
|
public string FactorType { get; init; } = string.Empty;
|
|
public int Points { get; init; }
|
|
public string Description { get; init; } = string.Empty;
|
|
public string RuleName { get; init; } = string.Empty;
|
|
}
|
|
|
|
public interface IRiskEvaluationService
|
|
{
|
|
Task<RiskEvaluationResult> EvaluateRiskAsync(RiskEvaluationRequest request);
|
|
Task<bool> IsAllowedAsync(RiskEvaluationRequest request);
|
|
}
|