using Microsoft.EntityFrameworkCore; namespace ApplianceRepair { public class HomePageReader(DatabaseContext db) { public async Task ReadLatestRecord() { var records = await db.HomePage.OrderByDescending(page => page.Id).FirstOrDefaultAsync(); return records; } public async Task ReadLatestRecordWithModel(ContentCardReader contentCardReader) { var record = await db.HomePage.OrderByDescending(page => page.Id).FirstOrDefaultAsync(); if (record == null) { return null; } var model = new HomePageModel(record); var pageName = HomePageModel.PageName; var services = await contentCardReader.ReadAllByPageAndGroup(pageName, HomePageModel.ContentCardTypes.Service.ToString()) ?? []; foreach (var card in services) { model.ServicesCards.Add(new ContentCardModel(card)); } var trust = await contentCardReader.ReadAllByPageAndGroup(pageName, HomePageModel.ContentCardTypes.Trust.ToString()) ?? []; foreach (var card in trust) { model.TrustCards.Add(new ContentCardModel(card)); } return model; } public async Task AddRecord(HomePageRecord record) { await db.AddAsync(record); await db.SaveChangesAsync(); } } public class ContentCardReader(DatabaseContext db) { public async Task?> ReadAllByPageAndGroup(string belongsToPage, string group) { return await db.ContentCards.Where(card => card.BelongsToPage == belongsToPage && card.Group == group).ToListAsync(); } public async Task?> ReadAllByPage(string belongsToPage) { return await db.ContentCards.Where(card => card.BelongsToPage == belongsToPage).ToListAsync(); } public async Task AddRecord(ContentCardRecord record) { await db.ContentCards.AddAsync(record); } public async Task UpdateRecord(ContentCardRecord record) { var found = db.ContentCards.Where((card) => card.Id == record.Id).FirstOrDefault(); if (found == null) { await AddRecord(record); } else { db.ContentCards.Update(record); } await db.SaveChangesAsync(); } } public class BusinessConfigReader(DatabaseContext db) { public async Task ReadLatestRecord() { return await db.BusinessConfig.OrderByDescending(page => page.Id).FirstOrDefaultAsync(); } } }