From 8f35937785ba5ed2bc128d4ecca4de40f0345498 Mon Sep 17 00:00:00 2001 From: sheymuh Date: Wed, 20 Nov 2024 12:12:55 +0400 Subject: [PATCH] =?UTF-8?q?=D0=BD=D0=B5=20=D1=81=D0=BE=D0=B2=D1=81=D0=B5?= =?UTF-8?q?=D0=BC=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectPassengerTransportation/Program.cs | 21 +++ .../ProjectPassengerTransportation.csproj | 18 +++ .../Repositories/IConnectionString.cs | 6 + .../Implementations/BusRepository.cs | 129 +++++++++++++++--- .../Implementations/ConnectionString.cs | 6 + .../appsettings.json | 15 ++ 6 files changed, 177 insertions(+), 18 deletions(-) create mode 100644 ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/IConnectionString.cs create mode 100644 ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/ConnectionString.cs create mode 100644 ProjectPassengerTransportation/ProjectPassengerTransportation/appsettings.json diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Program.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Program.cs index ca70ad9..6687270 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Program.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Program.cs @@ -2,6 +2,10 @@ using ProjectPassengerTransportation.Repositories.Implementations; using ProjectPassengerTransportation.Repositories; using Unity.Lifetime; using Unity; +using Unity.Microsoft.Logging; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Serilog; namespace ProjectPassengerTransportation { @@ -23,13 +27,30 @@ namespace ProjectPassengerTransportation { var container = new UnityContainer(); + container.AddExtension(new LoggingExtension(CreateLoggerFactory())); + container.RegisterType(new TransientLifetimeManager()); container.RegisterType(new TransientLifetimeManager()); container.RegisterType(new TransientLifetimeManager()); container.RegisterType(new TransientLifetimeManager()); container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + 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/ProjectPassengerTransportation/ProjectPassengerTransportation/ProjectPassengerTransportation.csproj b/ProjectPassengerTransportation/ProjectPassengerTransportation/ProjectPassengerTransportation.csproj index accbdf0..ebed082 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/ProjectPassengerTransportation.csproj +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/ProjectPassengerTransportation.csproj @@ -9,7 +9,19 @@ + + + + + + + + + + + + @@ -27,4 +39,10 @@ + + + PreserveNewest + + + \ No newline at end of file diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/IConnectionString.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/IConnectionString.cs new file mode 100644 index 0000000..fbb4f20 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/IConnectionString.cs @@ -0,0 +1,6 @@ +namespace ProjectPassengerTransportation.Repositories; + +public interface IConnectionString +{ + public string ConnectionString { get; } +} diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/BusRepository.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/BusRepository.cs index 1cbd805..ef43286 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/BusRepository.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/BusRepository.cs @@ -1,32 +1,125 @@ -using ProjectPassengerTransportation.Entities; -using ProjectPassengerTransportation.Entities.Enums; +using Dapper; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; +using ProjectPassengerTransportation.Entities; +using System.Data.SqlClient; namespace ProjectPassengerTransportation.Repositories.Implementations; public class BusRepository : IBusRepository { + private readonly IConnectionString _connectionString; + + private readonly ILogger _logger; + + public BusRepository(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } + public void CreateBus(Bus bus) { - - } + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(bus)); - public void DeleteBus(int id) - { - - } - - public Bus ReadBusById(int busId) - { - return Bus.CreateEntity(0, string.Empty, BusType.None); - } - - public IEnumerable ReadBuses() - { - return []; + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryInsert = @" +INSERT INTO bus (licence_plate, bus_type_id) +VALUES (@LicencePlate, @Type)"; + connection.Execute(queryInsert, bus); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавлении объекта"); + throw; + } } public void UpdateBus(Bus bus) { - + _logger.LogInformation("Редактирование объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(bus)); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryUpdate = @" +UPDATE bus +SET + licence_plate=@LicencePlate, + bus_type_id=@Type +WHERE id=@Id"; + connection.Execute(queryUpdate, bus); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при редактировании объекта"); + throw; + } + } + + public void DeleteBus(int id) + { + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryDelete = @" +DELETE FROM bus +WHERE id=@id"; + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } + } + + public Bus ReadBusById(int id) + { + _logger.LogInformation("Получение объекта по идентификатору"); + _logger.LogDebug("Объект: {id}", id); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = @" +SELECT * FROM bus +WHERE [id]=@id"; + var bus = connection.QueryFirst(querySelect, new { id }); + _logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(bus)); + + return bus; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при поиске объекта"); + throw; + } + } + + public IEnumerable ReadBuses() + { + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM bus"; + var buses = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(buses)); + return buses; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } } } diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/ConnectionString.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/ConnectionString.cs new file mode 100644 index 0000000..4cf0121 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/ConnectionString.cs @@ -0,0 +1,6 @@ +namespace ProjectPassengerTransportation.Repositories.Implementations; + +public class ConnectionString : IConnectionString +{ + string IConnectionString.ConnectionString => "Host=localhost;Port=5432;Username=postgres;Password=postgres;Database=passanger_transportation"; +} diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/appsettings.json b/ProjectPassengerTransportation/ProjectPassengerTransportation/appsettings.json new file mode 100644 index 0000000..dc6a759 --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/appsettings.json @@ -0,0 +1,15 @@ +{ + "Serilog": { + "Using": [ "Serilog.Sinks.File" ], + "MinimumLevel": "Debug", + "WriteTo": [ + { + "Name": "File", + "Args": { + "path": "Logs/passenger_transportation_log.txt", + "rollingInterval": "Day" + } + } + ] + } +} \ No newline at end of file