Продолжил работу, на этапе написания кода репозиториев

This commit is contained in:
user 2024-11-24 16:51:28 +04:00
parent 39fc7769eb
commit 24a71032da
8 changed files with 352 additions and 23 deletions

View File

@ -10,7 +10,18 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Dapper" Version="2.1.35" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="9.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Npgsql" Version="8.0.5" />
<PackageReference Include="Serilog" Version="4.1.0" />
<PackageReference Include="Serilog.Extensions.Logging" Version="8.0.0" />
<PackageReference Include="Serilog.Settings.Configuration" Version="8.0.4" />
<PackageReference Include="Serilog.Sinks.File" Version="6.0.0" />
<PackageReference Include="Unity" Version="5.11.10" /> <PackageReference Include="Unity" Version="5.11.10" />
<PackageReference Include="Unity.Microsoft.Logging" Version="5.11.1" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -1,5 +1,9 @@
using ITServiceManager.Repositories.Implementations; using ITServiceManager.Repositories.Implementations;
using ITServiceManager.Repositories; using ITServiceManager.Repositories;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Unity.Microsoft.Logging;
using Serilog;
using Unity; using Unity;
namespace ITServiceManager namespace ITServiceManager
@ -22,6 +26,9 @@ namespace ITServiceManager
private static IUnityContainer CreateContainer() private static IUnityContainer CreateContainer()
{ {
var container = new UnityContainer(); var container = new UnityContainer();
container.AddExtension(new LoggingExtension(CreateLoggerFactory()));
container.RegisterType<IOrderRepository, OrderRepository>(); container.RegisterType<IOrderRepository, OrderRepository>();
container.RegisterType<IAppointmentRepository, AppointmentRepository>(); container.RegisterType<IAppointmentRepository, AppointmentRepository>();
container.RegisterType<IServiceRepository, ServiceRepository>(); container.RegisterType<IServiceRepository, ServiceRepository>();
@ -32,5 +39,17 @@ namespace ITServiceManager
return container; 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;
}
} }
} }

View File

