using Data.SeaHavenIndustries; using Microsoft.EntityFrameworkCore; using SeaHaven.DataServices.Interfaces; namespace SeaHaven.DataServices.Implementation { public class VendorDataService : IVendorDataService { private readonly ApplicationDbContext _context; public VendorDataService(ApplicationDbContext context) { _context = context; } public async Task GetByIdAsync(int id) { return await _context.Vendors.FindAsync(id); } public async Task GetByIdWithDetailsAsync(int id) { return await _context.Vendors .FirstOrDefaultAsync(v => v.Id == id); } public async Task> GetAllAsync() { return await _context.Vendors.ToListAsync(); } public async Task<(IEnumerable Items, int TotalCount)> GetPagedAsync( int page, int pageSize, string? search = null) { search ??= ""; var query = _context.Vendors.Where(v => v.IsActive); if (!string.IsNullOrWhiteSpace(search)) { var s = search.ToLower(); query = query.Where(v => (v.CompanyName ?? "").ToLower().Contains(s) || (v.ContactName ?? "").ToLower().Contains(s) || (v.Email ?? "").ToLower().Contains(s) || (v.TradeSpecialties ?? "").ToLower().Contains(s)); } var totalCount = await query.CountAsync(); var items = await query .OrderByDescending(v => v.Id) .Skip((page - 1) * pageSize) .Take(pageSize) .ToListAsync(); return (items, totalCount); } public async Task AddAsync(Vendor vendor) { await _context.Vendors.AddAsync(vendor); await _context.SaveChangesAsync(); return vendor; } public async Task UpdateAsync(Vendor vendor) { _context.Vendors.Update(vendor); await _context.SaveChangesAsync(); } public async Task DeleteAsync(int id) { var entity = await GetByIdAsync(id); if (entity != null) { _context.Vendors.Remove(entity); await _context.SaveChangesAsync(); } } public async Task ExistsAsync(int id) { return await _context.Vendors.AnyAsync(v => v.Id == id); } public async Task GetActiveTokenAsync(int vendorId) { return await _context.VendorAccessTokens .FirstOrDefaultAsync(t => t.VendorId == vendorId); } public async Task GetTokenByStringAsync(string token) { return await _context.VendorAccessTokens .FirstOrDefaultAsync(t => t.Token == token); } public async Task CountAsync() { return await _context.Vendors.CountAsync(); } } }