using System; using Microsoft.EntityFrameworkCore; using System.Linq; using System.Collections.Generic; using Oqtane.Modules; using SZUAbsolventenverein.Module.PremiumArea.Models; namespace SZUAbsolventenverein.Module.PremiumArea.Repository { public interface IEngineerApplicationRepository { IEnumerable GetEngineerApplications(int ModuleId); IEnumerable GetEngineerApplications(int ModuleId, string status); EngineerApplication GetEngineerApplication(int ApplicationId); EngineerApplication GetEngineerApplication(int ApplicationId, bool tracking); EngineerApplication AddEngineerApplication(EngineerApplication EngineerApplication); EngineerApplication UpdateEngineerApplication(EngineerApplication EngineerApplication); void DeleteEngineerApplication(int ApplicationId); } public class EngineerApplicationRepository : IEngineerApplicationRepository, ITransientService { private readonly IDbContextFactory _factory; public EngineerApplicationRepository(IDbContextFactory factory) { _factory = factory; } public IEnumerable GetEngineerApplications(int ModuleId) { using var db = _factory.CreateDbContext(); return db.EngineerApplication.Where(item => item.ModuleId == ModuleId).ToList(); } public IEnumerable GetEngineerApplications(int ModuleId, string status) { using var db = _factory.CreateDbContext(); return db.EngineerApplication.Where(item => item.ModuleId == ModuleId && item.Status == status).ToList(); } public EngineerApplication GetEngineerApplication(int ApplicationId) { return GetEngineerApplication(ApplicationId, true); } public EngineerApplication GetEngineerApplication(int ApplicationId, bool tracking) { using var db = _factory.CreateDbContext(); if (tracking) { return db.EngineerApplication.Find(ApplicationId); } else { return db.EngineerApplication.AsNoTracking() .FirstOrDefault(item => item.ApplicationId == ApplicationId); } } public EngineerApplication AddEngineerApplication(EngineerApplication EngineerApplication) { using var db = _factory.CreateDbContext(); try { EngineerApplication.CreatedBy = EngineerApplication.CreatedBy ?? "system"; EngineerApplication.CreatedOn = DateTime.UtcNow; EngineerApplication.ModifiedBy = EngineerApplication.ModifiedBy ?? "system"; EngineerApplication.ModifiedOn = DateTime.UtcNow; db.EngineerApplication.Add(EngineerApplication); db.SaveChanges(); } catch (Exception ex) { // Throwing a new exception with more details so it's visible var msg = $"DB Error: {ex.Message} | Inner: {ex.InnerException?.Message}"; Console.WriteLine(msg); // Log to console for dotnet run throw new Exception(msg, ex); } return EngineerApplication; } public EngineerApplication UpdateEngineerApplication(EngineerApplication EngineerApplication) { using var db = _factory.CreateDbContext(); try { var existing = db.EngineerApplication.Find(EngineerApplication.ApplicationId); if (existing != null) { existing.FileId = EngineerApplication.FileId; existing.Status = EngineerApplication.Status; existing.SubmittedOn = EngineerApplication.SubmittedOn; existing.ApprovedOn = EngineerApplication.ApprovedOn; existing.ModifiedBy = EngineerApplication.ModifiedBy ?? "system"; existing.ModifiedOn = DateTime.UtcNow; db.SaveChanges(); } } catch (Exception ex) { var msg = $"DB Error (Update): {ex.Message} | Inner: {ex.InnerException?.Message}"; Console.WriteLine(msg); throw new Exception(msg, ex); } return EngineerApplication; } public void DeleteEngineerApplication(int ApplicationId) { using var db = _factory.CreateDbContext(); EngineerApplication EngineerApplication = db.EngineerApplication.Find(ApplicationId); db.EngineerApplication.Remove(EngineerApplication); db.SaveChanges(); } } }