/
rumina-v
/
database
Обзор
Документация
Войти
/
rumina-v
/
database
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
LibraryApp/Repositories/LoanRepository.cs
105 строк
3 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 LoanRepository : ILoanRepository { private readonly AppDbContext _context; public LoanRepository(AppDbContext context) { _context = context; } public async Task<List<Loan>> GetAllAsync() { return await _context.Loans .Include(x => x.Reader) .Include(x => x.Book) .ToListAsync(); } public async Task<Loan?> GetByIdAsync(int id) { return await _context.Loans .Include(x => x.Reader) .Include(x => x.Book) .FirstOrDefaultAsync(x => x.Id == id); } public async Task<Loan> AddAsync(Loan loan) { _context.Loans.Add(loan); await _context.SaveChangesAsync(); return loan; } public async Task<Loan?> GetActiveLoanByReaderAndBookAsync(int readerId, int bookId) { return await _context.Loans .FirstOrDefaultAsync(x => x.ReaderId == readerId && x.BookId == bookId && x.ReturnedAt == null && x.Status == "Active"); } public async Task<Loan?> UpdateAsync(int id, Loan loan) { var existingLoan = await _context.Loans .FirstOrDefaultAsync(x => x.Id == id); if (existingLoan is null) { return null; } existingLoan.ReaderId = loan.ReaderId; existingLoan.BookId = loan.BookId; existingLoan.IssuedAt = loan.IssuedAt; existingLoan.DueDate = loan.DueDate; existingLoan.ReturnedAt = loan.ReturnedAt; existingLoan.Status = loan.Status; await _context.SaveChangesAsync(); return existingLoan; } public async Task<bool> DeleteAsync(int id) { var loan = await _context.Loans.FirstOrDefaultAsync(x => x.Id == id); if (loan is null) { return false; } _context.Loans.Remove(loan); await _context.SaveChangesAsync(); return true; } public async Task<List<Loan>> GetOverdueLoansAsync() { return await _context.Loans .Include(x => x.Reader) .Include(x => x.Book) .Where(x => x.Status == "Overdue" || (x.ReturnedAt == null && x.DueDate < DateTime.UtcNow)) .ToListAsync(); } public async Task<List<Loan>> GetActiveLoansByReaderIdAsync(int readerId) { return await _context.Loans .Include(x => x.Reader) .Include(x => x.Book) .Where(x => x.ReaderId == readerId && x.ReturnedAt == null && x.Status == "Active") .ToListAsync(); } }