@ -1,12 +1,36 @@
using ITServiceManager.Entities; using Dapper;
using ITServiceManager.Entities;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Npgsql;
namespace ITServiceManager.Repositories.Implementations; namespace ITServiceManager.Repositories.Implementations;
public class AppointmentRepository : IAppointmentRepository public class AppointmentRepository : IAppointmentRepository
{ {
private readonly IConnectionString _connectionString;
private readonly ILogger<Appointment> _logger;
public AppointmentRepository(IConnectionString connectionString, ILogger<Appointment> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public IEnumerable<Appointment> ReadAppointments() public IEnumerable<Appointment> ReadAppointments()
{ {
return []; _logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"SELECT * FROM Appointments";
var order = connection.Query<Appointment>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(order));
return order;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
} }
public Appointment ReadAppointmentById(int id) public Appointment ReadAppointmentById(int id)
{ {

View File

@ -1,33 +1,116 @@
using ITServiceManager.Entities; using Dapper;
using ITServiceManager.Entities;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Npgsql;
namespace ITServiceManager.Repositories.Implementations; namespace ITServiceManager.Repositories.Implementations;
public class CompanyRepository : ICompanyRepository public class CompanyRepository : ICompanyRepository
{ {
private readonly IConnectionString _connectionString; private readonly IConnectionString _connectionString;
private readonly ILogger<Company> _logger;
public CompanyRepository(IConnectionString connectionString) public CompanyRepository(IConnectionString connectionString, ILogger<Company> logger)
{ {
_connectionString = connectionString; _connectionString = connectionString;
_logger = logger;
} }
public IEnumerable<Company> ReadCompanies() public IEnumerable<Company> ReadCompanies()
{ {
return []; _logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Companies";
var companies = connection.Query<Company>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(companies));
return companies;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
} }
public Company ReadCompanyById(int id) public Company ReadCompanyById(int id)
{ {
return null; _logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM Companies
WHERE Id=@id";
var company = connection.QueryFirst<Company>(querySelect, new
{
id
});
_logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(company));
return company;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
} }
public void CreateCompany(Company company) public void CreateCompany(Company company)
{ {
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(company));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryInsert = @"
INSERT INTO Companies (Name, Address)
VALUES (@Name, @Address)";
connection.Execute(queryInsert, company);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
} }
public void UpdateCompany(Company company) public void UpdateCompany(Company company)
{ {
_logger.LogInformation("Редактирование объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(company));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"
UPDATE Companies
SET
Name=@Name,
Address=@Address,
WHERE Id=@Id";
connection.Execute(queryUpdate, company);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
} }
public void DeleteCompany(int id) public void DeleteCompany(int id)
{ {
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryDelete = @"
DELETE FROM Companies
WHERE Id=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
} }
} }

View File

@ -2,5 +2,5 @@
internal class ConnectionString : IConnectionString internal class ConnectionString : IConnectionString
{ {
string IConnectionString.ConnectionString => ""; string IConnectionString.ConnectionString => "Server=localhost;Port=5432;Database=itcompany;";
} }

View File

@ -1,27 +1,118 @@
using ITServiceManager.Entities; using Dapper;
using ITServiceManager.Entities;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Npgsql;
namespace ITServiceManager.Repositories.Implementations; namespace ITServiceManager.Repositories.Implementations;
public class EmployeeRepository : IEmployeeRepository public class EmployeeRepository : IEmployeeRepository
{ {
private readonly IConnectionString _connectionString;
private readonly ILogger<EmployeeRepository> _logger;
public EmployeeRepository(IConnectionString connectionString,
ILogger<EmployeeRepository> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public IEnumerable<Employee> ReadEmployees() public IEnumerable<Employee> ReadEmployees()
{ {
return []; _logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Employees";
var employees = connection.Query<Employee>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(employees));
return employees;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
} }
public Employee ReadEmployeeById(int id) public Employee ReadEmployeeById(int id)
{ {
return null; _logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM Employees
WHERE Id=@id";
var employee = connection.QueryFirst<Employee>(querySelect, new
{
id
});
_logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(employee));
return employee;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
} }
public void CreateEmployee(Employee employee) public void CreateEmployee(Employee employee)
{ {
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(employee));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryInsert = @"
INSERT INTO Employees (FirstName, LastName, Position)
VALUES (@FirstName, @LastName, @Position)";
connection.Execute(queryInsert, employee);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
} }
public void UpdateEmployee(Employee employee) public void UpdateEmployee(Employee employee)
{ {
_logger.LogInformation("Редактирование объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(employee));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"
UPDATE Employees
SET
FirstName=@FirstName,
LastName=@LastName,
Position=@Position
WHERE Id=@Id";
connection.Execute(queryUpdate, employee);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
} }
public void DeleteEmployee(int id) public void DeleteEmployee(int id)
{ {
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryDelete = @"
DELETE FROM Employees
WHERE Id=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
} }
} }

View File

@ -1,27 +1,116 @@
using ITServiceManager.Entities; using Dapper;
using ITServiceManager.Entities;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Npgsql;
namespace ITServiceManager.Repositories.Implementations; namespace ITServiceManager.Repositories.Implementations;
public class ServiceRepository : IServiceRepository public class ServiceRepository : IServiceRepository
{ {
private readonly IConnectionString _connectionString;
private readonly ILogger<Service> _logger;
public ServiceRepository(IConnectionString connectionString, ILogger<Service> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public IEnumerable<Service> ReadServices() public IEnumerable<Service> ReadServices()
{ {
return []; _logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Services";
var services = connection.Query<Service>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(services));
return services;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
} }
public Service ReadServiceById(int id) public Service ReadServiceById(int id)
{ {
return null; _logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM Services
WHERE Id=@id";
var service = connection.QueryFirst<Service>(querySelect, new
{
id
});
_logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(service));
return service;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
} }
public void CreateService(Service service) public void CreateService(Service service)
{ {
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(service));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryInsert = @"
INSERT INTO Services (Name, ServiceType, Description)
VALUES (@Name, @ServiceType, @Description)";
connection.Execute(queryInsert, service);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
} }
public void UpdateService(Service service) public void UpdateService(Service service)
{ {
_logger.LogInformation("Редактирование объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(service));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"
UPDATE Services
SET
ServiceType=@ServiceType,
Description=@Description,
WHERE Id=@Id";
connection.Execute(queryUpdate, service);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
} }
public void DeleteService(int id) public void DeleteService(int id)
{ {
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryDelete = @"
DELETE FROM Services
WHERE Id=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
} }
} }

View File

@ -1,3 +1,15 @@
{ {
"Serilog": {
"Using": [ "Serilog.Sinks.File" ],
"MinimumLevel": "Debug",
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "Logs.txt",
"rollingInterval": "Day"
}
}
]
}
} }