feat(risk-control): add database migrations and seed data
This commit is contained in:
parent
f6a7824ce9
commit
6b6dbd11d5
@ -0,0 +1,23 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Design;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace Fengling.RiskControl.Infrastructure;
|
||||
|
||||
public class DesignTimeRiskControlDbContextFactory : IDesignTimeDbContextFactory<RiskControlDbContext>
|
||||
{
|
||||
private readonly ILoggerFactory _loggerFactory;
|
||||
|
||||
public DesignTimeRiskControlDbContextFactory(ILoggerFactory loggerFactory)
|
||||
{
|
||||
_loggerFactory = loggerFactory;
|
||||
}
|
||||
|
||||
public RiskControlDbContext CreateDbContext(string[] args)
|
||||
{
|
||||
var optionsBuilder = new DbContextOptionsBuilder<RiskControlDbContext>();
|
||||
optionsBuilder.UseNpgsql("Host=localhost;Database=RiskControl;Username=postgres;Password=postgres");
|
||||
optionsBuilder.UseLoggerFactory(_loggerFactory);
|
||||
return new RiskControlDbContext(optionsBuilder.Options);
|
||||
}
|
||||
}
|
||||
@ -4,6 +4,7 @@ using Fengling.RiskControl.Domain.Aggregates.RiskRules;
|
||||
using Fengling.RiskControl.Domain.Aggregates.RiskScores;
|
||||
using Fengling.RiskControl.Domain.Aggregates.RiskAlerts;
|
||||
using Fengling.RiskControl.Domain.Aggregates.LotteryActivities;
|
||||
using Fengling.RiskControl.Infrastructure.SeedData;
|
||||
|
||||
namespace Fengling.RiskControl.Infrastructure;
|
||||
|
||||
@ -61,4 +62,13 @@ public class RiskControlDbContext : DbContext
|
||||
builder.Property(l => l.DeviceId).HasMaxLength(100);
|
||||
});
|
||||
}
|
||||
|
||||
public void SeedData()
|
||||
{
|
||||
if (!RiskRules.Any())
|
||||
{
|
||||
RiskRules.AddRange(RiskControlSeedData.GetDefaultRules());
|
||||
SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,57 @@
|
||||
using Fengling.RiskControl.Domain.Aggregates.RiskRules;
|
||||
|
||||
namespace Fengling.RiskControl.Infrastructure.SeedData;
|
||||
|
||||
public static class RiskControlSeedData
|
||||
{
|
||||
public static IEnumerable<RiskRule> GetDefaultRules()
|
||||
{
|
||||
yield return RiskRule.Create(
|
||||
"高频抽奖限制",
|
||||
"限制单日抽奖次数,防止沉迷",
|
||||
RiskRuleType.FrequencyLimit,
|
||||
RiskRuleAction.Block,
|
||||
"""{"maxCount": 10, "windowMinutes": 1440, "points": 30}""",
|
||||
priority: 10);
|
||||
|
||||
yield return RiskRule.Create(
|
||||
"单次大额抽奖限制",
|
||||
"单次抽奖投入不能超过1000积分",
|
||||
RiskRuleType.AmountLimit,
|
||||
RiskRuleAction.Block,
|
||||
"""{"maxAmount": 1000, "points": 40}""",
|
||||
priority: 9);
|
||||
|
||||
yield return RiskRule.Create(
|
||||
"设备异常检测",
|
||||
"同一设备频繁切换账号",
|
||||
RiskRuleType.DeviceFingerprint,
|
||||
RiskRuleAction.RequireVerification,
|
||||
"""{"maxAccountsPerDevice": 3, "windowMinutes": 60, "points": 50}""",
|
||||
priority: 8);
|
||||
|
||||
yield return RiskRule.Create(
|
||||
"IP地址异常",
|
||||
"同一IP短时间内大量请求",
|
||||
RiskRuleType.VelocityCheck,
|
||||
RiskRuleAction.RateLimit,
|
||||
"""{"maxRequests": 100, "windowMinutes": 1, "points": 20}""",
|
||||
priority: 7);
|
||||
|
||||
yield return RiskRule.Create(
|
||||
"行为模式异常",
|
||||
"检测非正常用户行为模式",
|
||||
RiskRuleType.BehaviorPattern,
|
||||
RiskRuleAction.FlagForReview,
|
||||
"""{"patterns": ["rapid_clicks", "pattern_sequences"]}""",
|
||||
priority: 5);
|
||||
|
||||
yield return RiskRule.Create(
|
||||
"VIP会员白名单",
|
||||
"VIP会员享受较低风控等级",
|
||||
RiskRuleType.Whitelist,
|
||||
RiskRuleAction.Allow,
|
||||
"""{"vipLevels": [3, 4, 5]}""",
|
||||
priority: 100);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user