using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using SkyArtShop.Data; using SkyArtShop.Models; namespace SkyArtShop.Services; public class SqlDataService { private readonly SkyArtShopDbContext _context; public SqlDataService(SkyArtShopDbContext context) { _context = context; } public async Task> GetAllAsync() where T : class { return await _context.Set().ToListAsync(); } public async Task GetByIdAsync(string id) where T : class { return await _context.Set().FindAsync(id); } public async Task InsertAsync(T entity) where T : class { _context.Set().Add(entity); await _context.SaveChangesAsync(); return entity; } public async Task UpdateAsync(T entity) where T : class { _context.Set().Update(entity); await _context.SaveChangesAsync(); return entity; } public async Task DeleteAsync(string id) where T : class { T val = await GetByIdAsync(id); if (val != null) { _context.Set().Remove(val); await _context.SaveChangesAsync(); } } public async Task GetUserByEmailAsync(string email) { return await _context.AdminUsers.FirstOrDefaultAsync((AdminUser u) => u.Email.ToLower() == email.ToLower()); } public async Task> GetFeaturedProductsAsync() { return await _context.Products.Where((Product p) => p.IsFeatured && p.IsActive).ToListAsync(); } public async Task> GetTopSellersAsync(int count = 10) { return await (from p in _context.Products where p.IsTopSeller && p.IsActive orderby p.UnitsSold descending select p).Take(count).ToListAsync(); } public async Task GetProductBySlugAsync(string slug) { return await _context.Products.FirstOrDefaultAsync((Product p) => p.Slug == slug && p.IsActive); } public async Task GetBlogPostBySlugAsync(string slug) { return await _context.BlogPosts.FirstOrDefaultAsync((BlogPost b) => b.Slug == slug && b.IsPublished); } public async Task GetPageBySlugAsync(string slug) { return await _context.Pages.FirstOrDefaultAsync((Page p) => p.PageSlug == slug && p.IsActive); } public async Task GetSiteSettingsAsync() { return await _context.SiteSettings.FirstOrDefaultAsync(); } public async Task> GetActiveMenuItemsAsync() { return await (from m in _context.MenuItems where m.IsActive orderby m.DisplayOrder select m).ToListAsync(); } }