From 2bb556bc3fbf90b166b282ded735f51ab2bcf37b Mon Sep 17 00:00:00 2001 From: Pipiaka Date: Sat, 7 Dec 2024 21:24:10 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A7=D1=82=D0=BE-=D1=82=D0=BE=20=D0=B1=D1=8B?= =?UTF-8?q?=D0=BB=D0=BE=20=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Accounting-Time-It-Company.csproj | 1 + .../Forms/FormTypeJob.cs | 2 +- .../Forms/FormVacation.cs | 2 +- .../Implementations/ClientRepositories.cs | 21 +++-- .../Implementations/ConnectionString.cs | 2 +- .../Implementations/EmployeeRepositories.cs | 22 +++-- .../Implementations/PostRepositories.cs | 22 +++-- .../Implementations/ProductRepositories.cs | 24 ++--- .../Implementations/TypeJobRepositories.cs | 90 ++++++++++++++++++- .../Implementations/VacationRepositories.cs | 48 +++++++++- 10 files changed, 193 insertions(+), 41 deletions(-) diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Accounting-Time-It-Company.csproj b/Accounting-Time-It-Company/Accounting-Time-It-Company/Accounting-Time-It-Company.csproj index 0fedd00..e869823 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Accounting-Time-It-Company.csproj +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Accounting-Time-It-Company.csproj @@ -15,6 +15,7 @@ + diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormTypeJob.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormTypeJob.cs index 8c1e723..d040b24 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormTypeJob.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormTypeJob.cs @@ -38,7 +38,7 @@ namespace Accounting_Time_It_Company.Forms throw new Exception("Имеются незаполненные поля"); } - _typeJobRepositories.CreateTypeJob(TypeJob.CreateOperation(0, (int)comboBoxProduct.SelectedIndex!, textBoxDescriptoin.Text, + _typeJobRepositories.CreateTypeJob(TypeJob.CreateOperation(0, (int)comboBoxProduct.SelectedValue!, textBoxDescriptoin.Text, (int)numericUpDownAllowanceForJob.Value, CreateListWorkTimeFromDataGrid(dataGridViewDevelops), CreateListWorkTimeFromDataGrid(dataGridViewManagers))); diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormVacation.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormVacation.cs index 7a49b4f..86adb0f 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormVacation.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormVacation.cs @@ -26,7 +26,7 @@ namespace Accounting_Time_It_Company.Forms throw new Exception("Имеются незаполненные поля"); } - _vacationRepositories.CreateVacation(Vacation.CreateOpeartion(0, (int)comboBoxEmployee.SelectedIndex!, + _vacationRepositories.CreateVacation(Vacation.CreateOpeartion(0, (int)comboBoxEmployee.SelectedValue!, dateTimePickerStartDate.Value, dateTimePickerEndDate.Value)); Close(); diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/ClientRepositories.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/ClientRepositories.cs index 31bc27c..ee6f8e0 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/ClientRepositories.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/ClientRepositories.cs @@ -2,6 +2,7 @@ using Dapper; using Microsoft.Extensions.Logging; using Newtonsoft.Json; +using Npgsql; using System.Data.SqlClient; #pragma warning disable CS0618 @@ -25,10 +26,11 @@ internal class ClientRepositories : IClientRepositories _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(client)); try { - using var connection = new SqlConnection(_connectionString.ConnectionString); + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); var queryInsert = @" - INSERT INTO Client (NameClient, Phone) - VALUES (@NameClient, @Phone)"; + INSERT INTO Client + VALUES (DEFAULT, @NameClient, @Phone)"; connection.Execute(queryInsert, client); } catch (Exception ex) @@ -44,8 +46,8 @@ internal class ClientRepositories : IClientRepositories JsonConvert.SerializeObject(client)); try { - using var connection = new SqlConnection(_connectionString.ConnectionString); - + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); var queryUpdate = @" UPDATE Client SET @@ -67,7 +69,8 @@ internal class ClientRepositories : IClientRepositories _logger.LogDebug("Объект: {id}", id); try { - using var connection = new SqlConnection(_connectionString.ConnectionString); + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); var queryDelete = @" DELETE FROM Client WHERE Id=@id"; @@ -86,7 +89,8 @@ internal class ClientRepositories : IClientRepositories _logger.LogDebug("Объект: {id}", id); try { - using var connection = new SqlConnection(_connectionString.ConnectionString); + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); var querySelect = @" SELECT * FROM Client WHERE Id=@id"; @@ -106,7 +110,8 @@ internal class ClientRepositories : IClientRepositories _logger.LogInformation("Получение всех объектов"); try { - using var connection = new SqlConnection(_connectionString.ConnectionString); + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); var querySelect = "SELECT * FROM Client"; var clients = connection.Query(querySelect); _logger.LogDebug("Полученные объекты: {json}", diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/ConnectionString.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/ConnectionString.cs index d526f56..701384c 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/ConnectionString.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/ConnectionString.cs @@ -3,5 +3,5 @@ namespace Accounting_Time_It_Company.Repositories.Implementations; public class ConnectionString : IConnectionString { - string IConnectionString.ConnectionString => ""; + string IConnectionString.ConnectionString => "Server=localhost:5432;Database=workTime;User Id=postgres;Password=postgres;"; } diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/EmployeeRepositories.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/EmployeeRepositories.cs index 12538f8..74346cb 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/EmployeeRepositories.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/EmployeeRepositories.cs @@ -2,7 +2,7 @@ using Dapper; using Microsoft.Extensions.Logging; using Newtonsoft.Json; -using System.Data.SqlClient; +using Npgsql; namespace Accounting_Time_It_Company.Repositories.Implementations; @@ -24,10 +24,11 @@ public class EmployeeRepositories : IEmployeeRepositories _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(employee)); try { - using var connection = new SqlConnection(_connectionString.ConnectionString); + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); var queryInsert = @" - INSERT INTO Employee (PostId, Name, Phone, Allowance) - VALUES (@PostId, @Name, @Phone, @Allowance)"; + INSERT INTO Employee + VALUES (DEFAULT, @PostId, @Name, @Phone, @Allowance)"; connection.Execute(queryInsert, employee); } catch (Exception ex) @@ -44,8 +45,8 @@ public class EmployeeRepositories : IEmployeeRepositories JsonConvert.SerializeObject(employee)); try { - using var connection = new SqlConnection(_connectionString.ConnectionString); - + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); var queryUpdate = @" UPDATE Employee SET @@ -69,7 +70,8 @@ public class EmployeeRepositories : IEmployeeRepositories _logger.LogDebug("Объект: {id}", id); try { - using var connection = new SqlConnection(_connectionString.ConnectionString); + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); var queryDelete = @" DELETE FROM Employee WHERE Id=@id"; @@ -88,7 +90,8 @@ public class EmployeeRepositories : IEmployeeRepositories _logger.LogDebug("Объект: {id}", id); try { - using var connection = new SqlConnection(_connectionString.ConnectionString); + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); var querySelect = @" SELECT * FROM Employee WHERE [Id]=@id"; @@ -108,7 +111,8 @@ public class EmployeeRepositories : IEmployeeRepositories _logger.LogInformation("Получение всех объектов"); try { - using var connection = new SqlConnection(_connectionString.ConnectionString); + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); var querySelect = "SELECT * FROM Employee"; var employees = connection.Query(querySelect); _logger.LogDebug("Полученные объекты: {json}", diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/PostRepositories.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/PostRepositories.cs index f9b8302..0071c48 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/PostRepositories.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/PostRepositories.cs @@ -2,7 +2,7 @@ using Dapper; using Microsoft.Extensions.Logging; using Newtonsoft.Json; -using System.Data.SqlClient; +using Npgsql; namespace Accounting_Time_It_Company.Repositories.Implementations; @@ -24,10 +24,11 @@ public class PostRepositories : IPostRepositories _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(post)); try { - using var connection = new SqlConnection(_connectionString.ConnectionString); + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); var queryInsert = @" - INSERT INTO Post (NamePost, LevelPost, Wage) - VALUES (@NamePost, @LevelPost, @Wage)"; + INSERT INTO Post + VALUES (DEFAULT, @NamePost, @LevelPost, @Wage)"; connection.Execute(queryInsert, post); } catch (Exception ex) @@ -44,8 +45,8 @@ public class PostRepositories : IPostRepositories JsonConvert.SerializeObject(post)); try { - using var connection = new SqlConnection(_connectionString.ConnectionString); - + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); var queryUpdate = @" UPDATE Post SET @@ -68,7 +69,8 @@ public class PostRepositories : IPostRepositories _logger.LogDebug("Объект: {id}", id); try { - using var connection = new SqlConnection(_connectionString.ConnectionString); + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); var queryDelete = @" DELETE FROM Post WHERE Id=@id"; @@ -87,7 +89,8 @@ public class PostRepositories : IPostRepositories _logger.LogDebug("Объект: {id}", id); try { - using var connection = new SqlConnection(_connectionString.ConnectionString); + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); var querySelect = @" SELECT * FROM Post WHERE Id=@id"; @@ -107,7 +110,8 @@ public class PostRepositories : IPostRepositories _logger.LogInformation("Получение всех объектов"); try { - using var connection = new SqlConnection(_connectionString.ConnectionString); + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); var querySelect = "SELECT * FROM Post"; var posts = connection.Query(querySelect); _logger.LogDebug("Полученные объекты: {json}", diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/ProductRepositories.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/ProductRepositories.cs index 0c30431..1903ff8 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/ProductRepositories.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/ProductRepositories.cs @@ -2,7 +2,7 @@ using Dapper; using Microsoft.Extensions.Logging; using Newtonsoft.Json; -using System.Data.SqlClient; +using Npgsql; namespace Accounting_Time_It_Company.Repositories.Implementations; @@ -21,13 +21,14 @@ public class ProductRepositories : IProductRepositories public void CreateProduct(Product product) { _logger.LogInformation("Добавление объекта"); - _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(post)); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(product)); try { - using var connection = new SqlConnection(_connectionString.ConnectionString); + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); var queryInsert = @" - INSERT INTO Product (ClientId, Name, Type) - VALUES (@ClientId, @Name, @Type)"; + INSERT INTO Product + VALUES (DEFAULT, @ClientId, @Name, @Type)"; connection.Execute(queryInsert, product); } catch (Exception ex) @@ -44,8 +45,8 @@ public class ProductRepositories : IProductRepositories JsonConvert.SerializeObject(product)); try { - using var connection = new SqlConnection(_connectionString.ConnectionString); - + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); var queryUpdate = @" UPDATE Product SET @@ -68,7 +69,8 @@ public class ProductRepositories : IProductRepositories _logger.LogDebug("Объект: {id}", id); try { - using var connection = new SqlConnection(_connectionString.ConnectionString); + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); var queryDelete = @" DELETE FROM Product WHERE Id=@id"; @@ -87,7 +89,8 @@ public class ProductRepositories : IProductRepositories _logger.LogDebug("Объект: {id}", id); try { - using var connection = new SqlConnection(_connectionString.ConnectionString); + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); var querySelect = @" SELECT * FROM Product WHERE [Id]=@id"; @@ -107,7 +110,8 @@ public class ProductRepositories : IProductRepositories _logger.LogInformation("Получение всех объектов"); try { - using var connection = new SqlConnection(_connectionString.ConnectionString); + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); var querySelect = "SELECT * FROM Product"; var products = connection.Query(querySelect); _logger.LogDebug("Полученные объекты: {json}", diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/TypeJobRepositories.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/TypeJobRepositories.cs index 9d64613..99754fb 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/TypeJobRepositories.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/TypeJobRepositories.cs @@ -1,19 +1,107 @@ using Accounting_Time_It_Company.Entities; +using Dapper; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; namespace Accounting_Time_It_Company.Repositories.Implementations; public class TypeJobRepositories : ITypeJobRepositories { + private readonly IConnectionString _connectionString; + + private readonly ILogger _logger; + + public TypeJobRepositories(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } + public void CreateTypeJob(TypeJob typeJob) { + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", + JsonConvert.SerializeObject(typeJob)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); + using var transaction = connection.BeginTransaction(); + var queryInsert = @" + INSERT INTO TypeJob + VALUES (DEFAULT, @ProductId, @Description, @AllowanceForJob, @Date, @WorkTimesDevelop, @WorkTimesManager); + SELECT MAX(Id) FROM TypeJob"; + var typeJobId = connection.QueryFirst(queryInsert, typeJob, transaction); + var querySubInsert = @" + INSERT INTO WorkTime + VALUES (DEFAULT, @TypeJobId, @EmployeeId, @Hours)"; + foreach (var elem in typeJob.WorkTimesDevelop) + { + connection.Execute(querySubInsert, new + { + typeJobId, + elem.EmployeeId, + elem.Hours + }, transaction); + } + + foreach (var elem in typeJob.WorkTimesManager) + { + connection.Execute(querySubInsert, new + { + typeJobId, + elem.EmployeeId, + elem.Hours + }, transaction); + } + + transaction.Commit(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавлении объекта"); + throw; + } } public void DeleteTypeJob(int id) { + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); + var queryDelete = @" + DELETE FROM TypeJob + WHERE Id=@id"; + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } } public IEnumerable ReadTypeJobs(int? productId = null, int? developId = null, int? managerId = null) { - return []; + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); + var querySelect = @"SELECT * FROM TypeJob"; + var typeJobs = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", + JsonConvert.SerializeObject(typeJobs)); + return typeJobs; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } } } diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/VacationRepositories.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/VacationRepositories.cs index f05654f..55a4544 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/VacationRepositories.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/VacationRepositories.cs @@ -1,16 +1,62 @@ using Accounting_Time_It_Company.Entities; +using Dapper; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; namespace Accounting_Time_It_Company.Repositories.Implementations; public class VacationRepositories : IVacationRepositories { + private readonly IConnectionString _connectionString; + + private readonly ILogger _logger; + + public VacationRepositories(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } + public void CreateVacation(Vacation vacation) { + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", + JsonConvert.SerializeObject(vacation)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); + var queryInsert = @" + INSERT INTO Vacation + VALUES (DEFAULT, @EmployeeId, @StartDate, @EndDate)"; + connection.Execute(queryInsert, vacation); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавлении объекта"); + throw; + } } public IEnumerable ReadVacations(DateTime? startDateFrom = null, DateTime? startDateTo = null, DateTime? endDateFrom = null, DateTime? endtDateTo = null, int? employeeId = null) { - return []; + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); + var querySelect = "SELECT * FROM Vacation"; + var vacations = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", + JsonConvert.SerializeObject(vacations)); + return vacations; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } } }