using Data.SeaHavenIndustries; using Microsoft.EntityFrameworkCore; using SeaHaven.DataServices.Interfaces; namespace SeaHaven.DataServices.Implementation { public class CommonDataService : ICommonDataService { private readonly ApplicationDbContext _context; public CommonDataService(ApplicationDbContext context) { _context = context; } public async Task<(IEnumerable Items, int TotalCount)> GetUsersPagedAsync(int page, int pageSize, string search, CancellationToken cancellationToken) { var query = _context.Users .Where(w => (w.FirstName ?? "").ToLower().Contains((search ?? "").ToLower())) .OrderByDescending(d => d.Id); var totalCount = await query.CountAsync(cancellationToken); var paginatedUsers = await query .Skip((page - 1) * pageSize) .Take(pageSize) .AsNoTracking() .ToListAsync(cancellationToken); return (paginatedUsers, totalCount); } public async Task> GetRoleNamesAsync(CancellationToken cancellationToken) { return await _context.Roles .AsNoTracking() .Select(s => s.Name) .ToListAsync(cancellationToken); } public async Task> GetSiteNamesAsync(CancellationToken cancellationToken) { return await _context.Locations .AsNoTracking() .Where(n => n.IsDeleted != true) .Select(n => new Locations { Id = n.Id, Name = n.Name, Title = n.Title }) .ToListAsync(cancellationToken); } public async Task> GetContactsAsync(CancellationToken cancellationToken) { return await _context.Contacts .AsNoTracking() .Select(n => new Contacts { Id = n.Id, FirstName = n.FirstName, LastName = n.LastName, Email = n.Email, PhoneNumber = n.PhoneNumber }) .ToListAsync(cancellationToken); } public async Task> GetCategoriesAsync(CancellationToken cancellationToken) { return await _context.Categories .AsNoTracking() .Select(s => new Category { Id = s.Id, Name = s.Name }) .ToListAsync(cancellationToken); } } }