ИСЭбд-22. Парамонова И.А. Лабораторная работа №2 #3
@ -4,15 +4,15 @@ public class Ticket
|
||||
{
|
||||
public int Id { get; private set; }
|
||||
public DateTime SaleDate { get; private set; }
|
||||
public int PassengerId { get; private set; }
|
||||
public int Passenger_Id { get; private set; }
|
||||
public IEnumerable<TripTicket> TripTickets { get; private set; } = [];
|
||||
public static Ticket CreateOperation(int id, int passengerId, IEnumerable<TripTicket> tripTickets)
|
||||
public static Ticket CreateOperation(int id, int passenger_Id, IEnumerable<TripTicket> tripTickets)
|
||||
{
|
||||
return new Ticket
|
||||
{
|
||||
Id = id,
|
||||
SaleDate = DateTime.Now,
|
||||
PassengerId = passengerId,
|
||||
Passenger_Id = passenger_Id,
|
||||
TripTickets = tripTickets
|
||||
};
|
||||
}
|
||||
|
@ -11,18 +11,18 @@ public class Trip
|
||||
public int Id { get; private set; }
|
||||
public DateTime Departure { get; private set; }
|
||||
public DateTime Arrival { get; private set; }
|
||||
public int Route { get; private set; }
|
||||
public int Bus { get; private set; }
|
||||
public int Route_Id { get; private set; }
|
||||
public int Bus_Id { get; private set; }
|
||||
|
||||
public static Trip CreateOperation(int id, int route, int bus)
|
||||
public static Trip CreateOperation(int id, int route_Id, int bus_Id)
|
||||
{
|
||||
return new Trip
|
||||
{
|
||||
Id = id,
|
||||
Departure = DateTime.Now,
|
||||
Arrival = DateTime.Now,
|
||||
Route = route,
|
||||
Bus = bus
|
||||
Route_Id = route_Id,
|
||||
Bus_Id = bus_Id
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -9,13 +9,16 @@ namespace ProjectPassengerTransfers.Entities;
|
||||
public class TripTicket
|
||||
{
|
||||
public int Id { get; private set; }
|
||||
public int TicketId { get; private set; }
|
||||
public static TripTicket CreateElement(int id, int ticketId)
|
||||
public int Trip_Id { get; private set; }
|
||||
|
||||
public int Count { get; private set; }
|
||||
public static TripTicket CreateElement(int id, int trip_Id, int count)
|
||||
{
|
||||
return new TripTicket
|
||||
{
|
||||
Id = id,
|
||||
TicketId = ticketId
|
||||
Trip_Id = trip_Id,
|
||||
Count = count
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -80,6 +80,7 @@
|
||||
// numericUpDownDistance
|
||||
//
|
||||
numericUpDownDistance.Location = new Point(168, 217);
|
||||
numericUpDownDistance.Maximum = new decimal(new int[] { 1000, 0, 0, 0 });
|
||||
numericUpDownDistance.Name = "numericUpDownDistance";
|
||||
numericUpDownDistance.Size = new Size(150, 27);
|
||||
numericUpDownDistance.TabIndex = 4;
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
@ -48,7 +48,7 @@
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
|
@ -35,6 +35,7 @@
|
||||
buttonSave = new Button();
|
||||
buttonCancel = new Button();
|
||||
ColumnTrip = new DataGridViewComboBoxColumn();
|
||||
ColumnCount = new DataGridViewTextBoxColumn();
|
||||
groupBoxTickets.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)dataGridViewTickets).BeginInit();
|
||||
SuspendLayout();
|
||||
@ -53,7 +54,7 @@
|
||||
// dataGridViewTickets
|
||||
//
|
||||
dataGridViewTickets.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
|
||||
dataGridViewTickets.Columns.AddRange(new DataGridViewColumn[] { ColumnTrip });
|
||||
dataGridViewTickets.Columns.AddRange(new DataGridViewColumn[] { ColumnTrip, ColumnCount });
|
||||
dataGridViewTickets.Dock = DockStyle.Fill;
|
||||
dataGridViewTickets.Location = new Point(3, 23);
|
||||
dataGridViewTickets.Name = "dataGridViewTickets";
|
||||
@ -107,6 +108,13 @@
|
||||
ColumnTrip.Name = "ColumnTrip";
|
||||
ColumnTrip.Width = 125;
|
||||
//
|
||||
// ColumnCount
|
||||
//
|
||||
ColumnCount.HeaderText = "Количество билетов";
|
||||
ColumnCount.MinimumWidth = 6;
|
||||
ColumnCount.Name = "ColumnCount";
|
||||
ColumnCount.Width = 125;
|
||||
//
|
||||
// FormTicket
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(8F, 20F);
|
||||
@ -134,5 +142,6 @@
|
||||
private Button buttonSave;
|
||||
private Button buttonCancel;
|
||||
private DataGridViewComboBoxColumn ColumnTrip;
|
||||
private DataGridViewTextBoxColumn ColumnCount;
|
||||
}
|
||||
}
|
@ -50,11 +50,11 @@ namespace ProjectPassengerTransfers.Forms
|
||||
var list = new List<TripTicket>();
|
||||
foreach (DataGridViewRow row in dataGridViewTickets.Rows)
|
||||
{
|
||||
if (row.Cells["ColumnFeed"].Value == null)
|
||||
if (row.Cells["ColumnTrip"].Value == null || row.Cells["ColumnCount"].Value == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
list.Add(TripTicket.CreateElement(0, Convert.ToInt32(row.Cells["ColumnBus"].Value)));
|
||||
list.Add(TripTicket.CreateElement(0, Convert.ToInt32(row.Cells["ColumnTrip"].Value), Convert.ToInt32(row.Cells["ColumnCount"].Value)));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
@ -48,7 +48,7 @@
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
@ -117,4 +117,7 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="ColumnCount.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
</root>
|
@ -1,6 +1,10 @@
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using ProjectPassengerTransfers.Repositories;
|
||||
using ProjectPassengerTransfers.Repositories.Implementations;
|
||||
using Serilog;
|
||||
using Unity;
|
||||
using Unity.Microsoft.Logging;
|
||||
|
||||
namespace ProjectPassengerTransfers
|
||||
{
|
||||
@ -21,13 +25,31 @@ namespace ProjectPassengerTransfers
|
||||
private static IUnityContainer CreateContainer()
|
||||
{
|
||||
var container = new UnityContainer();
|
||||
|
||||
container.AddExtension(new LoggingExtension(CreateLoggerFactory()));
|
||||
|
||||
container.RegisterType<IBusRepository, BusRepository>();
|
||||
container.RegisterType<IPassengerRepository, PassengerRepository>();
|
||||
container.RegisterType<IRouteRepository, RouteRepository>();
|
||||
container.RegisterType<ITicketRepository, TicketRepository>();
|
||||
container.RegisterType<ITripRepository, TripRepository>();
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -10,9 +10,20 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Dapper" Version="2.1.35" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.1" />
|
||||
<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="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.Abstractions" Version="5.11.7" />
|
||||
<PackageReference Include="Unity.Container" Version="5.11.11" />
|
||||
<PackageReference Include="Unity.Microsoft.Logging" Version="5.11.1" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ProjectPassengerTransfers.Repositories;
|
||||
|
||||
public interface IConnectionString
|
||||
{
|
||||
public string ConnectionString { get; }
|
||||
}
|
@ -5,7 +5,7 @@ namespace ProjectPassengerTransfers.Repositories;
|
||||
public interface ITicketRepository
|
||||
{
|
||||
IEnumerable<Ticket> ReadTickets(DateTime? dateForm =
|
||||
null,int? ticketId = null, int? passengerId = null);
|
||||
null,int? trip_Id = null, int? passenger_Id = null);
|
||||
void CreateTicket(Ticket ticket);
|
||||
void DeleteTicket(int id);
|
||||
|
||||
|
@ -1,25 +1,124 @@
|
||||
using ProjectPassengerTransfers.Entities;
|
||||
using Dapper;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Newtonsoft.Json;
|
||||
using Npgsql;
|
||||
using ProjectPassengerTransfers.Entities;
|
||||
using ProjectPassengerTransfers.Entities.Enums;
|
||||
|
||||
namespace ProjectPassengerTransfers.Repositories.Implementations;
|
||||
|
||||
internal class BusRepository : IBusRepository
|
||||
{
|
||||
private readonly IConnectionString _connectionString;
|
||||
private readonly ILogger<BusRepository> _logger;
|
||||
public BusRepository(IConnectionString connectionString,
|
||||
ILogger<BusRepository> logger)
|
||||
{
|
||||
_connectionString = connectionString;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public void CreateBus(Bus bus)
|
||||
{
|
||||
_logger.LogInformation("Добавление объекта");
|
||||
_logger.LogDebug("Объект: {json}",
|
||||
JsonConvert.SerializeObject(bus));
|
||||
try
|
||||
{
|
||||
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
|
||||
var queryInsert = @"
|
||||
INSERT INTO Bus (BusModel, SeatCount)
|
||||
VALUES (@BusModel, @SeatCount)";
|
||||
connection.Execute(queryInsert, bus);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка при добавлении объекта");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
public void DeleteBus(int id)
|
||||
{
|
||||
_logger.LogInformation("Удаление объекта");
|
||||
_logger.LogDebug("Объект: {id}", id);
|
||||
try
|
||||
{
|
||||
using var connection = new
|
||||
NpgsqlConnection(_connectionString.ConnectionString);
|
||||
var queryDelete = @"
|
||||
DELETE FROM Bus
|
||||
WHERE Id=@id";
|
||||
connection.Execute(queryDelete, new { id });
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка при удалении объекта");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
public Bus ReadBusById(int id)
|
||||
{
|
||||
return Bus.CreateEntity(0, BusModel.None, 0);
|
||||
_logger.LogInformation("Получение объекта по идентификатору");
|
||||
_logger.LogDebug("Объект: {id}", id);
|
||||
try
|
||||
{
|
||||
using var connection = new
|
||||
NpgsqlConnection(_connectionString.ConnectionString);
|
||||
var querySelect = @"
|
||||
SELECT * FROM Bus
|
||||
WHERE Id=@Id";
|
||||
var bus = connection.QueryFirst<Bus>(querySelect,
|
||||
new { id });
|
||||
_logger.LogDebug("Найденный объект: {json}",
|
||||
JsonConvert.SerializeObject(bus));
|
||||
return bus;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка при поиске объекта");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
public IEnumerable<Bus> ReadBuses()
|
||||
{
|
||||
return [];
|
||||
_logger.LogInformation("Получение всех объектов");
|
||||
try
|
||||
{
|
||||
using var connection = new
|
||||
NpgsqlConnection(_connectionString.ConnectionString);
|
||||
var querySelect = "SELECT * FROM Bus";
|
||||
var buses = connection.Query<Bus>(querySelect);
|
||||
_logger.LogDebug("Полученные объекты: {json}",
|
||||
JsonConvert.SerializeObject(buses));
|
||||
return buses;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка при чтении объектов");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
public void UpdateBus(Bus bus)
|
||||
{
|
||||
_logger.LogInformation("Редактирование объекта");
|
||||
_logger.LogDebug("Объект: {json}",
|
||||
JsonConvert.SerializeObject(bus));
|
||||
try
|
||||
{
|
||||
using var connection = new
|
||||
NpgsqlConnection(_connectionString.ConnectionString);
|
||||
var queryUpdate = @"
|
||||
UPDATE Bus
|
||||
SET
|
||||
BusModel=@BusModel,
|
||||
SeatCount=@SeatCount
|
||||
WHERE Id=@Id";
|
||||
connection.Execute(queryUpdate, bus);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка при редактировании объекта");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ProjectPassengerTransfers.Repositories.Implementations;
|
||||
|
||||
public class ConnectionString : IConnectionString
|
||||
{
|
||||
string IConnectionString.ConnectionString => "Server=localhost, Port=5432; Username=postgres; Password=18820520; Database=otp; Include Error Detail=true";
|
||||
}
|
@ -1,25 +1,125 @@
|
||||
using ProjectPassengerTransfers.Entities;
|
||||
using Dapper;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Newtonsoft.Json;
|
||||
using Npgsql;
|
||||
using ProjectPassengerTransfers.Entities;
|
||||
using ProjectPassengerTransfers.Entities.Enums;
|
||||
|
||||
namespace ProjectPassengerTransfers.Repositories.Implementations;
|
||||
|
||||
internal class PassengerRepository : IPassengerRepository
|
||||
{
|
||||
private readonly IConnectionString _connectionString;
|
||||
private readonly ILogger<PassengerRepository> _logger;
|
||||
public PassengerRepository(IConnectionString connectionString,
|
||||
ILogger<PassengerRepository> logger)
|
||||
{
|
||||
_connectionString = connectionString;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public void CreatePassenger(Passenger passenger)
|
||||
{
|
||||
_logger.LogInformation("Добавление объекта");
|
||||
_logger.LogDebug("Объект: {json}",
|
||||
JsonConvert.SerializeObject(passenger));
|
||||
try
|
||||
{
|
||||
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
|
||||
var queryInsert = @"
|
||||
INSERT INTO Passenger (PassengerType, Name, Surname)
|
||||
VALUES (@PassengerType, @Name, @Surname)";
|
||||
connection.Execute(queryInsert, passenger);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка при добавлении объекта");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
public void DeletePassenger(int id)
|
||||
{
|
||||
_logger.LogInformation("Удаление объекта");
|
||||
_logger.LogDebug("Объект: {id}", id);
|
||||
try
|
||||
{
|
||||
using var connection = new
|
||||
NpgsqlConnection(_connectionString.ConnectionString);
|
||||
var queryDelete = @"
|
||||
DELETE FROM Passenger
|
||||
WHERE Id=@id";
|
||||
connection.Execute(queryDelete, new { id });
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка при удалении объекта");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
public Passenger ReadPassengerById(int id)
|
||||
{
|
||||
return Passenger.CreateEntity(0, PassengerType.None, string.Empty, string.Empty);
|
||||
_logger.LogInformation("Получение объекта по идентификатору");
|
||||
_logger.LogDebug("Объект: {id}", id);
|
||||
try
|
||||
{
|
||||
using var connection = new
|
||||
NpgsqlConnection(_connectionString.ConnectionString);
|
||||
var querySelect = @"
|
||||
SELECT * FROM Passenger
|
||||
WHERE Id=@id";
|
||||
var passenger = connection.QueryFirst<Passenger>(querySelect,
|
||||
new { id });
|
||||
_logger.LogDebug("Найденный объект: {json}",
|
||||
JsonConvert.SerializeObject(passenger));
|
||||
return passenger;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка при поиске объекта");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
public IEnumerable<Passenger> ReadPassengers()
|
||||
{
|
||||
return [];
|
||||
_logger.LogInformation("Получение всех объектов");
|
||||
try
|
||||
{
|
||||
using var connection = new
|
||||
NpgsqlConnection(_connectionString.ConnectionString);
|
||||
var querySelect = "SELECT * FROM Passenger";
|
||||
var passengers = connection.Query<Passenger>(querySelect);
|
||||
_logger.LogDebug("Полученные объекты: {json}",
|
||||
JsonConvert.SerializeObject(passengers));
|
||||
return passengers;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка при чтении объектов");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
public void UpdatePassenger(Passenger passenger)
|
||||
{
|
||||
_logger.LogInformation("Редактирование объекта");
|
||||
_logger.LogDebug("Объект: {json}",
|
||||
JsonConvert.SerializeObject(passenger));
|
||||
try
|
||||
{
|
||||
using var connection = new
|
||||
NpgsqlConnection(_connectionString.ConnectionString);
|
||||
var queryUpdate = @"
|
||||
UPDATE Passenger
|
||||
SET
|
||||
PassengerType=@PassengerType,
|
||||
Name=@Name,
|
||||
Surname=@Surname
|
||||
WHERE Id=@Id";
|
||||
connection.Execute(queryUpdate, passenger);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка при редактировании объекта");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,24 +1,119 @@
|
||||
using ProjectPassengerTransfers.Entities;
|
||||
using Dapper;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Newtonsoft.Json;
|
||||
using Npgsql;
|
||||
using ProjectPassengerTransfers.Entities;
|
||||
|
||||
namespace ProjectPassengerTransfers.Repositories.Implementations;
|
||||
|
||||
internal 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)
|
||||
{
|
||||
_logger.LogInformation("Добавление объекта");
|
||||
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(route));
|
||||
try
|
||||
{
|
||||
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
|
||||
var queryInsert = @"
|
||||
INSERT INTO Route (Name, DepartureCity, ArrivalCity, Distance)
|
||||
VALUES (@Name, @DepartureCity, @ArrivalCity, @Distance)";
|
||||
connection.Execute(queryInsert, route);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка при добавлении объекта");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
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 Id=@id";
|
||||
connection.Execute(queryDelete, new { id });
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка при удалении объекта");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
public Route ReadRouteById(int id)
|
||||
{
|
||||
return Route.CreateEntity(0, string.Empty, 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 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()
|
||||
{
|
||||
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)
|
||||
{
|
||||
_logger.LogInformation("Редактирование объекта");
|
||||
_logger.LogDebug("Объект: {json}",
|
||||
JsonConvert.SerializeObject(route));
|
||||
try
|
||||
{
|
||||
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
|
||||
var queryUpdate = @"
|
||||
UPDATE Route
|
||||
SET
|
||||
Name=@Name,
|
||||
DepartureCity=@DepartureCity,
|
||||
ArrivalCity=@ArrivalCity,
|
||||
Distance=@Distance
|
||||
WHERE Id=@Id";
|
||||
connection.Execute(queryUpdate, route);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка при редактировании объекта");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,18 +1,100 @@
|
||||
using ProjectPassengerTransfers.Entities;
|
||||
using Dapper;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Newtonsoft.Json;
|
||||
using Npgsql;
|
||||
using ProjectPassengerTransfers.Entities;
|
||||
|
||||
namespace ProjectPassengerTransfers.Repositories.Implementations;
|
||||
|
||||
internal class TicketRepository : ITicketRepository
|
||||
{
|
||||
private readonly IConnectionString _connectionString;
|
||||
private readonly ILogger<TicketRepository> _logger;
|
||||
public TicketRepository(IConnectionString connectionString,
|
||||
ILogger<TicketRepository> logger)
|
||||
{
|
||||
_connectionString = connectionString;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public void CreateTicket(Ticket ticket)
|
||||
{
|
||||
_logger.LogInformation("Добавление объекта");
|
||||
_logger.LogDebug("Объект: {json}",
|
||||
JsonConvert.SerializeObject(ticket));
|
||||
try
|
||||
{
|
||||
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
|
||||
connection.Open();
|
||||
using var transaction = connection.BeginTransaction();
|
||||
var queryInsert = @"
|
||||
INSERT INTO Ticket (Passenger_Id, SaleDate)
|
||||
VALUES (@Passenger_Id, @SaleDate);
|
||||
SELECT MAX(Id) FROM Ticket";
|
||||
var ticketId = connection.QueryFirst<int>(queryInsert, ticket, transaction);
|
||||
var queryBuyInsert = @"
|
||||
INSERT INTO Trip_tickets (TicketID, Trip_ID, Count)
|
||||
VALUES (@TicketID,@Trip_ID, @Count)";
|
||||
foreach (var elem in ticket.TripTickets)
|
||||
{
|
||||
connection.Execute(queryBuyInsert, new
|
||||
{
|
||||
ticketId,
|
||||
elem.Trip_Id,
|
||||
elem.Count
|
||||
}, transaction);
|
||||
}
|
||||
transaction.Commit();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка при добавлении объекта");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
public void DeleteTicket(int id)
|
||||
{
|
||||
_logger.LogInformation("Удаление объекта");
|
||||
_logger.LogDebug("Объект: {id}", id);
|
||||
try
|
||||
{
|
||||
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
|
||||
connection.Open();
|
||||
using var transaction = connection.BeginTransaction();
|
||||
var queryDeleteSub = @"
|
||||
DELETE FROM Trip_tickets
|
||||
WHERE TicketId = @id";
|
||||
connection.Execute(queryDeleteSub, new { id }, transaction);
|
||||
|
||||
var queryDelete = @"
|
||||
DELETE FROM Ticket
|
||||
WHERE Id = @id";
|
||||
connection.Execute(queryDelete, new { id }, transaction);
|
||||
|
||||
transaction.Commit();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка при удалении объекта");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerable<Ticket> ReadTickets(DateTime? dateForm = null, int? ticketId = null, int? passengerId = null)
|
||||
{
|
||||
return [];
|
||||
_logger.LogInformation("Получение всех объектов");
|
||||
try
|
||||
{
|
||||
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
|
||||
var querySelect = "SELECT * FROM Ticket";
|
||||
var ticket = connection.Query<Ticket>(querySelect);
|
||||
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(ticket));
|
||||
return ticket;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка при чтении объектов");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,17 +1,63 @@
|
||||
using ProjectPassengerTransfers.Entities;
|
||||
using Dapper;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Newtonsoft.Json;
|
||||
using Npgsql;
|
||||
using ProjectPassengerTransfers.Entities;
|
||||
|
||||
namespace ProjectPassengerTransfers.Repositories.Implementations;
|
||||
|
||||
internal class TripRepository : ITripRepository
|
||||
{
|
||||
private readonly IConnectionString _connectionString;
|
||||
private readonly ILogger<TripRepository> _logger;
|
||||
public TripRepository(IConnectionString connectionString,
|
||||
ILogger<TripRepository> logger)
|
||||
{
|
||||
_connectionString = connectionString;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public void CreateTrip(Trip trip)
|
||||
{
|
||||
_logger.LogInformation("Добавление объекта");
|
||||
_logger.LogDebug("Объект: {json}",
|
||||
JsonConvert.SerializeObject(trip));
|
||||
try
|
||||
{
|
||||
using var connection = new
|
||||
NpgsqlConnection(_connectionString.ConnectionString);
|
||||
var queryInsert = @"
|
||||
INSERT INTO Trip (Departure, Arrival, Route_Id, Bus_Id)
|
||||
VALUES (@Departure, @Arrival, @Route_Id, @Bus_Id)";
|
||||
connection.Execute(queryInsert, trip);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка при добавлении объекта");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerable<Trip> ReadTrips(DateTime? dateForm =
|
||||
null, DateTime? dateTo = null,
|
||||
int? tripId = null, int? routeId = null, int? busId = null)
|
||||
{
|
||||
return [];
|
||||
_logger.LogInformation("Получение всех объектов");
|
||||
try
|
||||
{
|
||||
using var connection = new
|
||||
NpgsqlConnection(_connectionString.ConnectionString);
|
||||
var querySelect = "SELECT * FROM Trip";
|
||||
var trips =
|
||||
connection.Query<Trip>(querySelect);
|
||||
_logger.LogDebug("Полученные объекты: {json}",
|
||||
JsonConvert.SerializeObject(trips));
|
||||
return trips;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка при чтении объектов");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,15 @@
|
||||
{
|
||||
"Serilog": {
|
||||
"Using": [ "Serilog.Sinks.File" ],
|
||||
"MinimumLevel": "Debug",
|
||||
"WriteTo": [
|
||||
{
|
||||
"Name": "File",
|
||||
"Args": {
|
||||
"path": "Logs/log.txt",
|
||||
"rollingInterval": "Day"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user