From cd79ab9f267f2150d5e50bae1c79832a3e5f1413 Mon Sep 17 00:00:00 2001 From: Pipiaka Date: Sun, 24 Nov 2024 23:08:46 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D1=81=D1=83=D1=89=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Accounting-Time-It-Company.csproj | 17 +++ .../Accounting-Time-It-Company/Program.cs | 21 +++ .../Repositories/IConnectionString.cs | 7 + .../Implementations/ClientRepositories.cs | 105 ++++++++++++++- .../Implementations/ConnectionString.cs | 7 + .../Implementations/EmployeeRepositories.cs | 124 ++++++++++++++++-- .../Implementations/PostRepositories.cs | 123 +++++++++++++++-- .../Implementations/ProductRepositories.cs | 123 +++++++++++++++-- .../appsettings.json | 15 +++ 9 files changed, 495 insertions(+), 47 deletions(-) create mode 100644 Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/IConnectionString.cs create mode 100644 Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/ConnectionString.cs create mode 100644 Accounting-Time-It-Company/Accounting-Time-It-Company/appsettings.json 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 b398854..0fedd00 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 @@ -10,7 +10,18 @@ + + + + + + + + + + + @@ -28,4 +39,10 @@ + + + PreserveNewest + + + \ No newline at end of file diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Program.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Program.cs index e187315..d8f098a 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Program.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Program.cs @@ -1,6 +1,10 @@ using Accounting_Time_It_Company.Repositories; using Accounting_Time_It_Company.Repositories.Implementations; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Serilog; using Unity; +using Unity.Microsoft.Logging; namespace Accounting_Time_It_Company { @@ -21,13 +25,30 @@ namespace Accounting_Time_It_Company private static IUnityContainer CreateContainer() { var container = new UnityContainer(); + + container.AddExtension(new LoggingExtension(CreateLoggerFactory())); + container.RegisterType(); 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/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/IConnectionString.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/IConnectionString.cs new file mode 100644 index 0000000..bb00778 --- /dev/null +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/IConnectionString.cs @@ -0,0 +1,7 @@ + +namespace Accounting_Time_It_Company.Repositories; + +public interface IConnectionString +{ + string ConnectionString { get; } +} 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 ecdf296..31bc27c 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 @@ -1,28 +1,123 @@ using Accounting_Time_It_Company.Entities; +using Dapper; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using System.Data.SqlClient; +#pragma warning disable CS0618 namespace Accounting_Time_It_Company.Repositories.Implementations; internal class ClientRepositories : IClientRepositories { + private readonly IConnectionString _connectionString; + + private readonly ILogger _logger; + + public ClientRepositories(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } + public void CreateClient(Client client) { + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(client)); + try + { + using var connection = new SqlConnection(_connectionString.ConnectionString); + var queryInsert = @" + INSERT INTO Client (NameClient, Phone) + VALUES (@NameClient, @Phone)"; + connection.Execute(queryInsert, client); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавдении объекта"); + throw; + } + } + public void UpdateClient(Client client) + { + _logger.LogInformation("Редактирование объекта"); + _logger.LogDebug("Объект: {json}", + JsonConvert.SerializeObject(client)); + try + { + using var connection = new SqlConnection(_connectionString.ConnectionString); + + var queryUpdate = @" + UPDATE Client + SET + NameClient=@NameClient, + Phone=@Phone + WHERE Id=@id"; + connection.Execute(queryUpdate, client); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при редактировании объекта"); + throw; + } } public void DeleteClient(int id) { + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new SqlConnection(_connectionString.ConnectionString); + var queryDelete = @" + DELETE FROM Client + WHERE Id=@id"; + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } } public Client ReadClientById(int id) { - return Client.CreateEntity(0, string.Empty, string.Empty); + _logger.LogInformation("Получение объекта по идентификатору"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new SqlConnection(_connectionString.ConnectionString); + var querySelect = @" + SELECT * FROM Client + WHERE Id=@id"; + var client = connection.QueryFirst(querySelect, new { id }); + _logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(client)); + return client; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при поиске объекта"); + throw; + } } public IEnumerable ReadClients() { - return []; + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new SqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM Client"; + var clients = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", + JsonConvert.SerializeObject(clients)); + return clients; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } } - public void UpdateClient(Client client) - { - } } 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 new file mode 100644 index 0000000..d526f56 --- /dev/null +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/ConnectionString.cs @@ -0,0 +1,7 @@ + +namespace Accounting_Time_It_Company.Repositories.Implementations; + +public class ConnectionString : IConnectionString +{ + string IConnectionString.ConnectionString => ""; +} 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 3813812..12538f8 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 @@ -1,28 +1,124 @@ using Accounting_Time_It_Company.Entities; +using Dapper; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using System.Data.SqlClient; namespace Accounting_Time_It_Company.Repositories.Implementations; public class EmployeeRepositories : IEmployeeRepositories { + private readonly IConnectionString _connectionString; + + private readonly ILogger _logger; + + public EmployeeRepositories(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } + public void CreateEmployee(Employee employee) { - } - - public void DeleteEmployee(int id) - { - } - - public Employee ReadEmployeeById(int id) - { - return Employee.CreateEntity(0, 0, string.Empty, string.Empty, 0f); - } - - public IEnumerable ReadEmployees() - { - return []; + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(employee)); + try + { + using var connection = new SqlConnection(_connectionString.ConnectionString); + var queryInsert = @" + INSERT INTO Employee (PostId, Name, Phone, Allowance) + VALUES (@PostId, @Name, @Phone, @Allowance)"; + connection.Execute(queryInsert, employee); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавдении объекта"); + throw; + } } public void UpdateEmployee(Employee employee) { + _logger.LogInformation("Редактирование объекта"); + _logger.LogDebug("Объект: {json}", + JsonConvert.SerializeObject(employee)); + try + { + using var connection = new SqlConnection(_connectionString.ConnectionString); + + var queryUpdate = @" + UPDATE Employee + SET + PostId=@PostId, + Name=@Name, + Phone=@Phone, + Allowance=@Allowance + WHERE Id=@id"; + connection.Execute(queryUpdate, employee); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при редактировании объекта"); + throw; + } + } + + public void DeleteEmployee(int id) + { + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new SqlConnection(_connectionString.ConnectionString); + var queryDelete = @" + DELETE FROM Employee + WHERE Id=@id"; + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } + } + + public Employee ReadEmployeeById(int id) + { + _logger.LogInformation("Получение объекта по идентификатору"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new SqlConnection(_connectionString.ConnectionString); + var querySelect = @" + SELECT * FROM Employee + WHERE [Id]=@id"; + var employee = connection.QueryFirst(querySelect, new { id }); + _logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(employee)); + return employee; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при поиске объекта"); + throw; + } + } + + public IEnumerable ReadEmployees() + { + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new SqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM Employee"; + var employees = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", + JsonConvert.SerializeObject(employees)); + return employees; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } } } 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 da887e7..f9b8302 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 @@ -1,28 +1,123 @@ using Accounting_Time_It_Company.Entities; +using Dapper; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using System.Data.SqlClient; namespace Accounting_Time_It_Company.Repositories.Implementations; public class PostRepositories : IPostRepositories { + private readonly IConnectionString _connectionString; + + private readonly ILogger _logger; + + public PostRepositories(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } + public void CreatePost(Post post) { - } - - public void DeletePost(int id) - { - } - - public Post ReadPostById(int id) - { - return Post.CreateEntity(0, 0, string.Empty, 0); - } - - public IEnumerable ReadPosts() - { - return []; + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(post)); + try + { + using var connection = new SqlConnection(_connectionString.ConnectionString); + var queryInsert = @" + INSERT INTO Post (NamePost, LevelPost, Wage) + VALUES (@NamePost, @LevelPost, @Wage)"; + connection.Execute(queryInsert, post); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавдении объекта"); + throw; + } } public void UpdatePost(Post post) { + _logger.LogInformation("Редактирование объекта"); + _logger.LogDebug("Объект: {json}", + JsonConvert.SerializeObject(post)); + try + { + using var connection = new SqlConnection(_connectionString.ConnectionString); + + var queryUpdate = @" + UPDATE Post + SET + NamePost=@NamePost, + LevelPost=@LevelPost, + Wage=@Wage + WHERE Id=@id"; + connection.Execute(queryUpdate, post); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при редактировании объекта"); + throw; + } + } + + public void DeletePost(int id) + { + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new SqlConnection(_connectionString.ConnectionString); + var queryDelete = @" + DELETE FROM Post + WHERE Id=@id"; + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } + } + + public Post ReadPostById(int id) + { + _logger.LogInformation("Получение объекта по идентификатору"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new SqlConnection(_connectionString.ConnectionString); + var querySelect = @" + SELECT * FROM Post + WHERE Id=@id"; + var post = connection.QueryFirst(querySelect, new { id }); + _logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(post)); + return post; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при поиске объекта"); + throw; + } + } + + public IEnumerable ReadPosts() + { + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new SqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM Post"; + var posts = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", + JsonConvert.SerializeObject(posts)); + return posts; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } } } 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 a4ae2bd..0c30431 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 @@ -1,28 +1,123 @@ using Accounting_Time_It_Company.Entities; +using Dapper; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using System.Data.SqlClient; namespace Accounting_Time_It_Company.Repositories.Implementations; public class ProductRepositories : IProductRepositories { + private readonly IConnectionString _connectionString; + + private readonly ILogger _logger; + + public ProductRepositories(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } + public void CreateProduct(Product product) { - } - - public void DeleteProduct(int id) - { - } - - public Product ReadProductById(int id) - { - return Product.CreateEntity(0, 0, string.Empty, 0); - } - - public IEnumerable ReadProducts() - { - return []; + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(post)); + try + { + using var connection = new SqlConnection(_connectionString.ConnectionString); + var queryInsert = @" + INSERT INTO Product (ClientId, Name, Type) + VALUES (@ClientId, @Name, @Type)"; + connection.Execute(queryInsert, product); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавдении объекта"); + throw; + } } public void UpdateProduct(Product product) { + _logger.LogInformation("Редактирование объекта"); + _logger.LogDebug("Объект: {json}", + JsonConvert.SerializeObject(product)); + try + { + using var connection = new SqlConnection(_connectionString.ConnectionString); + + var queryUpdate = @" + UPDATE Product + SET + ClientId=@ClientId, + Name=@Name, + Type=@Type + WHERE Id=@id"; + connection.Execute(queryUpdate, product); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при редактировании объекта"); + throw; + } + } + + public void DeleteProduct(int id) + { + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new SqlConnection(_connectionString.ConnectionString); + var queryDelete = @" + DELETE FROM Product + WHERE Id=@id"; + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } + } + + public Product ReadProductById(int id) + { + _logger.LogInformation("Получение объекта по идентификатору"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new SqlConnection(_connectionString.ConnectionString); + var querySelect = @" + SELECT * FROM Product + WHERE [Id]=@id"; + var product = connection.QueryFirst(querySelect, new { id }); + _logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(product)); + return product; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при поиске объекта"); + throw; + } + } + + public IEnumerable ReadProducts() + { + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new SqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM Product"; + var products = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", + JsonConvert.SerializeObject(products)); + return products; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } } } diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/appsettings.json b/Accounting-Time-It-Company/Accounting-Time-It-Company/appsettings.json new file mode 100644 index 0000000..497d337 --- /dev/null +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/appsettings.json @@ -0,0 +1,15 @@ +{ + "Serilog": { + "Using": [ "Serilog.Sinks.File" ], + "MinimumLevel": "Debug", + "WriteTo": [ + { + "Name": "File", + "Args": { + "path": "Logs/company_log.txt", + "rollingInterval": "Day" + } + } + ] + } +} \ No newline at end of file