using GasStation.Entities; using GasStation.Entities.Enums; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Npgsql; using Dapper; using System; namespace GasStation.Repositories.Implementations; public class GasmanRepository : IGasmanRepository { private readonly IConnectionString _connectionString; private readonly ILogger _logger; public GasmanRepository(IConnectionString connectionString, ILogger logger) { _connectionString = connectionString; _logger = logger; } public void CreateGasman(Gasman gasman) { _logger.LogInformation("Добавление объекта"); _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(gasman)); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var queryInsert = @" INSERT INTO gasman (gasmanName, phoneNumber, post) VALUES (@GasmanName, @PhoneNumber, @Post)"; connection.Execute(queryInsert, gasman); } catch (Exception ex) { _logger.LogError(ex, "Ошибка при добавлении объекта"); throw; } } public void DeleteGasman(int id) { _logger.LogInformation("Удаление объекта"); _logger.LogDebug("Объект: {id}", id); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var queryDelete = @" DELETE FROM gasman WHERE id=@id"; connection.Execute(queryDelete, new { id }); } catch (Exception ex) { _logger.LogError(ex, "Ошибка при удалении объекта"); throw; } } public Gasman ReadGasmanByID(int id) { _logger.LogInformation("Получение объекта по идентификатору"); _logger.LogDebug("Объект: {id}", id); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var querySelect = @" SELECT * FROM gasman WHERE id=@id"; var gasman = connection.QueryFirst(querySelect, new { id }); _logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(gasman)); return gasman; } catch (Exception ex) { _logger.LogError(ex, "Ошибка при поиске объекта"); throw; } } public IEnumerable ReadGasman() { _logger.LogInformation("Получение всех объектов"); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var querySelect = @"SELECT * FROM gasman"; var gasman = connection.Query(querySelect); _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(gasman)); return gasman; } catch (Exception ex) { _logger.LogError(ex, "Ошибка при чтении объектов"); throw; } } public void UpdateGasman(Gasman gasman) { _logger.LogInformation("Редактирование объекта"); _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(gasman)); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var queryUpdate = @" UPDATE gasman SET gasmanName=@GasmanName, phoneNumber=@PhoneNumber, post=@Post WHERE id=@Id"; connection.Execute(queryUpdate, gasman); } catch (Exception ex) { _logger.LogError(ex, "Ошибка при редактировании объекта"); throw; } } }