Files
Module.HallOfFame/Server/Repository/HallOfFameRepository.cs

154 lines
5.5 KiB
C#

using Microsoft.EntityFrameworkCore;
using System.Linq;
using System.Collections.Generic;
using Oqtane.Modules;
namespace SZUAbsolventenverein.Module.HallOfFame.Repository
{
public interface IHallOfFameRepository
{
IEnumerable<Models.HallOfFame> GetHallOfFames(int ModuleId);
Models.HallOfFame GetHallOfFame(int HallOfFameId);
Models.HallOfFame GetHallOfFame(int HallOfFameId, bool tracking);
Models.HallOfFame AddHallOfFame(Models.HallOfFame HallOfFame);
Models.HallOfFame UpdateHallOfFame(Models.HallOfFame HallOfFame);
void DeleteHallOfFame(int HallOfFameId);
IEnumerable<Models.HallOfFameReport> GetHallOfFameReports(int HallOfFameId);
Models.HallOfFameReport GetHallOfFameReport(int HallOfFameReportId);
Models.HallOfFameReport AddHallOfFameReport(Models.HallOfFameReport HallOfFameReport);
void DeleteHallOfFameReport(int HallOfFameReportId);
}
public class HallOfFameRepository : IHallOfFameRepository, ITransientService
{
private readonly IDbContextFactory<HallOfFameContext> _factory;
public HallOfFameRepository(IDbContextFactory<HallOfFameContext> factory)
{
_factory = factory;
}
public IEnumerable<Models.HallOfFame> GetHallOfFames(int ModuleId)
{
using var db = _factory.CreateDbContext();
var items = db.HallOfFame.Where(item => item.ModuleId == ModuleId)
.OrderByDescending(item => item.CreatedOn)
.ToList();
foreach (var item in items)
{
item.Description = item.Description?.Replace("\t", " ");
}
return items;
}
public Models.HallOfFame GetHallOfFame(int HallOfFameId)
{
return GetHallOfFame(HallOfFameId, true);
}
public Models.HallOfFame GetHallOfFame(int HallOfFameId, bool tracking)
{
using var db = _factory.CreateDbContext();
Models.HallOfFame item;
if (tracking)
{
item = db.HallOfFame.Find(HallOfFameId);
}
else
{
item = db.HallOfFame.AsNoTracking().FirstOrDefault(i => i.HallOfFameId == HallOfFameId);
}
if (item != null)
{
item.Description = item.Description?.Replace("\t", " ");
}
return item;
}
public Models.HallOfFame AddHallOfFame(Models.HallOfFame HallOfFame)
{
using var db = _factory.CreateDbContext();
HallOfFame.Description = HallOfFame.Description?.Replace("\t", " ");
HallOfFame.Image ??= "";
HallOfFame.Link ??= "";
db.HallOfFame.Add(HallOfFame);
db.SaveChanges();
return HallOfFame;
}
public Models.HallOfFame UpdateHallOfFame(Models.HallOfFame HallOfFame)
{
using var db = _factory.CreateDbContext();
HallOfFame.Description = HallOfFame.Description?.Replace("\t", " ");
HallOfFame.Image ??= "";
HallOfFame.Link ??= "";
db.Entry(HallOfFame).State = EntityState.Modified;
db.SaveChanges();
return HallOfFame;
}
public void DeleteHallOfFame(int HallOfFameId)
{
// First transaction: Delete all associated reports
using (var db = _factory.CreateDbContext())
{
var reports = db.HallOfFameReport.Where(item => item.HallOfFameId == HallOfFameId).ToList();
if (reports.Any())
{
db.HallOfFameReport.RemoveRange(reports);
db.SaveChanges();
}
}
// Second transaction: Delete the HallOfFame entry itself
using (var db = _factory.CreateDbContext())
{
var hallOfFame = db.HallOfFame.Find(HallOfFameId);
if (hallOfFame != null)
{
db.HallOfFame.Remove(hallOfFame);
db.SaveChanges();
}
}
}
public IEnumerable<Models.HallOfFameReport> GetHallOfFameReports(int HallOfFameId)
{
using var db = _factory.CreateDbContext();
return db.HallOfFameReport.Where(item => item.HallOfFameId == HallOfFameId)
.OrderByDescending(item => item.CreatedOn)
.ToList();
}
public Models.HallOfFameReport GetHallOfFameReport(int HallOfFameReportId)
{
using var db = _factory.CreateDbContext();
return db.HallOfFameReport.Find(HallOfFameReportId);
}
public Models.HallOfFameReport AddHallOfFameReport(Models.HallOfFameReport HallOfFameReport)
{
using var db = _factory.CreateDbContext();
db.HallOfFameReport.Add(HallOfFameReport);
db.SaveChanges();
return HallOfFameReport;
}
public void DeleteHallOfFameReport(int HallOfFameReportId)
{
using var db = _factory.CreateDbContext();
// Clear any tracked entities to avoid conflicts
db.ChangeTracker.Clear();
Models.HallOfFameReport HallOfFameReport = db.HallOfFameReport.Find(HallOfFameReportId);
if (HallOfFameReport != null)
{
db.HallOfFameReport.Remove(HallOfFameReport);
db.SaveChanges();
}
}
}
}