using Dapper; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Npgsql; using ProjectGarage.Entities; using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ProjectGarage.Repositories.Implementations; public class DriverRepository : IDriverRepository { public 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); connection.Open(); var queryInsert = @" INSERT INTO driver (driver_fname, driver_lname, id_truck) VALUES (@First_name, @Last_name, @TruckID);"; connection.Execute(queryInsert, driver); } 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 driver_fname=@First_name, driver_lname=@Last_name, id_truck=@TruckID WHERE id_driver=@Id"; connection.Execute(queryUpdate, driver); } catch (Exception ex) { _logger.LogError(ex, "Ошибка при редактировании объекта"); throw; } } public void DeleteDriver(int driverId) { _logger.LogInformation("Удаление объекта"); _logger.LogDebug("Объект: {id}", driverId); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var queryDelete = @" DELETE FROM driver WHERE id_driver=@driverId"; connection.Execute(queryDelete, new { driverId }); } catch (Exception ex) { _logger.LogError(ex, "Ошибка при удалении объекта"); throw; } } public Driver ReadDriverByID(int driverId) { _logger.LogInformation("Получение объекта по идентификатору"); _logger.LogDebug("Объект: {id}", driverId); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var querySelect = @" SELECT * FROM driver WHERE id_driver=@driverId"; var driver = connection.QueryFirst(querySelect, new { driverId }); _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; } } }