diff --git a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Entities/MedicalHistory.cs b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Entities/MedicalHistory.cs index e15c2e2..a9bab71 100644 --- a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Entities/MedicalHistory.cs +++ b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Entities/MedicalHistory.cs @@ -15,11 +15,9 @@ public class MedicalHistory // сущность пополнения, напо public int DoctorId { get; private set; } - // public Diagnosis Diagnosis { get; private set; } public DateTime VisitDate { get; private set; } - // public Status Status { get; private set; } public IEnumerable DrugMedicalHistory { get; private set; } = []; @@ -31,9 +29,7 @@ public class MedicalHistory // сущность пополнения, напо Id = id, PatientId = patientId, DoctorId = doctorId, - // Diagnosis = diagnosis, VisitDate = DateTime.Now, - // Status = status, DrugMedicalHistory = drugMedicalHistory }; } diff --git a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Entities/Patient.cs b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Entities/Patient.cs index 2ab6bfa..70cb6e3 100644 --- a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Entities/Patient.cs +++ b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Entities/Patient.cs @@ -10,7 +10,7 @@ public class Patient { public int Id { get; private set; } - public string Firts_Name { get; private set; } = string .Empty; // string.Empty - означает, что по умолчанию это свойство будет содержать пустую строку, а не null(то же самое "") + public string First_Name { get; private set; } = string .Empty; // string.Empty - означает, что по умолчанию это свойство будет содержать пустую строку, а не null(то же самое "") public string Last_Name { get; private set; } = string.Empty; @@ -19,12 +19,12 @@ public class Patient // ТУТ СДЕЛАЕМ СТАТИСТИЧЕСКИЙ МЕТОД, который будет отвечать за создание объекта - public static Patient CreateEntity(int id, string firts_Name, string last_Name, string contactNumber) + public static Patient CreateEntity(int id, string first_Name, string last_Name, string contactNumber) { return new Patient { Id = id, - Firts_Name = firts_Name, + First_Name = first_Name, Last_Name = last_Name, ContactNumber = contactNumber }; diff --git a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/FormPolyclinic.cs b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/FormPolyclinic.cs index 4b5fdf7..7bcd0ee 100644 --- a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/FormPolyclinic.cs +++ b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/FormPolyclinic.cs @@ -67,7 +67,7 @@ namespace RegistrationPatientsPolyclinic { try { - _container.Resolve().ShowDialog(); + _container.Resolve().ShowDialog(); } catch (Exception ex) { diff --git a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Forms/FormMedicalHistory.Designer.cs b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Forms/FormMedicalHistory.Designer.cs index 3bda3cf..13238ca 100644 --- a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Forms/FormMedicalHistory.Designer.cs +++ b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Forms/FormMedicalHistory.Designer.cs @@ -34,11 +34,9 @@ labelPacient = new Label(); groupBox1 = new GroupBox(); dataGridView = new DataGridView(); - ColumnDiagnosis = new DataGridViewComboBoxColumn(); - ColumnStatus = new DataGridViewComboBoxColumn(); - ColumnDrug = new DataGridViewComboBoxColumn(); labelDoctor = new Label(); comboBoxDoctor = new ComboBox(); + ColumnDrug = new DataGridViewComboBoxColumn(); groupBox1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); SuspendLayout(); @@ -100,7 +98,7 @@ dataGridView.AllowUserToResizeRows = false; dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; - dataGridView.Columns.AddRange(new DataGridViewColumn[] { ColumnDiagnosis, ColumnStatus, ColumnDrug }); + dataGridView.Columns.AddRange(new DataGridViewColumn[] { ColumnDrug }); dataGridView.Location = new Point(9, 26); dataGridView.MultiSelect = false; dataGridView.Name = "dataGridView"; @@ -110,31 +108,6 @@ dataGridView.Size = new Size(510, 188); dataGridView.TabIndex = 0; // - // ColumnDiagnosis - // - ColumnDiagnosis.HeaderText = "Диагноз"; - ColumnDiagnosis.MinimumWidth = 6; - ColumnDiagnosis.Name = "ColumnDiagnosis"; - ColumnDiagnosis.Resizable = DataGridViewTriState.True; - ColumnDiagnosis.SortMode = DataGridViewColumnSortMode.Automatic; - ColumnDiagnosis.Width = 125; - // - // ColumnStatus - // - ColumnStatus.HeaderText = "Статус"; - ColumnStatus.MinimumWidth = 6; - ColumnStatus.Name = "ColumnStatus"; - ColumnStatus.Width = 125; - // - // ColumnDrug - // - ColumnDrug.HeaderText = "Лекарство"; - ColumnDrug.MinimumWidth = 6; - ColumnDrug.Name = "ColumnDrug"; - ColumnDrug.Resizable = DataGridViewTriState.True; - ColumnDrug.SortMode = DataGridViewColumnSortMode.Automatic; - ColumnDrug.Width = 125; - // // labelDoctor // labelDoctor.AutoSize = true; @@ -153,6 +126,15 @@ comboBoxDoctor.Size = new Size(151, 28); comboBoxDoctor.TabIndex = 16; // + // ColumnDrug + // + ColumnDrug.HeaderText = "Лекарство"; + ColumnDrug.MinimumWidth = 6; + ColumnDrug.Name = "ColumnDrug"; + ColumnDrug.Resizable = DataGridViewTriState.True; + ColumnDrug.SortMode = DataGridViewColumnSortMode.Automatic; + ColumnDrug.Width = 125; + // // FormMedicalHistory // AutoScaleDimensions = new SizeF(8F, 20F); @@ -180,10 +162,8 @@ private Label labelPacient; private GroupBox groupBox1; private DataGridView dataGridView; - private DataGridViewComboBoxColumn ColumnDiagnosis; - private DataGridViewComboBoxColumn ColumnStatus; - private DataGridViewComboBoxColumn ColumnDrug; private Label labelDoctor; private ComboBox comboBoxDoctor; + private DataGridViewComboBoxColumn ColumnDrug; } } \ No newline at end of file diff --git a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Forms/FormMedicalHistory.resx b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Forms/FormMedicalHistory.resx index f8b0fa0..cf50a0f 100644 --- a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Forms/FormMedicalHistory.resx +++ b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Forms/FormMedicalHistory.resx @@ -117,12 +117,6 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - True - - - True - True diff --git a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Forms/FormPatient.cs b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Forms/FormPatient.cs index 4a0db59..87f3fc0 100644 --- a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Forms/FormPatient.cs +++ b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Forms/FormPatient.cs @@ -36,7 +36,7 @@ namespace RegistrationPatientsPolyclinic.Forms throw new InvalidDataException(nameof(patient)); // если не находим выкидываем ошибку } // Если все норм, то пытаемся заполнить поля - textBoxName.Text = patient.Firts_Name; + textBoxName.Text = patient.First_Name; textBoxLastName.Text = patient.Last_Name; textBoxContactNumber.Text = patient.ContactNumber; _patientId = value; diff --git a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Program.cs b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Program.cs index 0deec3f..ad84fe0 100644 --- a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Program.cs +++ b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Program.cs @@ -1,6 +1,10 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; using RegistrationPatientsPolyclinic.Repositories; using RegistrationPatientsPolyclinic.Repositories.Implementations; +using Serilog; using Unity; +using Unity.Microsoft.Logging; namespace RegistrationPatientsPolyclinic { @@ -26,14 +30,31 @@ namespace RegistrationPatientsPolyclinic // + container.AddExtension(new LoggingExtension(CreateLoggerFactory())); + + container.RegisterType(); container.RegisterType(); container.RegisterType(); container.RegisterType(); container.RegisterType(); container.RegisterType(); + container.RegisterType(); 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; + } + } } \ No newline at end of file diff --git a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic.csproj b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic.csproj index c77a06e..2efeb50 100644 --- a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic.csproj +++ b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic.csproj @@ -10,7 +10,19 @@ + + + + + + + + + + + + @@ -28,4 +40,10 @@ + + + PreserveNewest + + + \ No newline at end of file diff --git a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Repositories/IConnectionString.cs b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Repositories/IConnectionString.cs new file mode 100644 index 0000000..d99e765 --- /dev/null +++ b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Repositories/IConnectionString.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace RegistrationPatientsPolyclinic.Repositories; + +public interface IConnectionString +{ + string ConnectionString { get; } +} diff --git a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Repositories/IDrugRepository.cs b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Repositories/IDrugRepository.cs index 50fc6d2..9f64064 100644 --- a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Repositories/IDrugRepository.cs +++ b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Repositories/IDrugRepository.cs @@ -13,9 +13,9 @@ public interface IDrugRepository Drug ReadDrugById(int id); - void CreateDrug(Drug drag); + void CreateDrug(Drug drug); - void UpdateDrug(Drug drag); + void UpdateDrug(Drug drug); void DeleteDrug(int id); } diff --git a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Repositories/Implementations/ConnectionString.cs b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Repositories/Implementations/ConnectionString.cs new file mode 100644 index 0000000..13924a6 --- /dev/null +++ b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Repositories/Implementations/ConnectionString.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace RegistrationPatientsPolyclinic.Repositories.Implementations; + +public class ConnectionString : IConnectionString +{ + string IConnectionString.ConnectionString => "Server=localhost,5432;Database=polyclinic;Uid=postgres;Pwd=postgres;"; +} diff --git a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Repositories/Implementations/DrugRepository.cs b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Repositories/Implementations/DrugRepository.cs index c64d8e9..1c22d04 100644 --- a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Repositories/Implementations/DrugRepository.cs +++ b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Repositories/Implementations/DrugRepository.cs @@ -1,4 +1,8 @@ -using RegistrationPatientsPolyclinic.Entities; +using Dapper; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; +using RegistrationPatientsPolyclinic.Entities; using RegistrationPatientsPolyclinic.Entities.Enums; using System; using System.Collections.Generic; @@ -10,28 +14,124 @@ namespace RegistrationPatientsPolyclinic.Repositories.Implementations; public class DrugRepository : IDrugRepository { - public void CreateDrug(Drug drag) + private readonly IConnectionString _connectionString; + + private readonly ILogger _logger; + + public DrugRepository(IConnectionString connectionString, ILogger logger) { - + _connectionString = connectionString; + _logger = logger; + } + public void CreateDrug(Drug drug) + { + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(drug)); + try + { + using var connection = new + NpgsqlConnection(_connectionString.ConnectionString); + var queryInsert = @" +INSERT INTO Drug (DrugName, Grams, Description) +VALUES (@DrugName, @Grams, @Description)"; + connection.Execute(queryInsert, drug); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавлении объекта"); + throw; + } + } + public void UpdateDrug(Drug drug) + { + _logger.LogInformation("Редактирование объекта"); + _logger.LogDebug("Объект: {json}", + JsonConvert.SerializeObject(drug)); + try + { + using var connection = new + NpgsqlConnection(_connectionString.ConnectionString); + var queryUpdate = @" +UPDATE Drug +SET +DrugName=@DrugName, +Grams=@Grams, +Description=@Description +WHERE Id=@Id"; + connection.Execute(queryUpdate, drug); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при редактировании объекта"); + throw; + } } public void DeleteDrug(int id) { - + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new + NpgsqlConnection(_connectionString.ConnectionString); + var queryDelete = @" +DELETE FROM Drug +WHERE Id=@id"; + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } } public IEnumerable ReadDrug() { - return []; + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new + NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM Drug"; + var drug = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", + JsonConvert.SerializeObject(drug)); + return drug; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } } public Drug ReadDrugById(int id) { - return Drug.CreateElement(0, DrugName.None, 0, string.Empty); + _logger.LogInformation("Получение объекта по идентификатору"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new + NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = @" +SELECT * FROM Drug +WHERE Id=@id"; + var patient = connection.QueryFirst(querySelect, new + { + id + }); + _logger.LogDebug("Найденный объект: {json}", + JsonConvert.SerializeObject(patient)); + return patient; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при поиске объекта"); + throw; + } } - public void UpdateDrug(Drug drag) - { - - } -} + +} \ No newline at end of file diff --git a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Repositories/Implementations/PatientRepository.cs b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Repositories/Implementations/PatientRepository.cs index 1dbcbda..c33d043 100644 --- a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Repositories/Implementations/PatientRepository.cs +++ b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/Repositories/Implementations/PatientRepository.cs @@ -1,6 +1,12 @@ -using RegistrationPatientsPolyclinic.Entities; +using Dapper; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; +using RegistrationPatientsPolyclinic.Entities; +using Serilog.Core; using System; using System.Collections.Generic; +using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -9,25 +15,129 @@ namespace RegistrationPatientsPolyclinic.Repositories.Implementations; public class PatientRepository : IPatientRepository { + private readonly IConnectionString _connectionString; + + private readonly ILogger _logger; + + public PatientRepository(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } public void CreatPatient(Patient patient) { - } + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(patient)); + try + { + using var connection = new + NpgsqlConnection(_connectionString.ConnectionString); + var queryInsert = @" +INSERT INTO patient (First_Name, Last_Name, ContactNumber) +VALUES (@First_Name, @Last_Name, @ContactNumber)"; + connection.Execute(queryInsert, patient); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавлении объекта"); + throw; + } + + } + public void UpdatePatient(Patient patient) + { + _logger.LogInformation("Редактирование объекта"); + _logger.LogDebug("Объект: {json}", + JsonConvert.SerializeObject(patient)); + try + { + using var connection = new + NpgsqlConnection(_connectionString.ConnectionString); + var queryUpdate = @" +UPDATE Patient +SET +First_Name=@First_Name, +Last_Name=@Last_Name, +ContactNumber=@ContactNumber +WHERE Id=@Id"; + connection.Execute(queryUpdate, patient); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при редактировании объекта"); + throw; + } + + } public void DeletePatient(int id) { + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new + NpgsqlConnection(_connectionString.ConnectionString); + var queryDelete = @" +DELETE FROM Patient +WHERE Id=@id"; + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } + } public IEnumerable ReadPatient() { - return []; + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new + NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM Patient"; + var patient = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", + JsonConvert.SerializeObject(patient)); + return patient; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } + } public Patient ReadPatientById(int id) { - return Patient.CreateEntity(0, string.Empty, string.Empty, string.Empty); + _logger.LogInformation("Получение объекта по идентификатору"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new + NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = @" +SELECT * FROM Patient +WHERE Id=@id"; + var patient = connection.QueryFirst(querySelect, new + { + id + }); + _logger.LogDebug("Найденный объект: {json}", + JsonConvert.SerializeObject(patient)); + return patient; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при поиске объекта"); + throw; + } + } - public void UpdatePatient(Patient patient) - { - } + } diff --git a/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/appsettings.json b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/appsettings.json new file mode 100644 index 0000000..aaf8a2b --- /dev/null +++ b/RegistrationPatientsPolyclinic/RegistrationPatientsPolyclinic/appsettings.json @@ -0,0 +1,15 @@ +{ + "Serilog": { + "Using": [ "Serilog.Sinks.File" ], + "MinimumLevel": "Debug", + "WriteTo": [ + { + "Name": "File", + "Args": { + "path": "Logs/polyclinic_log.txt", + "rollingInterval": "Day" + } + } + ] + } +} \ No newline at end of file