WIP ПИбд-23. Максимов А.П. Лабораторная работа №2 #2

Open
zw1st wants to merge 3 commits from LabWork2 into LabWork1
25 changed files with 608 additions and 118 deletions

View File

@ -9,13 +9,13 @@ namespace ProjectTourismCompany.Entities;
public class Check
{
public int Id { get; private set; }
public string Title { get; private set; } = string.Empty;
//public string TripTitle { get; private set; } = string.Empty;
public DateTime PurchaseDate { get; private set; }
public int Price { get; private set; }
public int TripId { get; private set; }
public int ClientId { get; private set; }
public static Check CreateCheck(int id, string title, DateTime purchaseDate, int price, int tripId, int clientId)
public static Check CreateCheck(int id, DateTime purchaseDate, int price, int tripId, int clientId)//string triptitle,
{
return new Check() { Id = id, Title = title, PurchaseDate = purchaseDate, Price = price, TripId = tripId, ClientId = clientId };
return new Check() { Id = id, PurchaseDate = purchaseDate, Price = price, TripId = tripId, ClientId = clientId };//TripTitle = triptitle,
}
}

View File

@ -10,15 +10,15 @@ public class CompanyTrip
{
public int Id { get; private set; }
public int CompanyId { get; private set; }
public int TripId { get; private set; }
//public int TripId { get; private set; }
public int AdditionalPrice { get; private set; }
public static CompanyTrip CreateCompanyTrip(int id, int companyId, int tripId, int additionalPrice)
public static CompanyTrip CreateCompanyTrip(int id, int companyId , int additionalPrice)//int tripId,
{
return new CompanyTrip()
{
Id = id,
CompanyId = companyId,
TripId = tripId,
//TripId = tripId,
AdditionalPrice = additionalPrice
};
}

View File

@ -17,7 +17,6 @@ public class Trip
public DateTime EndDate { get; private set;}
public string StartCity { get; private set; }=string.Empty;
public string EndCity { get; private set;} =string.Empty;
public int CompanyId { get; private set; }
public TravelType TravelType { get; private set; }
public IEnumerable<CompanyTrip> CompanyTrip

View File

@ -35,18 +35,16 @@
label1 = new Label();
numericUpDownPrice = new NumericUpDown();
label2 = new Label();
textBoxTitle = new TextBox();
label3 = new Label();
label4 = new Label();
comboBoxClient = new ComboBox();
comboBoxTrip = new ComboBox();
comboBoxTripId = new ComboBox();
((System.ComponentModel.ISupportInitialize)numericUpDownPrice).BeginInit();
SuspendLayout();
//
// buttonCancel
//
buttonCancel.BackColor = Color.IndianRed;
buttonCancel.Location = new Point(221, 260);
buttonCancel.Location = new Point(220, 207);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(135, 51);
buttonCancel.TabIndex = 31;
@ -57,7 +55,7 @@
// buttonSave
//
buttonSave.BackColor = Color.LimeGreen;
buttonSave.Location = new Point(367, 260);
buttonSave.Location = new Point(366, 207);
buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(135, 51);
buttonSave.TabIndex = 30;
@ -67,7 +65,7 @@
//
// dateTimePickerPurchaseDate
//
dateTimePickerPurchaseDate.Location = new Point(282, 66);
dateTimePickerPurchaseDate.Location = new Point(281, 13);
dateTimePickerPurchaseDate.Name = "dateTimePickerPurchaseDate";
dateTimePickerPurchaseDate.Size = new Size(220, 27);
dateTimePickerPurchaseDate.TabIndex = 25;
@ -75,7 +73,7 @@
// labelStartDate
//
labelStartDate.AutoSize = true;
labelStartDate.Location = new Point(45, 71);
labelStartDate.Location = new Point(44, 18);
labelStartDate.Name = "labelStartDate";
labelStartDate.Size = new Size(92, 20);
labelStartDate.TabIndex = 18;
@ -84,7 +82,7 @@
// label1
//
label1.AutoSize = true;
label1.Location = new Point(64, 117);
label1.Location = new Point(63, 64);
label1.Name = "label1";
label1.Size = new Size(45, 20);
label1.TabIndex = 34;
@ -92,7 +90,7 @@
//
// numericUpDownPrice
//
numericUpDownPrice.Location = new Point(284, 110);
numericUpDownPrice.Location = new Point(283, 57);
numericUpDownPrice.Maximum = new decimal(new int[] { 1000000, 0, 0, 0 });
numericUpDownPrice.Minimum = new decimal(new int[] { 1, 0, 0, 0 });
numericUpDownPrice.Name = "numericUpDownPrice";
@ -103,32 +101,16 @@
// label2
//
label2.AutoSize = true;
label2.Location = new Point(45, 163);
label2.Location = new Point(44, 110);
label2.Name = "label2";
label2.Size = new Size(101, 20);
label2.TabIndex = 36;
label2.Text = "ФИО клиента";
//
// textBoxTitle
//
textBoxTitle.Location = new Point(282, 22);
textBoxTitle.Name = "textBoxTitle";
textBoxTitle.Size = new Size(220, 27);
textBoxTitle.TabIndex = 38;
//
// label3
//
label3.AutoSize = true;
label3.Location = new Point(45, 22);
label3.Name = "label3";
label3.Size = new Size(135, 20);
label3.TabIndex = 37;
label3.Text = "Название путевки";
//
// label4
//
label4.AutoSize = true;
label4.Location = new Point(45, 208);
label4.Location = new Point(44, 155);
label4.Name = "label4";
label4.Size = new Size(64, 20);
label4.TabIndex = 39;
@ -138,30 +120,28 @@
//
comboBoxClient.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxClient.FormattingEnabled = true;
comboBoxClient.Location = new Point(282, 163);
comboBoxClient.Location = new Point(281, 110);
comboBoxClient.Name = "comboBoxClient";
comboBoxClient.Size = new Size(217, 28);
comboBoxClient.TabIndex = 41;
//
// comboBoxTrip
// comboBoxTripId
//
comboBoxTrip.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxTrip.FormattingEnabled = true;
comboBoxTrip.Location = new Point(282, 208);
comboBoxTrip.Name = "comboBoxTrip";
comboBoxTrip.Size = new Size(217, 28);
comboBoxTrip.TabIndex = 42;
comboBoxTripId.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxTripId.FormattingEnabled = true;
comboBoxTripId.Location = new Point(281, 155);
comboBoxTripId.Name = "comboBoxTripId";
comboBoxTripId.Size = new Size(217, 28);
comboBoxTripId.TabIndex = 42;
//
// FormCheck
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(513, 322);
Controls.Add(comboBoxTrip);
ClientSize = new Size(516, 281);
Controls.Add(comboBoxTripId);
Controls.Add(comboBoxClient);
Controls.Add(label4);
Controls.Add(textBoxTitle);
Controls.Add(label3);
Controls.Add(label2);
Controls.Add(numericUpDownPrice);
Controls.Add(label1);
@ -186,10 +166,8 @@
private Label label1;
private NumericUpDown numericUpDownPrice;
private Label label2;
private TextBox textBoxTitle;
private Label label3;
private Label label4;
private ComboBox comboBoxClient;
private ComboBox comboBoxTrip;
private ComboBox comboBoxTripId;
}
}

