이 코드를 사용해서 db에 저장하면 유저의 모든 활동 내역이 여기에 저장되어 db에 데이터가 엄청나게 많아집니다… 저는 유저가 로그인을 언제했는지만 기록하고 로그인 이후의 활동은 기록하고 싶지 않은데 코드를 어떻게 고쳐야될까요ㅜㅜ
public class UserActivityFilter : IActionFilter
{
private readonly ApplicationDbContext _context;
private readonly UserManager _userManager;
public UserActivityFilter(ApplicationDbContext context, UserManager userManager)
{
_context = context;
_userManager = userManager;
}
public void OnActionExecuted(ActionExecutedContext context)
{
}
public void OnActionExecuting(ActionExecutingContext context)
{
var userName = context.HttpContext.User.Identity.Name;
var ipAddress = context.HttpContext.Connection.RemoteIpAddress.ToString();
Guid? userId = null;
if (!string.IsNullOrEmpty(userName))
{
var user = _context.ApplicationUsers.FirstOrDefault(u => u.Email == userName);
if (user != null)
{
userId = user.Id;
}
StoreUserActivity(ipAddress, userId);
}
}
public void StoreUserActivity(string ipAddress, Guid? userId)
{
var userActivity = new UserActivity
{
IpAddress = ipAddress,
UserId = userId
};
_context.UserActivities.Add(userActivity);
_context.SaveChanges();
}
[Key]
public Guid Id { get; set; }
public string IpAddress { get; set; }
public DateTime ActivityDate { get; set; }
[ForeignKey(“UserId”)]
public virtual ApplicationUser? ApplicationUser { get; set; }
public Guid? UserId { get; set; }
public UserActivity()
{
ActivityDate = DateTime.Now;
}