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