using EntityFrameworkCore.Triggered; using IP2Region.Net.Abstractions; using IRaCIS.Core.Application.Helper; using MaxMind.GeoIP2; namespace IRaCIS.Core.Application.Triggers { public class UserLogTrigger( ISearcher _searcher) : IBeforeSaveTrigger { //国家|区域|省份|城市|ISP 缺省的地域信息默认是0 //0|0|0|内网IP|内网IP // 中国|0|湖北省|武汉市|电信 public async Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) { var userLog = context.Entity; if (context.ChangeType == ChangeType.Added) { //var ipinfo = _searcher.Search(userLog.IP); //userLog.IPRegion = string.Join('|', ipinfo.Split('|').TakeLast(3)); userLog.IPRegion = IPCityHelper.GetCityResponse(userLog.IP); } } } public class UserAddTrigger(IUserInfo _userInfo, IRepository _userLogReposiotry) : IBeforeSaveTrigger { public async Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) { var user = context.Entity; if (context.ChangeType == ChangeType.Added) { await _userLogReposiotry.AddAsync(new UserLog() { IP = _userInfo.IP, ActionIdentityUserId = _userInfo.IdentityUserId, ActionUserName = _userInfo.UserName, TargetIdentityUserId = user.Id, OptType = UserOptType.AddUser }, true); } } } }