View File

@ -1,6 +1,7 @@
using Microsoft.VisualBasic.FileIO;
using ProjectTourismCompany.Entities;
using ProjectTourismCompany.Repositories;
using ProjectTourismCompany.Repositories.Implementations;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@ -29,13 +30,8 @@ public partial class FormCheck : Form
throw new
InvalidDataException(nameof(check));
}
textBoxTitle.Text = check.Title;
dateTimePickerPurchaseDate.Value = check.PurchaseDate;
numericUpDownPrice.Value = check.Price;
comboBoxClient.SelectedItem = check.ClientId;
comboBoxTrip.SelectedItem = check.TripId;
_checkId = value;
}
catch (Exception ex)
@ -45,7 +41,7 @@ public partial class FormCheck : Form
}
}
}
public FormCheck(ICheckRepository checkRepository, IClientRepository clientRepository)
public FormCheck(ICheckRepository checkRepository, IClientRepository clientRepository, ITripRepository tripRepository)
{
InitializeComponent();
_checkRepository = checkRepository ?? throw new ArgumentNullException(nameof(checkRepository));
@ -53,23 +49,25 @@ public partial class FormCheck : Form
comboBoxClient.DataSource = clientRepository.ReadClients();
comboBoxClient.DisplayMember = "Name";
comboBoxClient.ValueMember = "Id";
comboBoxTripId.DataSource = tripRepository.ReadTrips();
comboBoxTripId.DisplayMember = "Title";
comboBoxTripId.ValueMember = "Id";
comboBoxTrip.DisplayMember = "Title";
comboBoxTrip.ValueMember = "Id";
}
private void buttonSave_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrWhiteSpace(textBoxTitle.Text) ||
comboBoxTrip.SelectedIndex < 0 ||
if (comboBoxTripId.SelectedIndex < 0 ||
comboBoxClient.SelectedIndex < 0)
{
throw new Exception("Имеются незаполненные поля");
}
_checkRepository.CreateCheck(Check.CreateCheck(_checkId, textBoxTitle.Text, dateTimePickerPurchaseDate.Value,
(int)numericUpDownPrice.Value, (int)comboBoxTrip.SelectedItem!,
(int)comboBoxClient.SelectedItem!));
_checkRepository.CreateCheck(Check.CreateCheck(_checkId , dateTimePickerPurchaseDate.Value,
(int)numericUpDownPrice.Value, (int)comboBoxTripId.SelectedValue!,
(int)comboBoxClient.SelectedValue!));
Close();
}
catch (Exception ex)

