From 745617d8b5ea3317ba88d138c46638917bb85fee Mon Sep 17 00:00:00 2001 From: TikhonElli Date: Sun, 1 Dec 2024 17:03:27 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=20=E2=84=962?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Forms/FormServicesProvision.Designer.cs | 6 +- .../ProjectAthletesAccommodation/Program.cs | 20 +++ .../ProjectAthletesAccommodation.csproj | 18 +++ .../Repositories/IConnectionString.cs | 6 + .../AthleteAccommodationRepository.cs | 71 +++++++++- .../Implementations/AthleteRepository.cs | 131 ++++++++++++++++-- .../Implementations/ConnectionString.cs | 7 + .../Implementations/HotelRepository.cs | 125 +++++++++++++++-- .../Implementations/RoomRepository.cs | 118 +++++++++++++++- .../ServiceProvisionRepository.cs | 87 +++++++++++- .../appsettings.json | 15 ++ 11 files changed, 565 insertions(+), 39 deletions(-) create mode 100644 ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/IConnectionString.cs create mode 100644 ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/ConnectionString.cs create mode 100644 ProjectAthletesAccommodation/ProjectAthletesAccommodation/appsettings.json diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormServicesProvision.Designer.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormServicesProvision.Designer.cs index 5cc2938..95fe142 100644 --- a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormServicesProvision.Designer.cs +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormServicesProvision.Designer.cs @@ -41,7 +41,7 @@ panel1.Controls.Add(buttonDel); panel1.Controls.Add(buttonAdd); panel1.Dock = DockStyle.Right; - panel1.Location = new Point(712, 0); + panel1.Location = new Point(792, 0); panel1.Name = "panel1"; panel1.Size = new Size(122, 361); panel1.TabIndex = 0; @@ -80,14 +80,14 @@ dataGridView.Name = "dataGridView"; dataGridView.RowHeadersVisible = false; dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; - dataGridView.Size = new Size(712, 361); + dataGridView.Size = new Size(792, 361); dataGridView.TabIndex = 1; // // FormServicesProvision // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(834, 361); + ClientSize = new Size(914, 361); Controls.Add(dataGridView); Controls.Add(panel1); Name = "FormServicesProvision"; diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Program.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Program.cs index 7659cf6..c45c6f4 100644 --- a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Program.cs +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Program.cs @@ -2,6 +2,10 @@ using ProjectAthletesAccommodation.Repositories.Implementations; using ProjectAthletesAccommodation.Repositories; using Unity.Lifetime; using Unity; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Serilog; +using Unity.Microsoft.Logging; namespace ProjectAthletesAccommodation { @@ -23,13 +27,29 @@ namespace ProjectAthletesAccommodation { 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 SingletonLifetimeManager()); + 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/ProjectAthletesAccommodation/ProjectAthletesAccommodation/ProjectAthletesAccommodation.csproj b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/ProjectAthletesAccommodation.csproj index 0bb163b..d93d2fb 100644 --- a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/ProjectAthletesAccommodation.csproj +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/ProjectAthletesAccommodation.csproj @@ -13,7 +13,19 @@ + + + + + + + + + + + + @@ -31,4 +43,10 @@ + + + PreserveNewest + + + \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/IConnectionString.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/IConnectionString.cs new file mode 100644 index 0000000..5b68b60 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/IConnectionString.cs @@ -0,0 +1,6 @@ +namespace ProjectAthletesAccommodation.Repositories; + +public interface IConnectionString +{ + public string ConnectionString { get; } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/AthleteAccommodationRepository.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/AthleteAccommodationRepository.cs index 2d0e08b..8d4e61e 100644 --- a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/AthleteAccommodationRepository.cs +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/AthleteAccommodationRepository.cs @@ -1,19 +1,86 @@ -using ProjectAthletesAccommodation.Entities; +using Dapper; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; +using ProjectAthletesAccommodation.Entities; namespace ProjectAthletesAccommodation.Repositories.Implementations; public class AthleteAccommodationRepository : IAthleteAccommodationRepository { + private readonly IConnectionString _connectionString; + + private readonly ILogger _logger; + + public AthleteAccommodationRepository(IConnectionString connectionString, + ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } + public void CreateAthleteAccommodation(AthleteAccommodation athleteAccommodation) { + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(athleteAccommodation)); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + + var queryInsert = + @"INSERT INTO AthleteAccommodation (RoomId, AthleteId, DateStart, DateEnd) + VALUES (@RoomId, @AthleteId, @DateStart, @DateEnd)"; + + connection.Execute(queryInsert, athleteAccommodation); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавлении объекта"); + throw; + } } public void DeleteAthleteAccommodation(int id) { + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + + var queryDelete = @"DELETE FROM AthleteAccommodation WHERE Id=@id"; + + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } } public IEnumerable ReadAthleteAccommodation(DateTime? dateFrom = null, DateTime? dateTo = null, int? roomId = null, int? athleteId = null) { - return []; + _logger.LogInformation("Получение всех объектов"); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + + var querySelect = "SELECT * FROM AthleteAccommodation"; + + var athleteAccommodation = connection.Query(querySelect); + + _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(athleteAccommodation)); + + return athleteAccommodation; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } } } \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/AthleteRepository.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/AthleteRepository.cs index 992fa18..3f44e55 100644 --- a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/AthleteRepository.cs +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/AthleteRepository.cs @@ -1,28 +1,133 @@ -using ProjectAthletesAccommodation.Entities.Enums; -using ProjectAthletesAccommodation.Entities; +using ProjectAthletesAccommodation.Entities; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; +using Dapper; namespace ProjectAthletesAccommodation.Repositories.Implementations; public class AthleteRepository : IAthleteRepository { + private readonly IConnectionString _connectionString; + + private readonly ILogger _logger; + + public AthleteRepository(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } + public void CreateAthlete(Athlete athlete) { - } + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(athlete)); - public void DeleteAthlete(int id) - { - } + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); - public Athlete ReadAthleteById(int id) - { - return Athlete.CreateEntity(0, string.Empty, string.Empty, KindOfSport.None, AthleteClassification.None); - } + var queryInsert = + @"INSERT INTO Athlete (Name, Surname, KindOfSport, AthleteClassification) + VALUES (@Name, @Surname, @KindOfSport, @AthleteClassification)"; - public IEnumerable ReadAthletes() - { - return []; + connection.Execute(queryInsert, athlete); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавлении объекта"); + throw; + } } public void UpdateAthlete(Athlete athlete) { + _logger.LogInformation("Редактирование объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(athlete)); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + + var queryUpdate = @"UPDATE Athlete SET + Name=@Name, + Surname=@Surname, + KindOfSport=@KindOfSport, + AthleteClassification=@AthleteClassification + WHERE Id=@Id"; + + connection.Execute(queryUpdate, athlete); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при редактировании объекта"); + throw; + } + } + + public void DeleteAthlete(int id) + { + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + + var queryDelete = @"DELETE FROM Athlete WHERE Id=@id"; + + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } + } + + public Athlete ReadAthleteById(int id) + { + _logger.LogInformation("Получение объекта по идентификатору"); + _logger.LogDebug("Объект: {id}", id); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + + var querySelect = @"SELECT * FROM Athlete WHERE Id=@id"; + + var ahlete = connection.QueryFirst(querySelect, new { id }); + + _logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(ahlete)); + + return ahlete; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при поиске объекта"); + throw; + } + } + + public IEnumerable ReadAthletes() + { + _logger.LogInformation("Получение всех объектов"); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + + var querySelect = "SELECT * FROM Athlete"; + + var ahletes = connection.Query(querySelect); + + _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(ahletes)); + + return ahletes; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } } } \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/ConnectionString.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/ConnectionString.cs new file mode 100644 index 0000000..2a0e97a --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/ConnectionString.cs @@ -0,0 +1,7 @@ +namespace ProjectAthletesAccommodation.Repositories.Implementations; + +public class ConnectionString : IConnectionString +{ + string IConnectionString.ConnectionString + => "Host=localhost;Port=5432;Database=accommodation;Username=postgres;Password=postgres"; +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/HotelRepository.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/HotelRepository.cs index b8baad5..8c1b1ea 100644 --- a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/HotelRepository.cs +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/HotelRepository.cs @@ -1,27 +1,128 @@ -using ProjectAthletesAccommodation.Entities; +using Dapper; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; +using ProjectAthletesAccommodation.Entities; namespace ProjectAthletesAccommodation.Repositories.Implementations; public class HotelRepository : IHotelRepository { + private readonly IConnectionString _connectionString; + + private readonly ILogger _logger; + + public HotelRepository(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } + public void CreateHotel(Hotel hotel) { - } + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(hotel)); - public void DeleteHotel(int id) - { - } + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); - public Hotel ReadHotelById(int id) - { - return Hotel.CreateEntity(0, string.Empty); - } + var queryInsert = @"INSERT INTO Hotel (Name) VALUES (@Name)"; - public IEnumerable ReadHotels() - { - return []; + connection.Execute(queryInsert, hotel); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавлении объекта"); + throw; + } } public void UpdateHotel(Hotel hotel) { + _logger.LogInformation("Редактирование объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(hotel)); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + + var queryUpdate = @"UPDATE Hotel SET + Name=@Name + WHERE Id=@Id"; + + connection.Execute(queryUpdate, hotel); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при редактировании объекта"); + throw; + } + } + + public void DeleteHotel(int id) + { + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + + var queryDelete = @"DELETE FROM Hotel WHERE Id=@id"; + + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } + } + + public Hotel ReadHotelById(int id) + { + _logger.LogInformation("Получение объекта по идентификатору"); + _logger.LogDebug("Объект: {id}", id); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + + var querySelect = @"SELECT * FROM Hotel WHERE Id=@id"; + + var hotel = connection.QueryFirst(querySelect, new { id }); + + _logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(hotel)); + + return hotel; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при поиске объекта"); + throw; + } + } + + public IEnumerable ReadHotels() + { + _logger.LogInformation("Получение всех объектов"); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + + var querySelect = "SELECT * FROM Hotel"; + + var hotels = connection.Query(querySelect); + + _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(hotels)); + + return hotels; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } } } \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/RoomRepository.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/RoomRepository.cs index 6a9ec7f..3889f3e 100644 --- a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/RoomRepository.cs +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/RoomRepository.cs @@ -1,28 +1,132 @@ -using ProjectAthletesAccommodation.Entities.Enums; -using ProjectAthletesAccommodation.Entities; +using ProjectAthletesAccommodation.Entities; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; +using Dapper; namespace ProjectAthletesAccommodation.Repositories.Implementations; public class RoomRepository : IRoomRepository { + private readonly IConnectionString _connectionString; + + private readonly ILogger _logger; + + public RoomRepository(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } + public void CreateRoom(Room room) { + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(room)); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + + var queryInsert = + @"INSERT INTO Room (HotelId, Name, TypeOfRoom) + VALUES (@HotelId, @Name, @TypeOfRoom)"; + + connection.Execute(queryInsert, room); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавлении объекта"); + throw; + } + } + + public void UpdateRoom(Room room) + { + _logger.LogInformation("Редактирование объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(room)); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + + var queryUpdate = @"UPDATE Room SET + HotelId=@HotelId, + Name=@Name, + TypeOfRoom=@TypeOfRoom + WHERE Id=@Id"; + + connection.Execute(queryUpdate, room); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при редактировании объекта"); + throw; + } } public void DeleteRoom(int id) { + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + + var queryDelete = @"DELETE FROM Room WHERE Id=@id"; + + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } } public Room ReadRoomById(int id) { - return Room.CreateEntity(0, 0, string.Empty, TypeOfRoom.None); + _logger.LogInformation("Получение объекта по идентификатору"); + _logger.LogDebug("Объект: {id}", id); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + + var querySelect = @"SELECT * FROM Room WHERE Id=@id"; + + var room = connection.QueryFirst(querySelect, new { id }); + + _logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(room)); + + return room; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при поиске объекта"); + throw; + } } public IEnumerable ReadRooms() { - return []; - } + _logger.LogInformation("Получение всех объектов"); - public void UpdateRoom(Room room) - { + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + + var querySelect = "SELECT * FROM Room"; + + var rooms = connection.Query(querySelect); + + _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(rooms)); + + return rooms; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } } } \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/ServiceProvisionRepository.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/ServiceProvisionRepository.cs index fec3e84..cb92157 100644 --- a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/ServiceProvisionRepository.cs +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/ServiceProvisionRepository.cs @@ -1,19 +1,102 @@ -using ProjectAthletesAccommodation.Entities; +using Dapper; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; +using ProjectAthletesAccommodation.Entities; +using Serilog.Core; namespace ProjectAthletesAccommodation.Repositories.Implementations; public class ServiceProvisionRepository : IServiceProvisionRepository { + private readonly IConnectionString _connectionString; + + private readonly ILogger _logger; + + public ServiceProvisionRepository(IConnectionString connectionString, + ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } + public void CreateServiceProvision(ServiceProvision serviceProvision) { + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(serviceProvision)); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); + + using var transaction = connection.BeginTransaction(); + + var queryInsert = + @"INSERT INTO ServiceProvision (HotelId, Name, Date) + VALUES (@HotelId, @Name, @Date); + SELECT MAX(Id) FROM ServiceProvision"; + + var serviceProvisionId = connection.QueryFirst(queryInsert, serviceProvision, transaction); + + var querySubInsert = + @"INSERT INTO ServiceProvisionConnection (ServiceProvisionId, AthleteId, Price) + VALUES (@ServiceProvisionId, @AthleteId, @Price)"; + + foreach (var elem in serviceProvision.ServiceProvisionConnection) + { + connection.Execute(querySubInsert, new { serviceProvisionId, elem.AthleteId, elem.Price }, transaction); + } + + transaction.Commit(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавлении объекта"); + throw; + } } public void DeleteServiceProvision(int id) { + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + + var queryDelete = @"DELETE FROM ServiceProvision WHERE Id=@id"; + + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } } public IEnumerable ReadServiceProvision(DateTime? dateFrom = null, DateTime? dateTo = null, int? hotelId = null, int? athleteId = null) { - return []; + _logger.LogInformation("Получение всех объектов"); + + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + + var querySelect = @"SELECT * FROM ServiceProvision"; + + var serviceProvision = connection.Query(querySelect); + + _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(serviceProvision)); + + return serviceProvision; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } } } \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/appsettings.json b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/appsettings.json new file mode 100644 index 0000000..a769715 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/appsettings.json @@ -0,0 +1,15 @@ +{ + "Serilog": { + "Using": [ "Serilog.Sinks.File" ], + "MinimumLevel": "Debug", + "WriteTo": [ + { + "Name": "File", + "Args": { + "path": "Logs/accomodation_log.txt", + "rollingInterval": "Day" + } + } + ] + } +}