using Domain.Entities; using Microsoft.EntityFrameworkCore; using Models.Helpers; using Models.Interfaces; using Models.Models; using System.Xml.Linq; namespace Models.Repositories { public class PhSCustomerRepository(PhronCareOperationsHubContext context) : IPhSCustomerRepository { #region Declaraciones y Constructor private readonly PhronCareOperationsHubContext _context = context; #endregion public async Task> GetAllAsync() { var customers = await _context.PhSCustomers .Include(c => c.Accounttypes) .Include(c => c.PhSCustomerAddresses) .Include(c => c.PhSCustomerDocuments) .Take(100) .ToListAsync(); return customers.Select(EntityMapper.MapEntity); } public async Task GetByIdAsync(int id) { var customer = await _context.PhSCustomers .Include(c => c.Accounttypes) .Include(c => c.PhSCustomerAddresses) .Include(c => c.PhSCustomerDocuments) .Include(c => c.PhSQuoteHeaders) .FirstOrDefaultAsync(c => c.Id == id); return customer != null ? EntityMapper.MapEntity(customer) : null; } public async Task> SearchAsync(string? name, string? document, string? email) { var query = _context.PhSCustomers .Include(c => c.Accounttypes) .Include(c => c.PhSCustomerDocuments) .Include(c => c.PhSCustomerAddresses) .AsQueryable(); if (!string.IsNullOrWhiteSpace(name)) { var loweredName = name.ToLower(); query = query.Where(c => c.Name.ToLower().Contains(loweredName) || c.BusinessName.ToLower().Contains(loweredName)); } if (!string.IsNullOrWhiteSpace(document)) { var loweredDoc = document.ToLower(); query = query.Where(c => c.PhSCustomerDocuments.Any(d => d.DocumentNumber.ToLower().Contains(loweredDoc))); } if (!string.IsNullOrWhiteSpace(email)) { var loweredEmail = email.ToLower(); query = query.Where(c => c.PhSCustomerAddresses.Any(a => a.Email.ToLower().Contains(loweredEmail))); } var customers = await query.ToListAsync(); return customers.Select(EntityMapper.MapEntity); } public async Task AddAsync(ECustomer entity) { var customer = EntityMapper.MapEntity(entity); await _context.PhSCustomers.AddAsync(customer); await _context.SaveChangesAsync(); return EntityMapper.MapEntity(customer); } public async Task UpdateAsync(ECustomer entity) { var customer = await _context.PhSCustomers.FindAsync(entity.Id); if (customer == null) return false; _context.Entry(customer).CurrentValues.SetValues(entity); await _context.SaveChangesAsync(); return true; } public async Task DeleteAsync(int id) { var customer = await _context.PhSCustomers.FindAsync(id); if (customer == null) return false; _context.PhSCustomers.Remove(customer); await _context.SaveChangesAsync(); return true; } } }