View File

@ -52,7 +52,7 @@
dataGridViewChecks.RowHeadersVisible = false;
dataGridViewChecks.RowHeadersWidth = 51;
dataGridViewChecks.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridViewChecks.Size = new Size(800, 450);
dataGridViewChecks.Size = new Size(643, 450);
dataGridViewChecks.TabIndex = 0;
//
// panel1
@ -92,8 +92,8 @@
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 450);
Controls.Add(panel1);
Controls.Add(dataGridViewChecks);
Controls.Add(panel1);
Name = "FormChecks";
Text = "Чеки";
Load += FormChecks_Load;

View File

@ -71,7 +71,7 @@ Enum.GetValues(typeof(ClientStatus));
}
else
{
_clientRepository.UpdateClient(CreateClient(0));
_clientRepository.CreateClient(CreateClient(0));
}
Close();
}

View File

@ -83,6 +83,10 @@
//
// dataGridViewClient
//
dataGridViewClient.AllowUserToAddRows = false;
dataGridViewClient.AllowUserToDeleteRows = false;
dataGridViewClient.AllowUserToResizeColumns = false;
dataGridViewClient.AllowUserToResizeRows = false;
dataGridViewClient.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridViewClient.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridViewClient.Dock = DockStyle.Fill;

View File

