using Dapper; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Npgsql; using ProjectFuel.Entities; using ProjectFuel.Entities; using ProjectFuel.Repositories; namespace ProjectFuel.Repositories.Implementations; public class CarRepository : ICarRepository { private readonly IConnectionString _connectionString; private readonly ILogger _logger; public CarRepository(IConnectionString connectionString, ILogger logger) { _connectionString = connectionString; _logger = logger; } public void CreateCar(Car car) { _logger.LogInformation("Добавление объекта"); _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(car)); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var queryInsert = @"INSERT INTO Cars (Car_Mark, Car_Model, Car_Type, License, Consumption_Rate) VALUES (@Car_Mark, @Car_Model, @Car_Type, @License, @Consumption_Rate)"; connection.Execute(queryInsert, car); } catch (Exception ex) { _logger.LogError(ex, "Ошибка при добавлении объекта"); throw; } } public void DeleteCar(int id) { _logger.LogInformation("Удаление объекта"); _logger.LogDebug("Объект: {id}", id); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var queryDelete = @"DELETE FROM Cars WHERE Cars_ID=@id"; connection.Execute(queryDelete, new { id }); } catch (Exception ex) { _logger.LogError(ex, "Ошибка при удалении объекта"); throw; } } public Car ReadCarByID(int id) { _logger.LogInformation("Получение объекта по идентификатору"); _logger.LogDebug("Объект: {id}", id); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var querySelect = @" SELECT * FROM Cars WHERE Car_ID=@id"; var car = connection.QueryFirst(querySelect, new { id }); _logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(car)); return car; } catch (Exception ex) { _logger.LogError(ex, "Ошибка при поиске объекта"); throw; } } public IEnumerable ReadCars() { _logger.LogInformation("Получение всех объектов"); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var querySelect = "SELECT * FROM Cars"; var cars = connection.Query(querySelect); _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(cars)); return cars; } catch (Exception ex) { _logger.LogError(ex, "Ошибка при чтении объектов"); throw; } } public void UpdateCar(Car car) { _logger.LogInformation("Редактирование объекта"); _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(car)); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var queryUpdate = @" UPDATE Cars SET Car_Mark=@Car_Mark, Car_Model=@Car_Model, Car_Type=@Car_Type, License=@License, Consumption_Rate=@Consumption_Rate WHERE Car_ID=@Car_ID"; connection.Execute(queryUpdate, car); } catch (Exception ex) { _logger.LogError(ex, "Ошибка при редактировании объекта"); throw; } } }