using Domain.Entities; using Domain.Generics; using Microsoft.EntityFrameworkCore; using Models.Helpers; using Models.Interfaces; using Models.Models; namespace Models.Repositories.Stock { public class PhLSMUnitOfMeasureRepository(PhronCareOperationsHubContext context) : IPhLSMUnitOfMeasureRepository { private readonly PhronCareOperationsHubContext _context = context; public async Task> GetAllAsync(int page = 1, int pageSize = 100) { var query = _context.PhLsmUnitOfMeasures.AsQueryable(); var paged = await query.ToPagedResultAsync(page, pageSize); return new PagedResult { Items = paged.Items.Select(EntityMapper.MapEntity), TotalItems = paged.TotalItems, Page = paged.Page, PageSize = paged.PageSize }; } public async Task GetByIdAsync(int id) { var entity = await _context.PhLsmUnitOfMeasures.FindAsync(id); return entity != null ? EntityMapper.MapEntity(entity) : null; } public async Task ExistsByCodeAsync(string code) { if (string.IsNullOrWhiteSpace(code)) return false; return await _context.PhLsmUnitOfMeasures .AnyAsync(x => x.Code.ToLower() == code.ToLower()); } public async Task> GetAllCodesAsync() { return await _context.PhLsmUnitOfMeasures .Select(x => x.Code) .ToListAsync(); } public async Task AddAsync(ELSUnitOfMeasure model) { var entity = new PhLsmUnitOfMeasure { Name = model.Name, Description = model.Description, Code = model.Code // si lo tenés }; _context.PhLsmUnitOfMeasures.Add(entity); await _context.SaveChangesAsync(); return entity.Id; } public async Task UpdateAsync(ELSUnitOfMeasure model) { var entity = await _context.PhLsmUnitOfMeasures.FindAsync(model.Id); if (entity == null) throw new Exception("Unidad no encontrada"); entity.Name = model.Name; entity.Description = model.Description; entity.Code = model.Code; await _context.SaveChangesAsync(); } public async Task> SearchAsync(string? text, int page = 1, int pageSize = 100) { var query = _context.PhLsmUnitOfMeasures.AsQueryable(); if (!string.IsNullOrWhiteSpace(text)) { var lowered = text.ToLower(); query = query.Where(x => x.Name.ToLower().Contains(lowered) || x.Description.ToLower().Contains(lowered)); } var paged = await query.ToPagedResultAsync(page, pageSize); return new PagedResult { Items = paged.Items.Select(EntityMapper.MapEntity), TotalItems = paged.TotalItems, Page = paged.Page, PageSize = paged.PageSize }; } } }