using PhonebookService.Domain.Models; using PhonebookService.Domain.Queries; using PhonebookService.Domain.Repositories; namespace PhonebookService.Infrastructure.Repositories; /// /// Phonebook repository implementation /// public class PhonebookRepository : IPhonebookRepository { private readonly PhonebookContext _context; public PhonebookRepository(PhonebookContext context) { _context = context ?? throw new ArgumentNullException(nameof(context)); } /// public async Task CreateItemAsync(PhonebookRecord item) { var entry = await _context.Records.AddAsync(item); await _context.SaveChangesAsync(); return entry.Entity; } /// public async Task DeleteItemAsync(PhonebookRecord item) { _context.Records.Remove(item); await _context.SaveChangesAsync(); } /// public async Task GetItemByIdAsync(int id) { var entry = await _context.Records.FindAsync(id); return entry; } /// public Task> GetItemsAsync(PhonebookFilterQuery query) { IQueryable dbQuery = _context.Records; if (query.FirstName is not null) dbQuery = dbQuery.Where(i => i.FirstName.Contains(query.FirstName)); if (query.Phone is not null) dbQuery = dbQuery.Where(i => i.PhoneNumber == query.Phone); if (query.City is not null) dbQuery = dbQuery.Where(i => i.City == query.City); if (query.ZipCode is not null) dbQuery = dbQuery.Where(i => i.ZipCode == query.ZipCode); if (query.Sort == SortMode.Ascending) dbQuery = dbQuery.OrderBy(i => i.FirstName); else if (query.Sort == SortMode.Descending) dbQuery = dbQuery.OrderByDescending(i => i.FirstName); ICollection list = dbQuery.Skip((query.Page - 1) * 5).Take(5).ToList(); return Task.FromResult(list); } /// public async Task UpdateItemAsync(PhonebookRecord item) { var entry = _context.Records.Update(item); await _context.SaveChangesAsync(); return entry.Entity; } }