Фаза 2

This commit is contained in:
Anastasia_52 2024-12-21 17:17:29 +04:00
parent 2c89c1bea9
commit 38f4b3f29a
20 changed files with 638 additions and 95 deletions

View File

@ -13,7 +13,7 @@ public class Route
public string End_Point { get; private set; } = string.Empty; public string End_Point { get; private set; } = string.Empty;
public float Route_Length { get; private set; } public float Route_Length { get; private set; }
public static Route CreateEntity(int route_id, string start_point, string end_point, float length) public static Route CreateEntity (int route_id, string start_point, string end_point, float length)
{ {
return new Route return new Route
{ {

View File

@ -9,19 +9,19 @@ namespace ProjectGSM.Entities;
public class RouteSheet public class RouteSheet
{ {
public int Trip_ID { get; private set; } public int RouteSheet_ID { get; private set; }
public DateTime Start_Date { get; private set; } public DateTime Start_Date { get; private set; }
public DateTime End_Date { get; private set; } public DateTime End_Date { get; private set; }
public float Fuel_Consumption { get; private set; } public float Fuel_Consumption { get; private set; }
public int Car_ID { get; private set; } public int Car_ID { get; private set; }
public int Driver_ID { get; private set; } public int Driver_ID { get; private set; }
public IEnumerable<Route> Routes { get; private set; } = []; public IEnumerable<Trip_Route> Routes { get; private set; } = [];
public static RouteSheet CreateOperation(int trip_id, DateTime start_date, DateTime end_date, float consumption, int car_id, int driver_id, IEnumerable<Route> routes) public static RouteSheet CreateOperation(int routeSheet_id, DateTime start_date, DateTime end_date, float consumption, int car_id, int driver_id, IEnumerable<Trip_Route> routes)
{ {
return new RouteSheet return new RouteSheet
{ {
Trip_ID = trip_id, RouteSheet_ID = routeSheet_id,
Start_Date = start_date, Start_Date = start_date,
End_Date = end_date, End_Date = end_date,
Fuel_Consumption = consumption, Fuel_Consumption = consumption,

View File

@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectGSM.Entities;
public class Trip_Route
{
public int RouteSheet_ID { get; private set; }
public int Route_ID { get; private set; }
public static Trip_Route CreateElement(int routeSheet_ID, int route_id)
{
return new Trip_Route
{
RouteSheet_ID = routeSheet_ID,
Route_ID = route_id
};
}
}

View File

@ -23,7 +23,7 @@ namespace ProjectGSM
} }
catch (Exception ex) catch (Exception ex)
{ {
MessageBox.Show(ex.Message, "?????? ??? ????????", MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå",
MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
@ -36,7 +36,7 @@ namespace ProjectGSM
} }
catch (Exception ex) catch (Exception ex)
{ {
MessageBox.Show(ex.Message, "?????? ??? ????????", MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå",
MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
@ -49,7 +49,7 @@ namespace ProjectGSM
} }
catch (Exception ex) catch (Exception ex)
{ {
MessageBox.Show(ex.Message, "?????? ??? ????????", MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå",
MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
@ -62,7 +62,7 @@ namespace ProjectGSM
} }
catch (Exception ex) catch (Exception ex)
{ {
MessageBox.Show(ex.Message, "?????? ??? ????????", MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå",
MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
@ -75,7 +75,7 @@ namespace ProjectGSM
} }
catch (Exception ex) catch (Exception ex)
{ {
MessageBox.Show(ex.Message, "?????? ??? ????????", MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå",
MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
@ -88,7 +88,7 @@ namespace ProjectGSM
} }
catch (Exception ex) catch (Exception ex)
{ {
MessageBox.Show(ex.Message, "?????? ??? ????????", MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå",
MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }

View File

@ -31,7 +31,7 @@
Car_Mark = new Label(); Car_Mark = new Label();
Car_Model = new Label(); Car_Model = new Label();
Car_Type = new Label(); Car_Type = new Label();
labelСategoryRights = new Label(); License = new Label();
Consumption_Rate = new Label(); Consumption_Rate = new Label();
textBoxCarModel = new TextBox(); textBoxCarModel = new TextBox();
textBoxCarMark = new TextBox(); textBoxCarMark = new TextBox();
@ -70,14 +70,14 @@
Car_Type.TabIndex = 2; Car_Type.TabIndex = 2;
Car_Type.Text = "Тип машины:"; Car_Type.Text = "Тип машины:";
// //
// labelСategoryRights // License
// //
labelСategoryRights.AutoSize = true; License.AutoSize = true;
labelСategoryRights.Location = new Point(24, 130); License.Location = new Point(24, 130);
labelСategoryRights.Name = "labelСategoryRights"; License.Name = "License";
labelСategoryRights.Size = new Size(84, 20); License.Size = new Size(84, 20);
labelСategoryRights.TabIndex = 3; License.TabIndex = 3;
labelСategoryRights.Text = "Категория:"; License.Text = "Категория:";
// //
// Consumption_Rate // Consumption_Rate
// //
@ -159,7 +159,7 @@
Controls.Add(textBoxCarMark); Controls.Add(textBoxCarMark);
Controls.Add(textBoxCarModel); Controls.Add(textBoxCarModel);
Controls.Add(Consumption_Rate); Controls.Add(Consumption_Rate);
Controls.Add(labelСategoryRights); Controls.Add(License);
Controls.Add(Car_Type); Controls.Add(Car_Type);
Controls.Add(Car_Model); Controls.Add(Car_Model);
Controls.Add(Car_Mark); Controls.Add(Car_Mark);
@ -176,7 +176,7 @@
private Label Car_Mark; private Label Car_Mark;
private Label Car_Model; private Label Car_Model;
private Label Car_Type; private Label Car_Type;
private Label labelСategoryRights; private Label License;
private Label Consumption_Rate; private Label Consumption_Rate;
private TextBox textBoxCarModel; private TextBox textBoxCarModel;
private TextBox textBoxCarMark; private TextBox textBoxCarMark;

View File

@ -38,7 +38,7 @@ namespace ProjectGSM.Forms
MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false; return false;
} }
id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Driver_ID"].Value); id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Fuel_ID"].Value);
return true; return true;
} }

View File

@ -23,11 +23,11 @@ namespace ProjectGSM.Forms
_routeSheetRepository = routeSheetRepository ?? _routeSheetRepository = routeSheetRepository ??
throw new ArgumentNullException(nameof(routeSheetRepository)); throw new ArgumentNullException(nameof(routeSheetRepository));
comboBoxCarID.DataSource = routeSheetRepository.ReadTrips(); comboBoxCarID.DataSource = carRepository.ReadCars();
comboBoxCarID.DisplayMember = "Car_Mark"; comboBoxCarID.DisplayMember = "Car_Mark";
comboBoxCarID.ValueMember = "Car_ID"; comboBoxCarID.ValueMember = "Car_ID";
comboBoxDriverID.DataSource = routeSheetRepository.ReadTrips(); comboBoxDriverID.DataSource = driverRepository.ReadDrivers();
comboBoxDriverID.DisplayMember = "Firstname"; comboBoxDriverID.DisplayMember = "Firstname";
comboBoxDriverID.ValueMember = "Driver_ID"; comboBoxDriverID.ValueMember = "Driver_ID";
@ -36,19 +36,6 @@ namespace ProjectGSM.Forms
ColumnRoute.ValueMember = "Route_ID"; ColumnRoute.ValueMember = "Route_ID";
} }
private List<Route> CreateListDriversFromDataGrid()
{
var list = new List<Route>();
foreach (DataGridViewRow row in dataGridViewRoutes.Rows)
{
if (row.Cells["ColumnRoute"].Value == null || row.Cells["ColumnEndPoint"].Value == null)
continue;
list.Add(Route.CreateEntity(0, (string)row.Cells["ColumnRoute"].Value, (string)row.Cells["ColumnEndPoint"].Value, 0));
}
return list;
}
private void buttonSave_Click(object sender, EventArgs e) private void buttonSave_Click(object sender, EventArgs e)
{ {
try try
@ -56,7 +43,7 @@ namespace ProjectGSM.Forms
if (comboBoxCarID.SelectedIndex < 0 || comboBoxDriverID.SelectedIndex < 0 || dataGridViewRoutes.RowCount < 0) if (comboBoxCarID.SelectedIndex < 0 || comboBoxDriverID.SelectedIndex < 0 || dataGridViewRoutes.RowCount < 0)
throw new Exception("Имеются незаполненные поля"); throw new Exception("Имеются незаполненные поля");
_routeSheetRepository.CreateTrip(RouteSheet.CreateOperation(0, dateTimePickerStartDate.Value, dateTimePickerEndDate.Value, (float)numericUpDownConsumptionRate.Value, (int)comboBoxCarID.SelectedValue!, (int)comboBoxDriverID.SelectedValue!, CreateListDriversFromDataGrid())); _routeSheetRepository.CreateRouteSheet(RouteSheet.CreateOperation(0, dateTimePickerStartDate.Value, dateTimePickerEndDate.Value, (float)numericUpDownConsumptionRate.Value, (int)comboBoxCarID.SelectedValue!, (int)comboBoxDriverID.SelectedValue!, CreateListDriversFromDataGrid()));
Close(); Close();
} }
catch (Exception ex) catch (Exception ex)
@ -67,5 +54,19 @@ namespace ProjectGSM.Forms
} }
private void buttonCancel_Click(object sender, EventArgs e) => Close(); private void buttonCancel_Click(object sender, EventArgs e) => Close();
private List<Trip_Route> CreateListDriversFromDataGrid()
{
var list = new List<Trip_Route>();
foreach (DataGridViewRow row in dataGridViewRoutes.Rows)
{
if (row.Cells["ColumnRoute"].Value == null)
continue;
list.Add(Trip_Route.CreateElement(0, Convert.ToInt32(row.Cells["ColumnRoute"].Value)));
}
return list;
}
} }
} }

View File

@ -29,7 +29,7 @@ namespace ProjectGSM.Forms
throw new ArgumentNullException(nameof(routeSheetRepository)); throw new ArgumentNullException(nameof(routeSheetRepository));
} }
private void LoadList() => dataGridView.DataSource = _routeSheetRepository.ReadTrips(); private void LoadList() => dataGridView.DataSource = _routeSheetRepository.ReadRouteSheet();
private void buttonAdd_Click(object sender, EventArgs e) private void buttonAdd_Click(object sender, EventArgs e)
{ {

View File

@ -1,6 +1,11 @@
using ProjectGSM.Repositories; using ProjectGSM.Repositories;
using ProjectGSM.Repositories.Implementation;
using ProjectGSM.Repositories.Implementations; using ProjectGSM.Repositories.Implementations;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Configuration;
using Unity; using Unity;
using Serilog;
using Unity.Microsoft.Logging;
namespace ProjectGSM namespace ProjectGSM
{ {
@ -20,14 +25,31 @@ namespace ProjectGSM
private static IUnityContainer CreateContainer() private static IUnityContainer CreateContainer()
{ {
var container = new UnityContainer(); var container = new UnityContainer();
container.AddExtension(new LoggingExtension(CreateLoggerFactory()));
container.RegisterType<ICarRepository, CarRepository>(); container.RegisterType<ICarRepository, CarRepository>();
container.RegisterType<IDriverRepository, DriverRepository>(); container.RegisterType<IDriverRepository, DriverRepository>();
container.RegisterType<IPetrolStationRepository, PetrolStationRepository>(); container.RegisterType<IPetrolStationRepository, PetrolStationRepository>();
container.RegisterType<IRefillRepository, RefillRepository>(); container.RegisterType<IRefillRepository, RefillRepository>();
container.RegisterType<IRouteRepository, RouteRepository>(); container.RegisterType<IRouteRepository, RouteRepository>();
container.RegisterType<IRouteSheetRepository, RouteSheetRepository>(); container.RegisterType<IRouteSheetRepository, RouteSheetRepository>();
container.RegisterType<IConnectionString, ConnectionString>();
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

@ -9,7 +9,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="9.0.2" />
<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="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>
@ -27,4 +38,10 @@
</EmbeddedResource> </EmbeddedResource>
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project> </Project>

View File

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

View File

@ -9,7 +9,7 @@ namespace ProjectGSM.Repositories;
public interface IRouteSheetRepository public interface IRouteSheetRepository
{ {
IEnumerable<RouteSheet> ReadTrips(DateTime? dateFrom = null, DateTime? dateTo = null, int? carId = null, int? driverId = null, int? routeId = null); IEnumerable<RouteSheet> ReadRouteSheet(DateTime? dateFrom = null, DateTime? dateTo = null, int? carId = null, int? driverId = null, int? routeId = null);
void CreateTrip(RouteSheet trip); void CreateRouteSheet(RouteSheet routeSheet);
} }

View File

@ -1,34 +1,123 @@
using ProjectGSM.Entities; using Microsoft.Extensions.Logging;
using ProjectGSM.Repositories; using ProjectGSM.Entities;
using System; using Dapper;
using System.Collections.Generic; using Newtonsoft.Json;
using System.Linq; using Npgsql;
using System.Text;
using System.Threading.Tasks;
namespace ProjectGSM.Repositories.Implementations; namespace ProjectGSM.Repositories.Implementations;
public class CarRepository : ICarRepository public class CarRepository : ICarRepository
{ {
private readonly IConnectionString _connectionString;
private readonly ILogger<CarRepository> _logger;
public CarRepository(IConnectionString connectionString, ILogger<CarRepository> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateCar(Car car) public void CreateCar(Car car)
{ {
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(car));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryInsert = @"INSERT INTO Car (Car_Mark, Car_Model, Car_Type, License, Consumption_Rate)
VALUES (@Car_Mark, @Car_Model, @Car_Type, @License, @Consumption_Rate)";
connection.Execute(queryInsert, car);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
} }
public void DeleteCar(int id) public void DeleteCar(int id)
{ {
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryDelete = @"
DELETE FROM Car
WHERE Car_ID=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
} }
public Car ReadCarByID(int id) public Car ReadCarByID(int id)
{ {
return Car.CreateEntity(0, string.Empty, string.Empty, 0, 0, 0); _logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM Car
WHERE Car_ID=@id";
var car = connection.QueryFirst<Car>(querySelect, new { id });
_logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(car));
return car;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
} }
public IEnumerable<Car> ReadCars() public IEnumerable<Car> ReadCars()
{ {
return []; _logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Car";
var cars = connection.Query<Car>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(cars));
return cars;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
} }
public void UpdateCar(Car car) public void UpdateCar(Car car)
{ {
_logger.LogInformation("Редактирование объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(car));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"
UPDATE Car
SET
Car_Mark=@Car_Mark,
Car_Model=@Car_Model,
Car_Type=@Car_Type,
License=@License,
Consumption_Rate=@Consumption_Rate
WHERE Car_ID=@Car_ID";
connection.Execute(queryUpdate, car);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
} }
} }

View File

@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectGSM.Repositories.Implementation;
public class ConnectionString : IConnectionString
{
string IConnectionString.ConnectionString => "Server=localhost; Port=5432;Database= postgres;User Id=postgres; Password=postgres";
}

View File

@ -1,34 +1,121 @@
using ProjectGSM.Entities; using Microsoft.Extensions.Logging;
using ProjectGSM.Repositories; using Newtonsoft.Json;
using System; using Npgsql;
using System.Collections.Generic; using ProjectGSM.Entities;
using System.Linq; using Dapper;
using System.Text;
using System.Threading.Tasks;
namespace ProjectGSM.Repositories.Implementations; namespace ProjectGSM.Repositories.Implementations;
public class DriverRepository : IDriverRepository public class DriverRepository : IDriverRepository
{ {
private readonly IConnectionString _connectionString;
private readonly ILogger<DriverRepository> _logger;
public DriverRepository(IConnectionString connectionString, ILogger<DriverRepository> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateDriver(Driver driver) public void CreateDriver(Driver driver)
{ {
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(driver));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryInsert = @"INSERT INTO Driver (Firstname, Secondname, Driver_License)
VALUES (@Firstname, @Secondname, @Driver_License)";
connection.Execute(queryInsert, driver);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
} }
public void DeleteDriver(int id) public void DeleteDriver(int id)
{ {
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryDelete = @"
DELETE FROM Driver
WHERE Driver_ID=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
} }
public Driver ReadDriverByID(int id) public Driver ReadDriverByID(int id)
{ {
return Driver.CreateEntity(0, string.Empty, string.Empty, 0); _logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM Driver
WHERE Driver_ID=@id";
var driver = connection.QueryFirst<Driver>(querySelect, new { id });
_logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(driver));
return driver;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
} }
public IEnumerable<Driver> ReadDrivers() public IEnumerable<Driver> ReadDrivers()
{ {
return []; _logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Driver";
var drivers = connection.Query<Driver>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(drivers));
return drivers;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
} }
public void UpdateDriver(Driver driver) public void UpdateDriver(Driver driver)
{ {
_logger.LogInformation("Редактирование объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(driver));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"
UPDATE Driver
SET
Firstname=@Firstname,
Secondname=@Secondname,
Driver_License=@Driver_License
WHERE Driver_ID=@Driver_ID";
connection.Execute(queryUpdate, driver);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
} }
} }

View File

@ -1,34 +1,120 @@
using ProjectGSM.Entities; using Microsoft.Extensions.Logging;
using ProjectGSM.Repositories; using Newtonsoft.Json;
using System; using Npgsql;
using System.Collections.Generic; using ProjectGSM.Entities;
using System.Linq; using Dapper;
using System.Text;
using System.Threading.Tasks;
namespace ProjectGSM.Repositories.Implementations; namespace ProjectGSM.Repositories.Implementations;
public class PetrolStationRepository : IPetrolStationRepository public class PetrolStationRepository : IPetrolStationRepository
{ {
private readonly IConnectionString _connectionString;
private readonly ILogger<PetrolStationRepository> _logger;
public PetrolStationRepository(IConnectionString connectionString, ILogger<PetrolStationRepository> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreatePetrolStation(PetrolStation fuel) public void CreatePetrolStation(PetrolStation fuel)
{ {
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(fuel));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryInsert = @"INSERT INTO PetrolStation (Fuel_Type, Price_Per_Liter, Amount)
VALUES (@Fuel_Type, @Price_Per_Liter, @Amount)";
connection.Execute(queryInsert, fuel);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
} }
public void DeletePetrolStation(int id) public void DeletePetrolStation(int id)
{ {
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryDelete = @"
DELETE FROM PetrolStation
WHERE Fuel_ID=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
} }
public PetrolStation ReadPetrolStationByID(int id) public PetrolStation ReadPetrolStationByID(int id)
{ {
return PetrolStation.CreateEntity(0, 0, 0, 0); _logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM PetrolStation
WHERE Fuel_ID=@id";
var fuel = connection.QueryFirst<PetrolStation>(querySelect, new { id });
_logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(fuel));
return fuel;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
} }
public IEnumerable<PetrolStation> ReadPetrolStations() public IEnumerable<PetrolStation> ReadPetrolStations()
{ {
return []; _logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM PetrolStation";
var fuels = connection.Query<PetrolStation>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(fuels));
return fuels;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
} }
public void UpdatePetrolStation(PetrolStation PetrolStation) public void UpdatePetrolStation(PetrolStation PetrolStation)
{ {
_logger.LogInformation("Редактирование объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(PetrolStation));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"
UPDATE PetrolStation
SET
Fuel_Type=@Fuel_Type,
Price_Per_Liter=@Price_Per_Liter,
Amount=@Amount
WHERE Fuel_ID=@Fuel_ID";
connection.Execute(queryUpdate, PetrolStation);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
} }
} }

View File

@ -1,21 +1,57 @@
using ProjectGSM.Entities; using Microsoft.Extensions.Logging;
using ProjectGSM.Repositories; using Newtonsoft.Json;
using System; using Npgsql;
using System.Collections.Generic; using ProjectGSM.Entities;
using System.Linq; using Dapper;
using System.Text;
using System.Threading.Tasks;
namespace ProjectGSM.Repositories.Implementations; namespace ProjectGSM.Repositories.Implementations;
public class RefillRepository : IRefillRepository public class RefillRepository : IRefillRepository
{ {
private readonly IConnectionString _connectionString;
private readonly ILogger<RefillRepository> _logger;
public RefillRepository(IConnectionString connectionString, ILogger<RefillRepository> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateRefill(Refill refill) public void CreateRefill(Refill refill)
{ {
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(refill));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryInsert = @"INSERT INTO Refill (Refill_Date, Quantity, Fuel_ID, Car_ID)
VALUES (@Refill_Date, @Quantity, @Fuel_ID, @Car_ID)";
connection.Execute(queryInsert, refill);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
} }
public IEnumerable<Refill> ReadRefills(DateTime? dateFrom = null, DateTime? dateTo = null, int? fuelId = null, int? carId = null) public IEnumerable<Refill> ReadRefills(DateTime? dateFrom = null, DateTime? dateTo = null, int? fuelId = null, int? carId = null)
{ {
return []; _logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Refill";
var refills = connection.Query<Refill>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(refills));
return refills;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
} }
} }

View File

@ -1,34 +1,122 @@
using ProjectGSM.Entities; using Microsoft.Extensions.Logging;
using ProjectGSM.Repositories; using Newtonsoft.Json;
using System; using Npgsql;
using System.Collections.Generic; using ProjectGSM.Entities;
using System.Linq; using Dapper;
using System.Text;
using System.Threading.Tasks;
namespace ProjectGSM.Repositories.Implementations; namespace ProjectGSM.Repositories.Implementations;
public class RouteRepository : IRouteRepository public class RouteRepository : IRouteRepository
{ {
private readonly IConnectionString _connectionString;
private readonly ILogger<RouteRepository> _logger;
public RouteRepository(IConnectionString connectionString, ILogger<RouteRepository> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateRoute(Route route) public void CreateRoute(Route route)
{ {
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(route));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryInsert = @"INSERT INTO Route (Start_Point, End_Point, Route_Length)
VALUES (@Start_Point, @End_Point, @Route_Length)";
connection.Execute(queryInsert, route);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
} }
public void DeleteRoute(int id) public void DeleteRoute(int id)
{ {
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryDelete = @"
DELETE FROM Route
WHERE Route_ID=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
} }
public Route ReadRouteByID(int id) public Route ReadRouteByID(int id)
{ {
return Route.CreateEntity(0, string.Empty, string.Empty, 0); _logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM Route
WHERE Route_ID=@id";
var route = connection.QueryFirst<Route>(querySelect, new { id });
_logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(route));
return route;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
} }
public IEnumerable<Route> ReadRoutes() public IEnumerable<Route> ReadRoutes()
{ {
return []; _logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Route";
var routes = connection.Query<Route>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(routes));
return routes;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
} }
public void UpdateRoute(Route route) public void UpdateRoute(Route route)
{ {
_logger.LogInformation("Редактирование объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(route));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"
UPDATE Route
SET
Start_Point=@Start_Point,
End_Point=@End_Point,
Route_Length=@Route_Length
WHERE Route_ID=@Route_ID";
connection.Execute(queryUpdate, route);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
} }
} }

View File

@ -1,21 +1,78 @@
using ProjectGSM.Entities; using Microsoft.Extensions.Logging;
using ProjectGSM.Repositories; using Newtonsoft.Json;
using System; using Npgsql;
using System.Collections.Generic; using ProjectGSM.Entities;
using System.Linq; using Dapper;
using System.Text;
using System.Threading.Tasks;
namespace ProjectGSM.Repositories.Implementations; namespace ProjectGSM.Repositories.Implementations;
public class RouteSheetRepository : IRouteSheetRepository public class RouteSheetRepository : IRouteSheetRepository
{ {
public void CreateTrip(RouteSheet routeSheet)
private readonly IConnectionString _connectionString;
private readonly ILogger<RouteSheetRepository> _logger;
public RouteSheetRepository(IConnectionString connectionString, ILogger<RouteSheetRepository> logger)
{ {
_connectionString = connectionString;
_logger = logger;
} }
public IEnumerable<RouteSheet> ReadTrips(DateTime? dateFrom = null, DateTime? dateTo = null, int? carId = null, int? driverId = null, int? routeId = null)
public void CreateRouteSheet(RouteSheet routeSheet)
{ {
return []; _logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(routeSheet));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
connection.Open();
using var transaction = connection.BeginTransaction();
var queryInsert = @"
INSERT INTO RouteSheet (Start_Date, End_Date, Fuel_Consumption, Car_ID, Driver_ID)
VALUES (@Start_Date, @End_Date, @Fuel_Consumption, @Car_ID, @Driver_ID);
SELECT MAX(RouteSheet_ID) FROM RouteSheet";
var RouteSheetId = connection.QueryFirst<int>(queryInsert, routeSheet, transaction);
var querySubInsert = @"
INSERT INTO Trip_Route (RouteSheet_ID, Route_ID)
VALUES (@RouteSheetID, @Route_ID)";
foreach (var elem in routeSheet.Routes)
{
connection.Execute(querySubInsert, new
{
RouteSheetId,
elem.Route_ID
}, transaction);
} }
transaction.Commit();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
}
public IEnumerable<RouteSheet> ReadRouteSheet(DateTime? dateFrom = null, DateTime? dateTo = null, int? carId = null, int? driverId = null, int? routeId = null)
{
_logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM RouteSheet";
var routeSheets = connection.Query<RouteSheet>(querySelect);
_logger.LogDebug("Полученные объекты: {json}",
JsonConvert.SerializeObject(routeSheets));
return routeSheets;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
}
} }

View File

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