@ -33,6 +33,7 @@ public partial class FormCompany : Form
textBoxName.Text = client.Name;
comboBoxCountry.SelectedItem = client.CountryId;
comboBoxCountry.SelectedValue = client.CountryId;
_companyId = value;
}
catch (Exception ex)
@ -55,8 +56,9 @@ public partial class FormCompany : Form
_companyRepository = companyRepository ??
throw new ArgumentNullException(nameof(companyRepository));
comboBoxCountry.DataSource = countryRepository.ReadCountries();
comboBoxCountry.DisplayMember = "Name";
comboBoxCountry.DisplayMember = "CountryName";
comboBoxCountry.ValueMember = "Id";
}
@ -64,11 +66,18 @@ public partial class FormCompany : Form
{
try
{
if (string.IsNullOrEmpty(textBoxName.Text))
if (string.IsNullOrWhiteSpace(textBoxName.Text))
{
throw new Exception("Имеются незаполненные поля");
throw new Exception("Имеются незаполненные поля");
}
if (_companyId.HasValue)
{
_companyRepository.UpdateCompany(CreateCompany(_companyId.Value));
}
else
{
_companyRepository.CreateCompany(CreateCompany(0));
}
_companyRepository.CreateCompany(Company.CreateCompany(0, textBoxName.Text, (int)comboBoxCountry.SelectedItem!));
Close();
}
catch (Exception ex)
@ -76,8 +85,15 @@ public partial class FormCompany : Form
MessageBox.Show(ex.Message, "Ошибка при сохранении",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonCancel_Click(object sender, EventArgs e) =>
Close();
private Company CreateCompany(int id)
{
return Company.CreateCompany(id, textBoxName.Text, (int)comboBoxCountry.SelectedValue!);
}
}

View File

@ -50,6 +50,7 @@
dataGridView1.MultiSelect = false;
dataGridView1.Name = "dataGridView1";
dataGridView1.ReadOnly = true;
dataGridView1.RowHeadersVisible = false;
dataGridView1.RowHeadersWidth = 51;
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView1.Size = new Size(642, 450);

View File

@ -61,7 +61,7 @@ public partial class FormCountry : Form
}
else
{
_countryRepository.UpdateCountry(CreateCountry(0));
_countryRepository.CreateCountry(CreateCountry(0));
}
Close();
}

View File

@ -237,7 +237,6 @@
dataGridView1.Location = new Point(3, 23);
dataGridView1.MultiSelect = false;
dataGridView1.Name = "dataGridView1";
dataGridView1.ReadOnly = true;
dataGridView1.RowHeadersVisible = false;
dataGridView1.RowHeadersWidth = 51;
dataGridView1.Size = new Size(426, 450);
@ -248,14 +247,12 @@
columnCompanyName.HeaderText = "Название компании";
columnCompanyName.MinimumWidth = 6;
columnCompanyName.Name = "columnCompanyName";
columnCompanyName.ReadOnly = true;
//
// ColumnAdditionalPrice
//
ColumnAdditionalPrice.HeaderText = "Добавочная стоимость";
ColumnAdditionalPrice.MinimumWidth = 6;
ColumnAdditionalPrice.Name = "ColumnAdditionalPrice";
ColumnAdditionalPrice.ReadOnly = true;
ColumnAdditionalPrice.Resizable = DataGridViewTriState.True;
ColumnAdditionalPrice.SortMode = DataGridViewColumnSortMode.NotSortable;
//

View File

