| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- using Dapper;
- using LibraryManagementSystem.Console.Database;
- using LibraryManagementSystem.Console.Models;
- using Serilog;
- namespace LibraryManagementSystem.Console.Repositories;
- /// <summary>
- /// Создает экземпляр репозитория книг.
- /// </summary>
- /// <param name="databaseManager">
- /// Менеджер подключения к базе данных.
- /// </param>
- public class BookRepository : IBookRepository
- {
- private readonly DatabaseManager _databaseManager;
- public BookRepository(DatabaseManager databaseManager)
- {
- _databaseManager = databaseManager;
- }
- /// <summary>
- /// Добавляет книгу в базу данных.
- /// </summary>
- /// <param name="book">
- /// Объект книги.
- /// </param>
- /// <returns>
- /// ID созданной книги.
- /// </returns>
- /// <exception cref="Exception">
- /// Возникает при ошибке добавления книги.
- /// </exception>
- public int Create(Book book)
- {
- try
- {
- using var connection = _databaseManager.CreateConnection();
- string sql = """
- INSERT INTO books
- (
- title,
- author,
- publication_year,
- owner_id
- )
- VALUES
- (
- @Title,
- @Author,
- @PublicationYear,
- @OwnerId
- )
- RETURNING id;
- """;
- int id = connection.ExecuteScalar<int>(sql, book);
- Log.Information("Создана книга {Title}", book.Title);
- return id;
- }
- catch (Exception ex)
- {
- Log.Error(ex, "Ошибка создания книги");
- throw;
- }
- }
- /// <summary>
- /// Возвращает список всех книг.
- /// </summary>
- /// <returns>
- /// Коллекция книг.
- /// </returns>
- public IEnumerable<Book> GetAll()
- {
- using var connection = _databaseManager.CreateConnection();
- return connection.Query<Book>("SELECT * FROM books");
- }
- /// <summary>
- /// Возвращает книгу по ID.
- /// </summary>
- /// <param name="id">
- /// ID книги.
- /// </param>
- /// <returns>
- /// Найденная книга или null.
- /// </returns>
- public Book? GetById(int id)
- {
- using var connection = _databaseManager.CreateConnection();
- return connection.QueryFirstOrDefault<Book>(
- """
- SELECT *
- FROM books
- WHERE id = @Id
- """,
- new { Id = id }
- );
- }
- /// <summary>
- /// Обновляет данные книги.
- /// </summary>
- /// <param name="book">
- /// Обновленный объект книги.
- /// </param>
- /// <returns>
- /// true - обновление успешно.
- /// false - книга не найдена.
- /// </returns>
- public bool Update(Book book)
- {
- using var connection = _databaseManager.CreateConnection();
- int affectedRows = connection.Execute(
- """
- UPDATE books
- SET
- title = @Title,
- author = @Author,
- publication_year = @PublicationYear
- WHERE id = @Id
- """,
- book
- );
- return affectedRows > 0;
- }
- /// <summary>
- /// Удаляет книгу по ID.
- /// </summary>
- /// <param name="id">
- /// ID книги.
- /// </param>
- /// <returns>
- /// true - удаление успешно.
- /// false - книга не найдена.
- /// </returns>
- public bool Delete(int id)
- {
- using var connection = _databaseManager.CreateConnection();
- int affectedRows = connection.Execute(
- """
- DELETE FROM books
- WHERE id = @Id
- """,
- new { Id = id }
- );
- return affectedRows > 0;
- }
- }
|