using Dapper; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Npgsql; using ProjectFuel.Entities; using ProjectFuel.Repositories; namespace ProjectFuel.Repositories.Implementations; public class DriverRepository : IDriverRepository { private readonly IConnectionString _connectionString; private readonly ILogger _logger; public DriverRepository(IConnectionString connectionString, ILogger logger) { _connectionString = connectionString; _logger = logger; } public void CreateDriver(Driver driver) { _logger.LogInformation("Добавление объекта"); _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(driver)); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var queryInsert = @"INSERT INTO Driver (Firstname, Secondname, Driver_License) VALUES (@Firstname, @Secondname, @Driver_License)"; connection.Execute(queryInsert, driver); } catch (Exception ex) { _logger.LogError(ex, "Ошибка при добавлении объекта"); throw; } } public void DeleteDriver(int id) { _logger.LogInformation("Удаление объекта"); _logger.LogDebug("Объект: {id}", id); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var queryDelete = @" DELETE FROM Driver WHERE Driver_ID=@id"; connection.Execute(queryDelete, new { id }); } catch (Exception ex) { _logger.LogError(ex, "Ошибка при удалении объекта"); throw; } } public Driver ReadDriverByID(int id) { _logger.LogInformation("Получение объекта по идентификатору"); _logger.LogDebug("Объект: {id}", id); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var querySelect = @" SELECT * FROM Driver WHERE Driver_ID=@id"; var driver = connection.QueryFirst(querySelect, new { id }); _logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(driver)); return driver; } catch (Exception ex) { _logger.LogError(ex, "Ошибка при поиске объекта"); throw; } } public IEnumerable ReadDrivers() { _logger.LogInformation("Получение всех объектов"); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var querySelect = "SELECT * FROM Driver"; var drivers = connection.Query(querySelect); _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(drivers)); return drivers; } catch (Exception ex) { _logger.LogError(ex, "Ошибка при чтении объектов"); throw; } } public void UpdateDriver(Driver driver) { _logger.LogInformation("Редактирование объекта"); _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(driver)); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var queryUpdate = @" UPDATE Driver SET Firstname=@Firstname, Secondname=@Secondname, Driver_License=@Driver_License WHERE Driver_ID=@Driver_ID"; connection.Execute(queryUpdate, driver); } catch (Exception ex) { _logger.LogError(ex, "Ошибка при редактировании объекта"); throw; } } }