Files
oqtane.framework/Oqtane.Server/Repository/SiteTaskRepository.cs
2026-02-19 10:47:30 -05:00

83 lines
2.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Oqtane.Models;
namespace Oqtane.Repository
{
public interface ISiteTaskRepository
{
IEnumerable<SiteTask> GetSiteTasks(int siteId);
SiteTask GetSiteTask(int siteTaskId);
SiteTask AddSiteTask(SiteTask siteTask);
SiteTask UpdateSiteTask(SiteTask siteTask);
void DeleteSiteTask(int siteTaskId);
int DeleteSiteTasks(int siteId, int age);
}
public class SiteTaskRepository : ISiteTaskRepository
{
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
public SiteTaskRepository(IDbContextFactory<TenantDBContext> dbContextFactory)
{
_dbContextFactory = dbContextFactory;
}
public IEnumerable<SiteTask> GetSiteTasks(int siteId)
{
using var db = _dbContextFactory.CreateDbContext();
return db.SiteTask.Where(item => item.SiteId == siteId && !item.IsCompleted).OrderBy(item => item.CreatedOn);
}
public SiteTask GetSiteTask(int siteTaskId)
{
using var db = _dbContextFactory.CreateDbContext();
return db.SiteTask.SingleOrDefault(item => item.SiteTaskId == siteTaskId);
}
public SiteTask AddSiteTask(SiteTask siteTask)
{
using var db = _dbContextFactory.CreateDbContext();
db.SiteTask.Add(siteTask);
db.SaveChanges();
return siteTask;
}
public SiteTask UpdateSiteTask(SiteTask siteTask)
{
using var db = _dbContextFactory.CreateDbContext();
db.Entry(siteTask).State = EntityState.Modified;
db.SaveChanges();
return siteTask;
}
public void DeleteSiteTask(int siteTaskId)
{
using var db = _dbContextFactory.CreateDbContext();
SiteTask siteTask = db.SiteTask.Find(siteTaskId);
db.SiteTask.Remove(siteTask);
db.SaveChanges();
}
public int DeleteSiteTasks(int siteId, int age)
{
using var db = _dbContextFactory.CreateDbContext();
// delete completed tasks in batches of 100 records
var count = 0;
var purgedate = DateTime.UtcNow.AddDays(-age);
var tasks = db.SiteTask.Where(item => item.SiteId == siteId && item.IsCompleted && item.CreatedOn < purgedate)
.OrderBy(item => item.CreatedOn).Take(100).ToList();
while (tasks.Count > 0)
{
count += tasks.Count;
db.SiteTask.RemoveRange(tasks);
db.SaveChanges();
tasks = db.SiteTask.Where(item => item.SiteId == siteId && item.IsCompleted && item.CreatedOn < purgedate)
.OrderBy(item => item.CreatedOn).Take(100).ToList();
}
return count;
}
}
}