@ -74,19 +74,11 @@ Enum.GetValues(typeof(TravelType)))
try
{
if (string.IsNullOrWhiteSpace(textBoxStartCity.Text) ||
string.IsNullOrWhiteSpace(textBoxEndCity.Text) || dataGridView1.RowCount < 1)
string.IsNullOrWhiteSpace(textBoxEndCity.Text) || dataGridView1.RowCount < 1 || dateTimePickerStartDate.Value > dateTimePickerEndDate.Value)
{
throw new Exception("Имеются незаполненные поля");
}
if (_tripId.HasValue)
{
_tripRepository.CreateTrip(CreateTrip(_tripId.Value));
}
else
{
_tripRepository.CreateTrip(CreateTrip(0));
throw new Exception("Имеются незаполненные или некорректно заполненные поля");
}
_tripRepository.CreateTrip(CreateTrip(0));
Close();
}
@ -106,7 +98,7 @@ Enum.GetValues(typeof(TravelType)))
{
tr |= (TravelType)elem;
}
return Trip.CreateOpeartion(0, textBoxTitle.Text, (int)numericUpDownPrice.Value,
return Trip.CreateOpeartion(id, textBoxTitle.Text, (int)numericUpDownPrice.Value,
(int)numericUpDownHumanCapacity.Value, dateTimePickerStartDate.Value, dateTimePickerEndDate.Value,
textBoxStartCity.Text, textBoxEndCity.Text, tr, CreateListCompanyTripFromDataGrid());
}
@ -122,7 +114,7 @@ Enum.GetValues(typeof(TravelType)))
{
continue;
}
list.Add(CompanyTrip.CreateCompanyTrip(0, 0,
list.Add(CompanyTrip.CreateCompanyTrip(0,
Convert.ToInt32(row.Cells["ColumnCompanyName"].Value),
Convert.ToInt32(row.Cells["ColumnAdditionalPrice"].Value)));
}

View File

@ -48,6 +48,7 @@
dataGridView1.MultiSelect = false;
dataGridView1.Name = "dataGridView1";
dataGridView1.ReadOnly = true;
dataGridView1.RowHeadersVisible = false;
dataGridView1.RowHeadersWidth = 51;
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView1.Size = new Size(645, 450);

View File

@ -3,6 +3,10 @@ using Unity;
using ProjectTourismCompany.Repositories;
using ProjectTourismCompany.Repositories.Implementations;
using ProjectTourismCompany;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Serilog;
using Unity.Microsoft.Logging;
internal static class Program
{
@ -19,12 +23,28 @@ internal static class Program
private static IUnityContainer CreateContainer()
{
var container = new UnityContainer();
container.AddExtension(new LoggingExtension(CreateLoggerFactory()));
container.RegisterType<ICheckRepository, CheckRepository>(new TransientLifetimeManager());
container.RegisterType<IClientRepository, ClientRepository>(new TransientLifetimeManager());
container.RegisterType<ICompanyRepository, CompanyRepository>(new TransientLifetimeManager());
container.RegisterType<ICountryRepository, CountryRepository>(new TransientLifetimeManager());
container.RegisterType<ITripRepository, TripRepository>(new TransientLifetimeManager());
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;
}
}

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="Npgsql" Version="9.0.2" />
<PackageReference Include="Serilog" Version="4.2.0" />
<PackageReference Include="Serilog.Extensions.Logging" Version="9.0.1-dev-02308" />
<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.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

@ -9,9 +9,7 @@ namespace ProjectTourismCompany.Repositories;
public interface ICheckRepository
{
IEnumerable<Check> ReadChecks(DateTime? dateFrom =
null, DateTime? dateTo = null,
int? tripId = null, int? clientId = null);
IEnumerable<Check> ReadChecks(DateTime? dateFrom = null, DateTime? dateTo = null, int? tripId = null, int? clientId = null);
Check ReadCheckById(int id);
void CreateCheck(Check check);
void DeleteCheck(int id);

View File

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

View File

@ -1,4 +1,8 @@
using Microsoft.VisualBasic.FileIO;
using Dapper;
using Microsoft.Extensions.Logging;
using Microsoft.VisualBasic.FileIO;
using Newtonsoft.Json;
using Npgsql;
using ProjectTourismCompany.Entities;
using System;
using System.Collections.Generic;
@ -10,25 +14,91 @@ namespace ProjectTourismCompany.Repositories.Implementations;
internal class CheckRepository : ICheckRepository
{
private readonly IConnectionString _connectionString;
public ILogger<CheckRepository> _logger;
public CheckRepository(IConnectionString connectionString, ILogger<CheckRepository> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateCheck(Check check)
{
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(check));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryInsert = @"
INSERT INTO Receipt (PurchaseDate, Price, TripId, ClientId)
VALUES (@PurchaseDate, @Price, @TripId, @ClientId)";
connection.Execute(queryInsert, check);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
}
public void DeleteCheck(int id)
{
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryDelete = @"
DELETE FROM Receipt
WHERE Id=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
}
public IEnumerable<Check> ReadChecks(DateTime? dateFrom = null, DateTime? dateTo = null, int? tripId = null, int? clientId = null)
{
return [];
_logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Receipt";
var expenses = connection.Query<Check>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(expenses));
return expenses;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
}
public Check ReadCheckById(int id)
{
return Check.CreateCheck(0, "title", DateTime.Now, 500, 1, 2);
_logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM Receipt
WHERE Id=@id";
var expense = connection.QueryFirst<Check>(querySelect, new { id });
_logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(expense));
return expense;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
}
}

