/
rumina-v
/
database
Обзор
Документация
Войти
/
rumina-v
/
database
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
LibraryApp/Repositories/ReaderRepository.cs
96 строк
2 KB
Viktoria Rumina
Add solution files
04 июн 2026, 12:13
04 июн 2026, 12:13
73cfef0
Код
Авторство
О чём код?
using LibraryApp.Abstractions; using LibraryApp.Data; using LibraryApp.Entities; using Microsoft.EntityFrameworkCore; namespace LibraryApp.Repositories; public class ReaderRepository : IReaderRepository { private readonly AppDbContext _context; public ReaderRepository(AppDbContext context) { _context = context; } public async Task<List<Reader>> GetAllAsync() { return await _context.Readers .Include(x => x.Profile) .Include(x => x.Loans) .ToListAsync(); } public async Task<Reader?> GetByIdAsync(int id) { return await _context.Readers .Include(x => x.Profile) .Include(x => x.Loans) .FirstOrDefaultAsync(x => x.Id == id); } public async Task<Reader> AddAsync(Reader reader) { _context.Readers.Add(reader); await _context.SaveChangesAsync(); return reader; } public async Task<Reader?> UpdateAsync(int id, Reader reader) { var existingReader = await _context.Readers .FirstOrDefaultAsync(x => x.Id == id); if (existingReader is null) { return null; } existingReader.FullName = reader.FullName; existingReader.Email = reader.Email; existingReader.RegisteredAt = reader.RegisteredAt; await _context.SaveChangesAsync(); return existingReader; } public async Task<bool> DeleteAsync(int id) { var reader = await _context.Readers.FirstOrDefaultAsync(x => x.Id == id); if (reader is null) { return false; } _context.Readers.Remove(reader); await _context.SaveChangesAsync(); return true; } public async Task<List<Reader>> GetReadersWithOverdueBooksAsync() { return await _context.Readers .Include(x => x.Profile) .Include(x => x.Loans) .Where(x => x.Loans.Any(l => l.Status == "Overdue" || (l.ReturnedAt == null && l.DueDate < DateTime.UtcNow))) .ToListAsync(); } public async Task<List<Reader>> GetTopReadersByLoansCountAsync(int count) { if (count <= 0) { count = 1; } return await _context.Readers .Include(x => x.Profile) .Include(x => x.Loans) .OrderByDescending(x => x.Loans.Count) .Take(count) .ToListAsync(); } }