UserDeletionService.cs - (B4 Configurable Timer Implementation)
Fri Jul 26 2024 07:19:06 GMT+0000 (Coordinated Universal Time)
Saved by
@iamkatmakhafola
//UserDeletionService.cs
using av_motion_api.Data; // Adjust the namespace to match your project
using av_motion_api.Models;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
namespace av_motion_api.Services
{
public class UserDeletionService : IHostedService, IDisposable
{
private readonly IServiceProvider _serviceProvider;
private Timer _timer;
public UserDeletionService(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public Task StartAsync(CancellationToken cancellationToken)
{
_timer = new Timer(DeleteDeactivatedUsers, null, TimeSpan.Zero, TimeSpan.FromMinutes(0));
return Task.CompletedTask;
}
private void DeleteDeactivatedUsers(object state)
{
using (var scope = _serviceProvider.CreateScope())
{
var context = scope.ServiceProvider.GetRequiredService<AppDbContext>();
var userManager = scope.ServiceProvider.GetRequiredService<UserManager<User>>();
var sixMonthsAgo = DateTime.UtcNow.AddMonths(-6);
var usersToDelete = context.Users
.Where(u => u.User_Status_ID == 2 && u.DeactivatedAt < sixMonthsAgo)
.ToList();
foreach (var user in usersToDelete)
{
userManager.DeleteAsync(user).Wait();
}
context.SaveChanges();
}
}
public Task StopAsync(CancellationToken cancellationToken)
{
_timer?.Change(Timeout.Infinite, 0);
return Task.CompletedTask;
}
public void Dispose()
{
_timer?.Dispose();
}
}
}
//program.cs
builder.Services.AddHostedService<OrderStatusUpdater>();
content_copyCOPY
Comments