View File

@ -1,4 +1,8 @@
using ProjectTourismCompany.Entities.Enums;
using Dapper;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Npgsql;
using ProjectTourismCompany.Entities.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
@ -9,28 +13,114 @@ namespace ProjectTourismCompany.Repositories.Implementations;
internal class ClientRepository : IClientRepository
{
private readonly IConnectionString _connectionString;
private readonly ILogger<ClientRepository> _logger;
public ClientRepository(IConnectionString connectionString, ILogger<ClientRepository> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateClient(Client client)
{
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(client));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryInsert = @"
INSERT INTO Client (Name, BirthDate, Status, Phone)
VALUES (@Name, @BirthDate, @Status, @Phone)";
connection.Execute(queryInsert, client);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
}
public void DeleteClient(int id)
{
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_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.CreateClient(0, string.Empty, DateTime.Now, ClientStatus.None, "1") ;
_logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM Client
WHERE Id=@id";
var expense = connection.QueryFirst<Client>(querySelect, new { id });
_logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(expense));
return expense;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
}
public IEnumerable<Client> ReadClients()
{
return [];
_logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Client";
var expenses = connection.Query<Client>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(expenses));
return expenses;
}
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 NpgsqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"
UPDATE Client
SET
Name=@Name,
BirthDate=@BirthDate,
Status=@Status,
Phone=@Phone
WHERE Id=@Id";
connection.Execute(queryUpdate, client);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
}
}

View File

@ -1,36 +1,142 @@
using ProjectTourismCompany.Entities;
using Dapper;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Npgsql;
using ProjectTourismCompany.Entities;
using ProjectTourismCompany.Entities.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Unity;
namespace ProjectTourismCompany.Repositories.Implementations;
internal class CompanyRepository : ICompanyRepository
{
private readonly IConnectionString _connectionString;
private readonly ILogger<CompanyRepository> _logger;
public CompanyRepository(IConnectionString connectionString, ILogger<CompanyRepository> logger)
{
_connectionString = connectionString;
_logger = logger;
}
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 Company (Name, CountryId)
VALUES (@Name, @CountryId)";
connection.Execute(queryInsert, company);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
}
public void DeleteCompany(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 CompanyTrip
WHERE CompanyId = @id";
connection.Execute(queryDeleteSub, new { id }, transaction);
var queryDelete = @"
DELETE FROM Company
WHERE Id = @id";
connection.Execute(queryDelete, new { id }, transaction);
transaction.Commit();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
}
public IEnumerable<Company> ReadCompanies()
{
return [];
_logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Company";
var peopleExpenses = connection.Query<Company>(querySelect);
_logger.LogDebug("Полученные объекты: {json}",
JsonConvert.SerializeObject(peopleExpenses));
return peopleExpenses;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
}
public Company ReadCompanyById(int id)
{
return Company.CreateCompany(1, "randomName", 73);
_logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM Company
WHERE Id=@id";
var expense = connection.QueryFirst<Company>(querySelect, new { id });
_logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(expense));
return expense;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
}
public void UpdateCompany(Company company)
{
_logger.LogInformation("Редактирование объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(company));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"
UPDATE Company
SET
Name=@Name,
CountryId=@CountryId
WHERE Id=@Id";
connection.Execute(queryUpdate, company);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
}
}

