Почти норм на удивление

This commit is contained in:
ivans 2024-12-23 01:24:12 +04:00
parent 85b8a7c41f
commit fa241d08a7
10 changed files with 414 additions and 32 deletions

View File

@ -90,7 +90,7 @@
#endregion
private Label label1;
private Label labelStatus;
private CheckedListBox checkedListBoxStatus;
private Button buttonSave;

View File

@ -1,6 +1,10 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using ProjectAirline.Repositories;
using ProjectAirline.Repositories.Implementations;
using Serilog;
using Unity;
using Unity.Microsoft.Logging;
namespace ProjectAirline
{
@ -18,17 +22,33 @@ namespace ProjectAirline
Application.Run(CreateContainer().Resolve<FormAirline>());
}
private static IUnityContainer CreateContainer()
private static UnityContainer CreateContainer()
{
var container = new UnityContainer();
container.AddExtension(new LoggingExtension(CreateLoggerFactory()));
container.RegisterType<IFlightRepository, FlightRepository>();
container.RegisterType<IPassangerRepository, PassangerRepository>();
container.RegisterType<IPlaneRepository, PlaneRepository>();
container.RegisterType<IPreparatoryWorkRepository, PreparatoryWorkRepository>();
container.RegisterType<ITicketRepository, TicketRepository>();
container.RegisterType<IConnectionString, ConnectionString>();
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

@ -9,7 +9,18 @@
</PropertyGroup>
<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="Serilog" Version="4.2.0" />
<PackageReference Include="Serilog.Extensions.Logging" Version="9.0.0" />
<PackageReference Include="Serilog.Settings.Configuration" Version="9.0.0" />
<PackageReference Include="Serilog.Sinks.File" Version="6.0.0" />
<PackageReference Include="System.Data.SqlClient" Version="4.9.0" />
<PackageReference Include="Unity" Version="5.11.10" />
<PackageReference Include="Unity.Microsoft.Logging" Version="5.11.1" />
</ItemGroup>
<ItemGroup>
@ -27,4 +38,10 @@
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

View File

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectAirline.Repositories;
public interface IConnectionString
{
public string ConnectionString { get; }
}

View File

@ -9,13 +9,14 @@ namespace ProjectAirline.Repositories;
public interface IFlightRepository
{
Flight ReadFlightById(int id);
IEnumerable<Flight> ReadFlights(DateTime? dateFrom = null, DateTime? dateTo = null, int? flightId = null);
void CreateFlight(Flight flight);
//IEnumerable<Flight> ReadFlights();
void UpdateFlight(Flight flight);

View File

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectAirline.Repositories.Implementations;
internal class ConnectionString : IConnectionString
{
string IConnectionString.ConnectionString => "Server=localhost;User Id=postgres;Password=postgres;Database=localhost";
}

View File

@ -1,6 +1,10 @@
using ProjectAirline.Entities;
using Dapper;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using ProjectAirline.Entities;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@ -9,31 +13,131 @@ namespace ProjectAirline.Repositories.Implementations;
public class FlightRepository : IFlightRepository
{
private readonly IConnectionString _connectionString;
private readonly ILogger<FlightRepository> _logger;
public FlightRepository(IConnectionString connectionString, ILogger<FlightRepository> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateFlight(Flight flight)
{
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(flight));
try
{
using var connection = new
SqlConnection(_connectionString.ConnectionString);
var queryInsert = @"
INSERT INTO Flights (DateTimeDeparture, DateTimeArrival, ArrivalLocation, TicketPrice)
VALUES (@DateTimeDeparture, @DateTimeArrival, @ArrivalLocation, @TicketPrice)";
connection.Execute(queryInsert, flight);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
}
public IEnumerable<Flight> ReadFlights(DateTime? dateFrom = null, DateTime? dateTo = null, int? flightId = null)
public void UpdateFlight(Flight flight)
{
return [];
_logger.LogInformation("Редактирование объекта");
_logger.LogDebug("Объект: {json}",
JsonConvert.SerializeObject(flight));
try
{
using var connection = new
SqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"
UPDATE Flights
SET
DateTimeDeparture=@DateTimeDeparture,
DateTimeArrival=@DateTimeArrival,
ArrivalLocation=@ArrivalLocation,
TicketPrice=@TicketPrice
WHERE Id=@Id";
connection.Execute(queryUpdate, flight);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
}
public void DeleteFlight(int id)
{
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new
SqlConnection(_connectionString.ConnectionString);
var queryDelete = @"
DELETE FROM Flights
WHERE Id=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
}
public IEnumerable<Flight> ReadFlights(DateTime? dateFrom = null, DateTime? dateTo = null, int? flightId = null)
{
_logger.LogInformation("Получение всех объектов");
try
{
using var connection = new
SqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Flights";
var flights = connection.Query<Flight>(querySelect);
_logger.LogDebug("Полученные объекты: {json}",
JsonConvert.SerializeObject(flights));
return flights;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
}
public Flight ReadFlightById(int id)
{
return Flight.CreateOperation(0, DateTime.Now, DateTime.Now, string.Empty, 0);
_logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new
SqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM Flights
WHERE [Id]=@id";
var flight = connection.QueryFirst<Flight>(querySelect, new
{
id
});
_logger.LogDebug("Найденный объект: {json}",
JsonConvert.SerializeObject(flight));
return flight;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
}
//public IEnumerable<Flight> ReadFlights()
//{
// return [];
//}
public void UpdateFlight(Flight flight)
{
}
}

View File

@ -1,6 +1,10 @@
using ProjectAirline.Entities;
using Dapper;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using ProjectAirline.Entities;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@ -9,25 +13,122 @@ namespace ProjectAirline.Repositories.Implementations;
public class PassangerRepository : IPassangerRepository
{
private readonly IConnectionString _connectionString;
private readonly ILogger<PassangerRepository> _logger;
public PassangerRepository(IConnectionString connectionString, ILogger<PassangerRepository> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreatePassanger(Passanger passanger)
{
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(passanger));
try
{
using var connection = new
SqlConnection(_connectionString.ConnectionString);
var queryInsert = @"
INSERT INTO Flights (FirstName, LastName)
VALUES (@FirstName, @LastName)";
connection.Execute(queryInsert, passanger);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
}
public void UpdatePassanger(Passanger passanger)
{
_logger.LogInformation("Редактирование объекта");
_logger.LogDebug("Объект: {json}",
JsonConvert.SerializeObject(passanger));
try
{
using var connection = new
SqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"
UPDATE Passangers
SET
FirstName=@FirstName,
LastName=@LastName
WHERE Id=@Id";
connection.Execute(queryUpdate, passanger);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
}
public void DeletePassanger(int id)
{
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new
SqlConnection(_connectionString.ConnectionString);
var queryDelete = @"
DELETE FROM Passangers
WHERE Id=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
}
public Passanger ReadPassangerById(int id)
{
return Passanger.CreateEntity(0, string.Empty, string.Empty);
}
public IEnumerable<Passanger> ReadPassangers()
{
return [];
_logger.LogInformation("Получение всех объектов");
try
{
using var connection = new
SqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Passangers";
var passangers = connection.Query<Passanger>(querySelect);
_logger.LogDebug("Полученные объекты: {json}",
JsonConvert.SerializeObject(passangers));
return passangers;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
}
public void UpdatePassanger(Passanger passanger)
public Passanger ReadPassangerById(int id)
{
_logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new
SqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM Passangers
WHERE [Id]=@id";
var passanger = connection.QueryFirst<Passanger>(querySelect, new
{
id
});
_logger.LogDebug("Найденный объект: {json}",
JsonConvert.SerializeObject(passanger));
return passanger;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
}
}

View File

@ -1,6 +1,10 @@
using ProjectAirline.Entities;
using Dapper;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using ProjectAirline.Entities;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@ -8,25 +12,121 @@ using System.Threading.Tasks;
namespace ProjectAirline.Repositories.Implementations;
public class PlaneRepository : IPlaneRepository
{
private readonly IConnectionString _connectionString;
private readonly ILogger<PlaneRepository> _logger;
public PlaneRepository(IConnectionString connectionString, ILogger<PlaneRepository> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreatePlane(Plane plane)
{
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(plane));
try
{
using var connection = new
SqlConnection(_connectionString.ConnectionString);
var queryInsert = @"
INSERT INTO Planes (Name, Capacity)
VALUES (@Name, @Capacity)";
connection.Execute(queryInsert, plane);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
}
public void UpdatePlane(Plane plane)
{
_logger.LogInformation("Редактирование объекта");
_logger.LogDebug("Объект: {json}",
JsonConvert.SerializeObject(plane));
try
{
using var connection = new
SqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"
UPDATE Planes
SET
Name=@Name,
Capacity=@Capacity
WHERE Id=@Id";
connection.Execute(queryUpdate, plane);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
}
public void DeletePlane(int id)
{
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new
SqlConnection(_connectionString.ConnectionString);
var queryDelete = @"
DELETE FROM Planes
WHERE Id=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
}
public Plane ReadPlaneById(int id)
{
return Plane.CreateEntity(0, string.Empty, 0);
_logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new
SqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM Planes
WHERE [Id]=@id";
var plane = connection.QueryFirst<Plane>(querySelect, new
{
id
});
_logger.LogDebug("Найденный объект: {json}",
JsonConvert.SerializeObject(plane));
return plane;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
}
public IEnumerable<Plane> ReadPlanes()
{
return [];
_logger.LogInformation("Получение всех объектов");
try
{
using var connection = new
SqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Planes";
var planes = connection.Query<Plane>(querySelect);
_logger.LogDebug("Полученные объекты: {json}",
JsonConvert.SerializeObject(planes));
return planes;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
}
public void UpdatePlane(Plane plane)
{
}
}

View File

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