146 lines
5.3 KiB
C#
Raw Normal View History

2024-12-08 13:24:07 +04:00
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Npgsql;
using ProjectLibrary.Entities;
2024-11-12 23:13:20 +04:00
using ProjectLibrary.Entities.Enums;
2024-12-08 13:24:07 +04:00
using ProjectLibrary.Repositories;
using Dapper;
2024-11-20 19:31:06 +04:00
using ProjectLibrary.Repositores;
2024-11-12 23:13:20 +04:00
namespace ProjectLibrary.Repositories.Implementations
{
public class BookRepository : IBookRepository
{
2024-12-08 13:24:07 +04:00
private readonly IConnectionString _connectionString;
private readonly ILogger<BookRepository> _logger;
public BookRepository(IConnectionString connectionString, ILogger<BookRepository> logger)
{
_connectionString = connectionString;
_logger = logger;
}
// Добавление книги
2024-11-12 23:13:20 +04:00
public void CreateBook(Book book)
{
2024-12-08 13:24:07 +04:00
_logger.LogInformation("Добавление книги");
_logger.LogDebug("Книга: {json}", JsonConvert.SerializeObject(book));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryInsert = @"
INSERT INTO Book (Author, Name, TypeBookID)
VALUES (@Author, @Name, @TypeBookID)";
connection.Execute(queryInsert, book);
_logger.LogInformation("Книга успешно добавлена");
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении книги");
throw;
}
2024-11-12 23:13:20 +04:00
}
2024-12-08 13:24:07 +04:00
// Обновление информации о книге
2024-11-20 19:31:06 +04:00
public void UpdateBook(Book book)
{
2024-12-08 13:24:07 +04:00
_logger.LogInformation("Редактирование книги");
_logger.LogDebug("Книга: {json}", JsonConvert.SerializeObject(book));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"
UPDATE Book
SET
Author = @Author,
Name = @Name,
TypeBookID = @TypeBookID
WHERE ID = @ID";
connection.Execute(queryUpdate, book);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании книги");
throw;
}
2024-11-20 19:31:06 +04:00
}
2024-12-08 13:24:07 +04:00
// Удаление книги
2024-11-12 23:13:20 +04:00
public void DeleteBook(int id)
{
2024-12-08 13:24:07 +04:00
_logger.LogInformation("Удаление книги с Id={id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryDelete = @"
DELETE FROM Book
WHERE ID = @id";
var affectedRows = connection.Execute(queryDelete, new { id });
if (affectedRows > 0)
{
_logger.LogInformation("Книга с Id={id} успешно удалена", id);
}
else
{
_logger.LogWarning("Книга с Id={id} не найдена для удаления", id);
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении книги с Id={id}", id);
throw;
}
2024-11-12 23:13:20 +04:00
}
2024-12-08 13:24:07 +04:00
// Получение книги по ID
2024-11-12 23:13:20 +04:00
public Book ReadBookById(int id)
{
2024-12-08 13:24:07 +04:00
_logger.LogInformation("Получение книги по Id={id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM Book
WHERE ID = @id";
var book = connection.QueryFirstOrDefault<Book>(querySelect, new { id });
if (book != null)
{
_logger.LogDebug("Найдена книга: {json}", JsonConvert.SerializeObject(book));
}
else
{
_logger.LogWarning("Книга с Id={id} не найдена", id);
}
return book;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при получении книги с Id={id}", id);
throw;
}
2024-11-12 23:13:20 +04:00
}
2024-12-08 13:24:07 +04:00
// Получение всех книг
2024-11-12 23:13:20 +04:00
public IEnumerable<Book> ReadBooks()
{
2024-12-08 13:24:07 +04:00
_logger.LogInformation("Получение всех книг");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Book";
var books = connection.Query<Book>(querySelect);
_logger.LogDebug("Полученные книги: {json}", JsonConvert.SerializeObject(books));
return books;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при получении списка книг");
throw;
}
2024-11-12 23:13:20 +04:00
}
}
}