View File

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourismCompany.Repositories.Implementations;
public class ConnectionString : IConnectionString
{
string IConnectionString.ConnectionString => "Host=localhost;Port=5432;Username=postgres;Password=postgres;Database=postgres1";
}

View File

@ -1,4 +1,8 @@
using ProjectTourismCompany.Entities;
using Dapper;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Npgsql;
using ProjectTourismCompany.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
@ -7,30 +11,114 @@ using System.Threading.Tasks;
namespace ProjectTourismCompany.Repositories.Implementations;
internal class CountryRepository : ICountryRepository
public class CountryRepository : ICountryRepository
{
private readonly IConnectionString _connectionString;
private readonly ILogger<CountryRepository> _logger;
public CountryRepository(IConnectionString connectionString, ILogger<CountryRepository> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateCountry(Country country)
{
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(country));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryInsert = @"
INSERT INTO Country (CountryName)
VALUES (@CountryName)";
connection.Execute(queryInsert, country);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
}
public void DeleteCountry(int id)
{
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryDelete = @"
DELETE FROM Country
WHERE Id=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
}
public IEnumerable<Country> ReadCountries()
{
return [];
_logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Country";
var expenses = connection.Query<Country>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(expenses));
return expenses;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
}
public Country ReadCountryById(int id)
{
return Country.CreateCountry(73, "Russia");
_logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM Country
WHERE Id=@id";
var expense = connection.QueryFirst<Country>(querySelect, new { id });
_logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(expense));
return expense;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
}
public void UpdateCountry(Country country)
{
_logger.LogInformation("Редактирование объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(country));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"
UPDATE Country
SET
CountryName=@CountryName
WHERE Id=@Id";
connection.Execute(queryUpdate, country);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
}
}

View File

@ -1,4 +1,8 @@
using ProjectTourismCompany.Entities;
using Dapper;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Npgsql;
using ProjectTourismCompany.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
@ -9,18 +13,90 @@ namespace ProjectTourismCompany.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);
connection.Open();
using var transaction = connection.BeginTransaction();
var queryInsert = @"
INSERT INTO Trip (Title, Price, HumanCapacity, StartDate, EndDate, StartCity, EndCity, TravelType)
VALUES (@Title, @Price, @HumanCapacity, @StartDate, @EndDate, @StartCity, @EndCity, @TravelType);
SELECT MAX(Id) FROM Trip";
var companyTripId =
connection.QueryFirst<int>(queryInsert, trip, transaction);
var querySubInsert = @"
INSERT INTO CompanyTrip (CompanyId, AdditionalPrice)
VALUES (@CompanyId, @AdditionalPrice)";
foreach (var elem in trip.CompanyTrip)
{
connection.Execute(querySubInsert, new
{
companyTripId,
elem.CompanyId,
elem.AdditionalPrice
}, transaction);
}
transaction.Commit();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
}
public Trip ReadTripById(int id)
{
return Trip.CreateOpeartion(0, "a", 0, 0, DateTime.Now, DateTime.Now, "Moscow", "Piter", Entities.Enums.TravelType.None, []);
_logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM Trip
WHERE Id=@id";
var expense = connection.QueryFirst<Trip>(querySelect, new { id });
_logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(expense));
return expense;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
}
public IEnumerable<Trip> ReadTrips(DateTime? dateForm = null, DateTime? dateTo = null, int? tripId = null, int? companyId = null, int? countryId = null)
{
return [];
_logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Trip";
var expenses = connection.Query<Trip>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(expenses));
return expenses;
}
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/tourism_log.txt",
"rollingInterval": "Day"
}
}
]
}
}