using ProjectLibrary.Entities; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Npgsql; using Dapper; using System.Collections.Generic; using ProjectLibrary.Repositores; namespace ProjectLibrary.Repositories { public class ReaderRepository : IReaderRepository { private readonly IConnectionString _connectionString; private readonly ILogger _logger; public ReaderRepository(IConnectionString connectionString, ILogger logger) { _connectionString = connectionString; _logger = logger; } // Добавление нового читателя public void CreateReader(Reader reader) { _logger.LogInformation("Добавление читателя"); _logger.LogDebug("Читатель: {json}", JsonConvert.SerializeObject(reader)); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var queryInsert = @" INSERT INTO Reader (Name, ReaderTicket, RegistrationDateRT) -- Используем правильные названия столбцов из вашей таблицы VALUES (@Name, @ReaderTicket, @RegistrationDateRT)"; connection.Execute(queryInsert, reader); _logger.LogInformation("Читатель успешно добавлен"); } catch (Exception ex) { _logger.LogError(ex, "Ошибка при добавлении читателя"); throw; } } // Обновление информации о читателе public void UpdateReader(Reader reader) { _logger.LogInformation("Редактирование читателя"); _logger.LogDebug("Читатель: {json}", JsonConvert.SerializeObject(reader)); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var queryUpdate = @" UPDATE Reader -- Используем правильное имя таблицы SET Name = @Name, -- Используем правильные названия столбцов ReaderTicket = @ReaderTicket, RegistrationDateRT = @RegistrationDateRT WHERE ID = @ID"; var affectedRows = connection.Execute(queryUpdate, new { Name = reader.Name, ReaderTicket = reader.ReaderTicket, RegistrationDateRT = reader.RegistrationDateRT, ID = reader.Id }); if (affectedRows > 0) { _logger.LogInformation("Читатель успешно обновлен"); } else { _logger.LogWarning("Читатель с ID={Id} не найден для обновления", reader.Id); } } catch (Exception ex) { _logger.LogError(ex, "Ошибка при редактировании читателя"); throw; } } // Удаление читателя public void DeleteReader(int id) { _logger.LogInformation("Удаление читателя с ID={id}", id); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var queryDelete = @" DELETE FROM Reader -- Используем правильное имя таблицы 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; } } // Получение читателя по ID public Reader ReadReaderById(int id) { _logger.LogInformation("Получение читателя по ID={id}", id); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var querySelect = @" SELECT * FROM Reader -- Используем правильное имя таблицы WHERE ID = @id"; var reader = connection.QueryFirstOrDefault(querySelect, new { id }); if (reader != null) { _logger.LogDebug("Найден читатель: {json}", JsonConvert.SerializeObject(reader)); } else { _logger.LogWarning("Читатель с ID={id} не найден", id); } return reader; } catch (Exception ex) { _logger.LogError(ex, "Ошибка при поиске читателя"); throw; } } // Получение всех читателей public List ReadReaders() { _logger.LogInformation("Получение всех читателей"); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var querySelect = "SELECT * FROM Reader"; // Используем правильное имя таблицы var readers = connection.Query(querySelect).ToList(); _logger.LogDebug("Полученные читатели: {json}", JsonConvert.SerializeObject(readers)); return readers; } catch (Exception ex) { _logger.LogError(ex, "Ошибка при чтении списка читателей"); throw; } } } }