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 IUserPremiumRepository { UserPremium GetUserPremium(int UserId); UserPremium SaveUserPremium(UserPremium UserPremium); void AddPremiumEvent(PremiumEvent premiumEvent); IEnumerable GetPremiumEvents(int UserId); } public class UserPremiumRepository : IUserPremiumRepository, ITransientService { private readonly IDbContextFactory _factory; public UserPremiumRepository(IDbContextFactory factory) { _factory = factory; } public UserPremium GetUserPremium(int UserId) { using var db = _factory.CreateDbContext(); return db.UserPremium.FirstOrDefault(item => item.UserId == UserId); } public UserPremium SaveUserPremium(UserPremium UserPremium) { using var db = _factory.CreateDbContext(); if (UserPremium.Id > 0) { var existing = db.UserPremium.Find(UserPremium.Id); if (existing != null) { existing.UserId = UserPremium.UserId; existing.PremiumUntil = UserPremium.PremiumUntil; existing.ModifiedBy = UserPremium.ModifiedBy ?? "system"; existing.ModifiedOn = DateTime.UtcNow; db.SaveChanges(); } } else { UserPremium.CreatedBy = UserPremium.CreatedBy ?? "system"; UserPremium.CreatedOn = DateTime.UtcNow; UserPremium.ModifiedBy = UserPremium.ModifiedBy ?? "system"; UserPremium.ModifiedOn = DateTime.UtcNow; db.UserPremium.Add(UserPremium); db.SaveChanges(); } return UserPremium; } public void AddPremiumEvent(PremiumEvent premiumEvent) { using var db = _factory.CreateDbContext(); premiumEvent.CreatedBy = premiumEvent.CreatedBy ?? "system"; premiumEvent.CreatedOn = DateTime.UtcNow; premiumEvent.ModifiedBy = premiumEvent.ModifiedBy ?? "system"; premiumEvent.ModifiedOn = DateTime.UtcNow; db.PremiumEvent.Add(premiumEvent); db.SaveChanges(); } public IEnumerable GetPremiumEvents(int UserId) { using var db = _factory.CreateDbContext(); return db.PremiumEvent.Where(item => item.UserId == UserId).OrderByDescending(x => x.CreatedOn).ToList(); } } }