/
rumina-v
/
database
Обзор
Документация
Войти
/
rumina-v
/
database
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
LibraryApp/Services/BookService.cs
63 строки
2 KB
Viktoria Rumina
Add solution files
04 июн 2026, 12:13
04 июн 2026, 12:13
73cfef0
Код
Авторство
О чём код?
using LibraryApp.Abstractions; using LibraryApp.Entities; namespace LibraryApp.Services; public class BookService : IBookService { private readonly IBookRepository _bookRepository; public BookService(IBookRepository bookRepository) { _bookRepository = bookRepository; } public async Task<List<Book>> GetAllAsync() => await _bookRepository.GetAllAsync(); public async Task<Book?> GetByIdAsync(int id) => await _bookRepository.GetByIdAsync(id); public async Task<Book> AddAsync(Book book) { if (string.IsNullOrWhiteSpace(book.Title)) throw new Exception("Title is required"); if (string.IsNullOrWhiteSpace(book.Author)) throw new Exception("Author is required"); if (book.TotalCopies < 0) throw new Exception("TotalCopies must be >= 0"); if (book.AvailableCopies <= 0) book.AvailableCopies = book.TotalCopies; return await _bookRepository.AddAsync(book); } public async Task<Book?> UpdateAsync(int id, Book book) { var existing = await _bookRepository.GetByIdAsync(id); if (existing is null) return null; if (book.AvailableCopies > book.TotalCopies) throw new Exception("AvailableCopies cannot exceed TotalCopies"); existing.Title = book.Title; existing.Author = book.Author; existing.PublishYear = book.PublishYear; existing.TotalCopies = book.TotalCopies; existing.AvailableCopies = book.AvailableCopies; return await _bookRepository.UpdateAsync(id, existing); } public async Task<bool> DeleteAsync(int id) => await _bookRepository.DeleteAsync(id); public async Task<List<Book>> GetAvailableBooksAsync() => await _bookRepository.GetAvailableBooksAsync(); public async Task<List<Book>> GetMostPopularBooksAsync(int count) => await _bookRepository.GetMostPopularBooksAsync(count); }