From d18fe8d6597b84e6b94e2e8e08f67cc6964d26e6 Mon Sep 17 00:00:00 2001 From: Petek1234 <149153720+Petek1234@users.noreply.github.com> Date: Fri, 22 Nov 2024 08:59:01 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=B0=202=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D0=B4=D0=BE=20=D0=BA=D0=BE=D0=BD=D1=86=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GasStation/GasStation/GasStation.csproj | 20 +++- GasStation/GasStation/Program.cs | 21 ++++ .../Repositories/IConnectionString.cs | 12 ++ .../Repositories/IFuelRepository.cs | 7 +- .../Implementations/CashierRepository.cs | 107 +++++++++++++++++- .../Implementations/ConnectionString.cs | 6 + .../Implementations/FuelRepository.cs | 105 +++++++++++++++-- GasStation/GasStation/appsettings.json | 15 +++ 8 files changed, 273 insertions(+), 20 deletions(-) create mode 100644 GasStation/GasStation/Repositories/IConnectionString.cs create mode 100644 GasStation/GasStation/Repositories/Implementations/ConnectionString.cs create mode 100644 GasStation/GasStation/appsettings.json diff --git a/GasStation/GasStation/GasStation.csproj b/GasStation/GasStation/GasStation.csproj index f2b439c..92f6c9a 100644 --- a/GasStation/GasStation/GasStation.csproj +++ b/GasStation/GasStation/GasStation.csproj @@ -2,7 +2,7 @@ WinExe - net7.0-windows + net8.0-windows7.0 enable true enable @@ -19,7 +19,19 @@ + + + + + + + + + + + + @@ -37,4 +49,10 @@ + + + PreserveNewest + + + \ No newline at end of file diff --git a/GasStation/GasStation/Program.cs b/GasStation/GasStation/Program.cs index e6e7fb9..692bb81 100644 --- a/GasStation/GasStation/Program.cs +++ b/GasStation/GasStation/Program.cs @@ -2,6 +2,10 @@ using GasStation.Repositories.Implementations; using GasStation.Repositories; using Unity.Lifetime; using Unity; +using Unity.Microsoft.Logging; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Serilog; namespace GasStation { @@ -23,13 +27,30 @@ namespace GasStation { var container = new UnityContainer(); + container.AddExtension(new LoggingExtension(CreateLoggerFactory())); + container.RegisterType (); container.RegisterType (); container.RegisterType (); container.RegisterType (); container.RegisterType (); + container.RegisterType(); + return container; } + + private static LoggerFactory CreateLoggerFactory() + { + var loggerFactory = new LoggerFactory(); + loggerFactory.AddSerilog(new LoggerConfiguration() + .ReadFrom.Configuration(new ConfigurationBuilder() + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("appsettings.json") + .Build()) + .CreateLogger()); + return loggerFactory; + } + } } \ No newline at end of file diff --git a/GasStation/GasStation/Repositories/IConnectionString.cs b/GasStation/GasStation/Repositories/IConnectionString.cs new file mode 100644 index 0000000..d12e9b5 --- /dev/null +++ b/GasStation/GasStation/Repositories/IConnectionString.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace GasStation.Repositories; + +public interface IConnectionString +{ + public string ConnectionString { get; } +} diff --git a/GasStation/GasStation/Repositories/IFuelRepository.cs b/GasStation/GasStation/Repositories/IFuelRepository.cs index 5d80d21..74cbf61 100644 --- a/GasStation/GasStation/Repositories/IFuelRepository.cs +++ b/GasStation/GasStation/Repositories/IFuelRepository.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using GasStation.Entities; +using GasStation.Entities; namespace GasStation.Repositories; diff --git a/GasStation/GasStation/Repositories/Implementations/CashierRepository.cs b/GasStation/GasStation/Repositories/Implementations/CashierRepository.cs index d264b5e..ed897e4 100644 --- a/GasStation/GasStation/Repositories/Implementations/CashierRepository.cs +++ b/GasStation/GasStation/Repositories/Implementations/CashierRepository.cs @@ -1,34 +1,133 @@ using System; using System.Collections.Generic; +using System.Diagnostics.Contracts; using System.Linq; using System.Text; using System.Threading.Tasks; +using Dapper; using GasStation.Entities; using GasStation.Entities.Enums; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; namespace GasStation.Repositories.Implementations; public class CashierRepository : ICashierRepository { + private readonly IConnectionString _connectionString; + private readonly ILogger _logger; + + public CashierRepository(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } + public void CreateCashier(Cashier cashier) - { + { + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(cashier)); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryInsert = @" + INSERT INTO Cashier (FirstName, LastName, CashierPost) + VALUES (@FirstName, @LastName, @CashierPost)"; + connection.Execute(queryInsert, cashier); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавлении объекта"); + throw; + } } public void DeleteCashier(int id) { + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryDelete = @" + DELETE FROM Cashier + WHERE Id=@id"; + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } } public Cashier ReadCashierById(int id) { - return Cashier.CreateEntity(0, string.Empty, string.Empty, CashierPost.None); + _logger.LogInformation("Получение объекта по идентификатору"); + _logger.LogDebug("Объект: {id}", id); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = @" + SELECT * FROM Cashier + WHERE Id=@id"; + var cashier = connection.QueryFirst(querySelect, new { id }); + _logger.LogDebug("Найденный объект: {json}", + JsonConvert.SerializeObject(cashier)); + return cashier; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при поиске объекта"); + throw; + } } public IEnumerable ReadCashiers() { - return []; + _logger.LogInformation("Получение всех объектов"); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM Cashier"; + var cashier = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", + JsonConvert.SerializeObject(cashier)); + return cashier; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } } public void UpdateCashier(Cashier cashier) - { + { + _logger.LogInformation("Редактирование объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(cashier)); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryUpdate = @" + UPDATE Cashier + SET + FirstName=@FirstName, + LastName=@LastName, + CashierPost=@CashierPost + WHERE Id=@Id"; + connection.Execute(queryUpdate, cashier); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при редактировании объекта"); + throw; + } } } diff --git a/GasStation/GasStation/Repositories/Implementations/ConnectionString.cs b/GasStation/GasStation/Repositories/Implementations/ConnectionString.cs new file mode 100644 index 0000000..569b67e --- /dev/null +++ b/GasStation/GasStation/Repositories/Implementations/ConnectionString.cs @@ -0,0 +1,6 @@ +namespace GasStation.Repositories.Implementations; + +public class ConnectionString : IConnectionString +{ + string IConnectionString.ConnectionString => "Server=localhost,5432;Database=egov;Uid=postgres;Pwd=postgres;"; +} diff --git a/GasStation/GasStation/Repositories/Implementations/FuelRepository.cs b/GasStation/GasStation/Repositories/Implementations/FuelRepository.cs index ac9ff6e..42485ac 100644 --- a/GasStation/GasStation/Repositories/Implementations/FuelRepository.cs +++ b/GasStation/GasStation/Repositories/Implementations/FuelRepository.cs @@ -1,34 +1,121 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using GasStation.Entities; -using GasStation.Entities.Enums; +using GasStation.Entities; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; +using Dapper; +using System.Data.SqlClient; + namespace GasStation.Repositories.Implementations; public class FuelRepository : IFuelRepository { + private readonly IConnectionString _connectionString; + private readonly ILogger _logger; + + public FuelRepository(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } + public void CreateFuel(Fuel fuel) { + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(fuel)); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryInsert = @" + INSERT INTO Fuel (Cost, Type) + VALUES (@Cost, @Type)"; + connection.Execute(queryInsert, fuel); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавлении объекта"); + throw; + } } public void DeleteFuel(int id) { + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryDelete = @" + DELETE FROM Fuel + WHERE Id=@id"; + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } } public Fuel ReadFuelById(int id) { - return Fuel.CreateEntity(0, 0, FuelType.Fuel_diesel); + _logger.LogInformation("Получение объекта по идентификатору"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = @" + SELECT * FROM Fuel + WHERE Id=@id"; + var fuel = connection.QueryFirst(querySelect, new { id }); + _logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(fuel)); + return fuel; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при поиске объекта"); + throw; + } } public IEnumerable ReadFuels() { - return []; + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM Fuel"; + var fuels = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(fuels)); + return fuels; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } } public void UpdateFuel(Fuel fuel) { + _logger.LogInformation("Редактирование объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(fuel)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryUpdate = @" + UPDATE Fuel + SET + Cost=@Cost, + Type=@Type + WHERE Id=@Id"; + connection.Execute(queryUpdate, fuel); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при редактировании объекта"); + throw; + } } } diff --git a/GasStation/GasStation/appsettings.json b/GasStation/GasStation/appsettings.json new file mode 100644 index 0000000..0f5bd9b --- /dev/null +++ b/GasStation/GasStation/appsettings.json @@ -0,0 +1,15 @@ +{ + "Serilog": { + "Using": [ "Serilog.Sinks.File" ], + "MinimumLevel": "Debug", + "WriteTo": [ + { + "Name": "File", + "Args": { + "path": "Logs/gas_log.txt", + "rollingInterval": "Day" + } + } + ] + } +} \ No newline at end of file