154 lines
5.5 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|
|
}
|