irc-netcore-api/IRaCIS.Core.Application/Triggers/BeforeSaveTrigger/UserLogTrigger.cs

50 lines
1.5 KiB
C#

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<UserLog>
{
//国家|区域|省份|城市|ISP 缺省的地域信息默认是0
//0|0|0|内网IP|内网IP
// 中国|0|湖北省|武汉市|电信
public async Task BeforeSave(ITriggerContext<UserLog> 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<UserLog> _userLogReposiotry) : IBeforeSaveTrigger<IdentityUser>
{
public async Task BeforeSave(ITriggerContext<IdentityUser> 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);
}
}
}
}