From ad006f8af096726e2c330ed73008d478eb3a1486 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=AC=20=D0=AA?= Date: Wed, 25 Dec 2024 12:25:54 +0400 Subject: [PATCH] =?UTF-8?q?=D0=93=D0=BE=D1=82=D0=BE=D0=B2=D0=B0=D1=8F=202?= =?UTF-8?q?=20=D0=BB=D0=B0=D0=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Academic_Performance.csproj | 17 +++ .../Entities/Enums/{Group.cs => Groupp.cs} | 2 +- .../Academic_Performance/Entities/Mark.cs | 4 +- .../Entities/Statement.cs | 10 +- .../Academic_Performance/Entities/Student.cs | 6 +- .../Forms/FormMark.Designer.cs | 37 +++--- .../Academic_Performance/Forms/FormMark.cs | 18 +-- .../Academic_Performance/Forms/FormMark.resx | 2 +- .../Academic_Performance/Forms/FormMarks.cs | 12 +- .../Forms/FormStudent.Designer.cs | 24 ++-- .../Academic_Performance/Forms/FormStudent.cs | 14 +-- .../Academic_Performance/Program.cs | 31 ++++- .../Repositories/IConnectionString.cs | 13 ++ .../Repositories/IMarkRepository.cs | 16 --- .../Repositories/IStatementRepository.cs | 1 - .../Implementations/ConnectionString.cs | 13 ++ .../Implementations/MarkRepository.cs | 27 ---- .../Implementations/OrderRepository.cs | 95 +++++++++++++- .../Implementations/StatementRepository.cs | 95 +++++++++++++- .../Implementations/StudentRepository.cs | 102 +++++++++++++-- .../Implementations/SubjectRepository.cs | 95 +++++++++++++- .../Implementations/TeacherRepository.cs | 116 +++++++++++++++--- .../Academic_Performance/appsettings.json | 15 +++ 23 files changed, 619 insertions(+), 146 deletions(-) rename Academic_Performance/Academic_Performance/Entities/Enums/{Group.cs => Groupp.cs} (92%) create mode 100644 Academic_Performance/Academic_Performance/Repositories/IConnectionString.cs delete mode 100644 Academic_Performance/Academic_Performance/Repositories/IMarkRepository.cs create mode 100644 Academic_Performance/Academic_Performance/Repositories/Implementations/ConnectionString.cs delete mode 100644 Academic_Performance/Academic_Performance/Repositories/Implementations/MarkRepository.cs create mode 100644 Academic_Performance/Academic_Performance/appsettings.json diff --git a/Academic_Performance/Academic_Performance/Academic_Performance.csproj b/Academic_Performance/Academic_Performance/Academic_Performance.csproj index accbdf0..cd889fa 100644 --- a/Academic_Performance/Academic_Performance/Academic_Performance.csproj +++ b/Academic_Performance/Academic_Performance/Academic_Performance.csproj @@ -9,7 +9,18 @@ + + + + + + + + + + + @@ -27,4 +38,10 @@ + + + PreserveNewest + + + \ No newline at end of file diff --git a/Academic_Performance/Academic_Performance/Entities/Enums/Group.cs b/Academic_Performance/Academic_Performance/Entities/Enums/Groupp.cs similarity index 92% rename from Academic_Performance/Academic_Performance/Entities/Enums/Group.cs rename to Academic_Performance/Academic_Performance/Entities/Enums/Groupp.cs index 9319645..a5bceb1 100644 --- a/Academic_Performance/Academic_Performance/Entities/Enums/Group.cs +++ b/Academic_Performance/Academic_Performance/Entities/Enums/Groupp.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace Academic_Performance.Entities.Enums { [Flags] - public enum Group + public enum Groupp { None = 0, First = 1, diff --git a/Academic_Performance/Academic_Performance/Entities/Mark.cs b/Academic_Performance/Academic_Performance/Entities/Mark.cs index 1dd19e7..ee78460 100644 --- a/Academic_Performance/Academic_Performance/Entities/Mark.cs +++ b/Academic_Performance/Academic_Performance/Entities/Mark.cs @@ -13,8 +13,8 @@ namespace Academic_Performance.Entities public int StudentId { get; private set; } public int StatmentTeacherId { get; private set; } public int StatmentSubjectId { get; private set; } - public int Value { get; private set; } - public static Mark CreateElement(int id, int studentId, int statmentSubjectId, int statmentTeacherId, int value) + public string Value { get; private set; } = string.Empty; + public static Mark CreateElement(int id, int studentId, int statmentSubjectId, int statmentTeacherId,string value) { return new Mark { diff --git a/Academic_Performance/Academic_Performance/Entities/Statement.cs b/Academic_Performance/Academic_Performance/Entities/Statement.cs index 05572d0..087d328 100644 --- a/Academic_Performance/Academic_Performance/Entities/Statement.cs +++ b/Academic_Performance/Academic_Performance/Entities/Statement.cs @@ -10,17 +10,17 @@ namespace Academic_Performance.Entities { public class Statement { public int Id { get; private set; } - public int SubjecttId { get; private set; } + public int SubjectId { get; private set; } public int TeacherId{ get; private set; } - public DateTime Date { get; private set; } + public IEnumerable Mark{ get; private set; } = []; - public static Statement CreateOperation(int id, int subjecttId, int teacherId, IEnumerable mark) + public static Statement CreateOperation(int id, int subjectId, int teacherId, IEnumerable mark) {return new Statement { Id = id, - SubjecttId = subjecttId, + SubjectId = subjectId, TeacherId = teacherId, - Date = DateTime.Now, + Mark = mark }; } diff --git a/Academic_Performance/Academic_Performance/Entities/Student.cs b/Academic_Performance/Academic_Performance/Entities/Student.cs index ed7dadd..3723a62 100644 --- a/Academic_Performance/Academic_Performance/Entities/Student.cs +++ b/Academic_Performance/Academic_Performance/Entities/Student.cs @@ -10,17 +10,17 @@ namespace Academic_Performance.Entities public class Student { public int Id{ get; private set; } - public Group? Group { get; private set; } + public Groupp? Groupp { get; private set; } public string Name { get; private set; } = string.Empty; public string Flow { get; private set; } = string.Empty; - public static Student CreateEntity(int id, string name,string flow, Group group) + public static Student CreateEntity(int id, string name,string flow, Groupp groupp) { return new Student { Id = id, Name = name, Flow=flow, - Group = group, + Groupp =groupp, }; } } diff --git a/Academic_Performance/Academic_Performance/Forms/FormMark.Designer.cs b/Academic_Performance/Academic_Performance/Forms/FormMark.Designer.cs index 9739729..2775920 100644 --- a/Academic_Performance/Academic_Performance/Forms/FormMark.Designer.cs +++ b/Academic_Performance/Academic_Performance/Forms/FormMark.Designer.cs @@ -38,10 +38,10 @@ button1 = new Button(); button2 = new Button(); dataGridView1 = new DataGridView(); + ColStudent = new DataGridViewComboBoxColumn(); + ColValue = new DataGridViewTextBoxColumn(); label1 = new Label(); comboBoxSubject = new ComboBox(); - ColStudent = new DataGridViewComboBoxColumn(); - ColSubject = new DataGridViewTextBoxColumn(); groupBox.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); SuspendLayout(); @@ -151,7 +151,7 @@ dataGridView1.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; - dataGridView1.Columns.AddRange(new DataGridViewColumn[] { ColStudent, ColSubject }); + dataGridView1.Columns.AddRange(new DataGridViewColumn[] { ColStudent, ColValue }); dataGridView1.Location = new Point(26, 41); dataGridView1.Margin = new Padding(3, 4, 3, 4); dataGridView1.MultiSelect = false; @@ -161,6 +161,21 @@ dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dataGridView1.Size = new Size(600, 207); dataGridView1.TabIndex = 0; + dataGridView1.CellContentClick += dataGridView1_CellContentClick; + // + // ColStudent + // + ColStudent.HeaderText = "Студент"; + ColStudent.MinimumWidth = 8; + ColStudent.Name = "ColStudent"; + // + // ColValue + // + ColValue.HeaderText = "Оценка"; + ColValue.MinimumWidth = 8; + ColValue.Name = "ColValue"; + ColValue.Resizable = DataGridViewTriState.True; + ColValue.SortMode = DataGridViewColumnSortMode.NotSortable; // // label1 // @@ -181,20 +196,6 @@ comboBoxSubject.Size = new Size(286, 28); comboBoxSubject.TabIndex = 36; // - // ColStudent - // - ColStudent.HeaderText = "Студент"; - ColStudent.MinimumWidth = 8; - ColStudent.Name = "ColStudent"; - // - // ColSubject - // - ColSubject.HeaderText = "Оценка"; - ColSubject.MinimumWidth = 8; - ColSubject.Name = "ColSubject"; - ColSubject.Resizable = DataGridViewTriState.True; - ColSubject.SortMode = DataGridViewColumnSortMode.NotSortable; - // // FormMark // AutoScaleDimensions = new SizeF(8F, 20F); @@ -233,6 +234,6 @@ private Label label1; private ComboBox comboBoxSubject; private DataGridViewComboBoxColumn ColStudent; - private DataGridViewTextBoxColumn ColSubject; + private DataGridViewTextBoxColumn ColValue; } } \ No newline at end of file diff --git a/Academic_Performance/Academic_Performance/Forms/FormMark.cs b/Academic_Performance/Academic_Performance/Forms/FormMark.cs index 9c46141..2073370 100644 --- a/Academic_Performance/Academic_Performance/Forms/FormMark.cs +++ b/Academic_Performance/Academic_Performance/Forms/FormMark.cs @@ -44,7 +44,7 @@ namespace Academic_Performance.Forms { throw new Exception("Имеются незаполненные поля"); } - _statementRepository.CreateStatement(Statement.CreateOperation(0, 0, 0, CreateListMark())); + _statementRepository.CreateStatement(Statement.CreateOperation(0, (int)comboBoxSubject.SelectedValue!, (int)comboBoxTeacher.SelectedValue!, CreateListMark())); Close(); } catch (Exception ex) @@ -60,14 +60,14 @@ namespace Academic_Performance.Forms var list = new List(); foreach (DataGridViewRow row in dataGridView1.Rows) { - if (row.Cells["ColValue"].Value == null || + if ( row.Cells["ColStudent"].Value == null) { continue; } - list.Add(Mark.CreateElement(0,0,0, Convert.ToInt32(row.Cells["ColStudent"].Value), - Convert.ToInt32(row.Cells["ColSubject"].Value) + list.Add(Mark.CreateElement(0, Convert.ToInt32(row.Cells["ColStudent"].Value), (int)comboBoxSubject.SelectedValue!,(int)comboBoxTeacher.SelectedValue!, + row.Cells["ColValue"].Value.ToString() )); } @@ -79,11 +79,11 @@ namespace Academic_Performance.Forms try { if (dataGridView1.RowCount < 1 || - comboBoxTeacher.SelectedIndex < 0 || comboBoxSubject.SelectedIndex < 0 ) + comboBoxTeacher.SelectedIndex < 0 || comboBoxSubject.SelectedIndex < 0) { throw new Exception("Имеются незаполненные поля"); } - _statementRepository.CreateStatement(Statement.CreateOperation(0,0, + _statementRepository.CreateStatement(Statement.CreateOperation(0, (int)comboBoxSubject.SelectedValue!, (int)comboBoxTeacher.SelectedValue!, CreateListMark())); Close(); @@ -94,7 +94,11 @@ namespace Academic_Performance.Forms MessageBoxButtons.OK, MessageBoxIcon.Error); } } - private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + + } } } diff --git a/Academic_Performance/Academic_Performance/Forms/FormMark.resx b/Academic_Performance/Academic_Performance/Forms/FormMark.resx index 6518eaf..044035f 100644 --- a/Academic_Performance/Academic_Performance/Forms/FormMark.resx +++ b/Academic_Performance/Academic_Performance/Forms/FormMark.resx @@ -120,7 +120,7 @@ True - + True \ No newline at end of file diff --git a/Academic_Performance/Academic_Performance/Forms/FormMarks.cs b/Academic_Performance/Academic_Performance/Forms/FormMarks.cs index a25efb5..c7a4ecd 100644 --- a/Academic_Performance/Academic_Performance/Forms/FormMarks.cs +++ b/Academic_Performance/Academic_Performance/Forms/FormMarks.cs @@ -18,14 +18,14 @@ namespace Academic_Performance.Forms { private readonly IUnityContainer _container; - private readonly IMarkRepository _markRepository; - public FormMarks(IUnityContainer container, IMarkRepository markRepository) + private readonly IStatementRepository _statementRepository; + public FormMarks(IUnityContainer container, IStatementRepository statementRepository) { InitializeComponent(); _container = container ?? throw new ArgumentNullException(nameof(container)); - _markRepository = markRepository ?? - throw new ArgumentNullException(nameof(markRepository)); + _statementRepository = statementRepository ?? + throw new ArgumentNullException(nameof(statementRepository)); } private void buttonSave_Click(object sender, EventArgs e) { @@ -51,7 +51,7 @@ namespace Academic_Performance.Forms } try { - _markRepository.DeleteMark(findId); + _statementRepository.DeleteStatement(findId); LoadList(); } catch (Exception ex) @@ -73,7 +73,7 @@ namespace Academic_Performance.Forms } } private void LoadList() => - dataGridView.DataSource = _markRepository.ReadMark(); + dataGridView.DataSource = _statementRepository.ReadStatement(); private bool TryGetIdentifierFromSelectedRow(out int id) { id = 0; diff --git a/Academic_Performance/Academic_Performance/Forms/FormStudent.Designer.cs b/Academic_Performance/Academic_Performance/Forms/FormStudent.Designer.cs index de3d802..2b6488b 100644 --- a/Academic_Performance/Academic_Performance/Forms/FormStudent.Designer.cs +++ b/Academic_Performance/Academic_Performance/Forms/FormStudent.Designer.cs @@ -34,8 +34,8 @@ textBoxName = new TextBox(); button1 = new Button(); button2 = new Button(); - comboBoxFlow = new ComboBox(); checkedListBoxGroup = new CheckedListBox(); + textBoxFlow = new TextBox(); SuspendLayout(); // // label @@ -97,16 +97,6 @@ button2.Text = "Отмена"; button2.UseVisualStyleBackColor = true; // - // comboBoxFlow - // - comboBoxFlow.DropDownStyle = ComboBoxStyle.DropDownList; - comboBoxFlow.FormattingEnabled = true; - comboBoxFlow.Location = new Point(137, 183); - comboBoxFlow.Margin = new Padding(2, 3, 2, 3); - comboBoxFlow.Name = "comboBoxFlow"; - comboBoxFlow.Size = new Size(309, 28); - comboBoxFlow.TabIndex = 9; - // // checkedListBoxGroup // checkedListBoxGroup.FormattingEnabled = true; @@ -115,13 +105,21 @@ checkedListBoxGroup.Size = new Size(309, 92); checkedListBoxGroup.TabIndex = 10; // + // textBoxFlow + // + textBoxFlow.Location = new Point(137, 180); + textBoxFlow.Margin = new Padding(2, 3, 2, 3); + textBoxFlow.Name = "textBoxFlow"; + textBoxFlow.Size = new Size(309, 27); + textBoxFlow.TabIndex = 11; + // // FormStudent // AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(481, 311); + Controls.Add(textBoxFlow); Controls.Add(checkedListBoxGroup); - Controls.Add(comboBoxFlow); Controls.Add(button2); Controls.Add(button1); Controls.Add(textBoxName); @@ -144,7 +142,7 @@ private TextBox textBoxName; private Button button1; private Button button2; - private ComboBox comboBoxFlow; private CheckedListBox checkedListBoxGroup; + private TextBox textBoxFlow; } } \ No newline at end of file diff --git a/Academic_Performance/Academic_Performance/Forms/FormStudent.cs b/Academic_Performance/Academic_Performance/Forms/FormStudent.cs index 5adb1f1..285f6f5 100644 --- a/Academic_Performance/Academic_Performance/Forms/FormStudent.cs +++ b/Academic_Performance/Academic_Performance/Forms/FormStudent.cs @@ -30,16 +30,16 @@ namespace Academic_Performance.Forms throw new InvalidDataException(nameof(student)); } - foreach (Group elem in Enum.GetValues(typeof(Group))) + foreach (Groupp elem in Enum.GetValues(typeof(Groupp))) { - if ((elem & student.Group) != 0) + if ((elem & student.Groupp) != 0) { checkedListBoxGroup.SetItemChecked(checkedListBoxGroup.Items.IndexOf(elem), true); } } textBoxName.Text = student.Name; - comboBoxFlow.Text = student.Flow; - checkedListBoxGroup.SelectedItem =student.Group; + textBoxFlow.Text = student.Flow; + checkedListBoxGroup.SelectedItem =student.Groupp; _studentId = value; } catch (Exception ex) @@ -56,7 +56,7 @@ namespace Academic_Performance.Forms _studentRepository = studentRepository ?? throw new ArgumentNullException(nameof(studentRepository)); - foreach (var elem in Enum.GetValues(typeof(Group))) + foreach (var elem in Enum.GetValues(typeof(Groupp))) { checkedListBoxGroup.Items.Add(elem); } @@ -66,7 +66,7 @@ namespace Academic_Performance.Forms { try { - if (string.IsNullOrWhiteSpace(textBoxName.Text)|| string.IsNullOrWhiteSpace(comboBoxFlow.Text)) + if (string.IsNullOrWhiteSpace(textBoxName.Text)|| string.IsNullOrWhiteSpace(textBoxFlow.Text)) { throw new Exception("Имеются незаполненные поля"); } @@ -90,7 +90,7 @@ namespace Academic_Performance.Forms } private Student CreateStudent(int id) => Student.CreateEntity( id, - textBoxName.Text, comboBoxFlow.Text, (Group)checkedListBoxGroup.SelectedItem! + textBoxName.Text, textBoxFlow.Text, (Groupp)checkedListBoxGroup.SelectedItem! ); } diff --git a/Academic_Performance/Academic_Performance/Program.cs b/Academic_Performance/Academic_Performance/Program.cs index 0745e53..a6c49b0 100644 --- a/Academic_Performance/Academic_Performance/Program.cs +++ b/Academic_Performance/Academic_Performance/Program.cs @@ -2,6 +2,10 @@ using Unity.Lifetime; using Unity; using Academic_Performance.Repositories; using Academic_Performance.Repositories.Implementations; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Serilog; +using Unity.Microsoft.Logging; namespace Academic_Performance { @@ -21,7 +25,10 @@ namespace Academic_Performance private static IUnityContainer CreateContainer() { var container = new UnityContainer(); - container.RegisterType(new TransientLifetimeManager()); + container.AddExtension(new LoggingExtension(CreateLoggerFactory())); + + + container.RegisterType(new TransientLifetimeManager()); container.RegisterType(new TransientLifetimeManager()); @@ -29,13 +36,25 @@ namespace Academic_Performance StudentRepository>(new TransientLifetimeManager()); container.RegisterType(new TransientLifetimeManager()); - container.RegisterType(new TransientLifetimeManager()); - return container; + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + 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; } - - diff --git a/Academic_Performance/Academic_Performance/Repositories/IConnectionString.cs b/Academic_Performance/Academic_Performance/Repositories/IConnectionString.cs new file mode 100644 index 0000000..340a084 --- /dev/null +++ b/Academic_Performance/Academic_Performance/Repositories/IConnectionString.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Npgsql; + +namespace Academic_Performance.Repositories; + +public interface IConnectionString +{ + public string ConnectionString { get; } +} diff --git a/Academic_Performance/Academic_Performance/Repositories/IMarkRepository.cs b/Academic_Performance/Academic_Performance/Repositories/IMarkRepository.cs deleted file mode 100644 index e84b5c4..0000000 --- a/Academic_Performance/Academic_Performance/Repositories/IMarkRepository.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Academic_Performance.Entities; -using Academic_Performance.Entities.Enums; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Academic_Performance.Repositories -{ - public interface IMarkRepository - { IEnumerable ReadMark(); - void CreateMark(Mark mark); - void DeleteMark(int id); - } -} diff --git a/Academic_Performance/Academic_Performance/Repositories/IStatementRepository.cs b/Academic_Performance/Academic_Performance/Repositories/IStatementRepository.cs index 2803102..68d76a6 100644 --- a/Academic_Performance/Academic_Performance/Repositories/IStatementRepository.cs +++ b/Academic_Performance/Academic_Performance/Repositories/IStatementRepository.cs @@ -11,7 +11,6 @@ namespace Academic_Performance.Repositories { IEnumerable ReadStatement(); void CreateStatement(Statement statement); - void UpdateStatement(Statement statement); void DeleteStatement(int id); } } diff --git a/Academic_Performance/Academic_Performance/Repositories/Implementations/ConnectionString.cs b/Academic_Performance/Academic_Performance/Repositories/Implementations/ConnectionString.cs new file mode 100644 index 0000000..02e298d --- /dev/null +++ b/Academic_Performance/Academic_Performance/Repositories/Implementations/ConnectionString.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.VisualBasic.ApplicationServices; + +namespace Academic_Performance.Repositories.Implementations; + +public class ConnectionString : IConnectionString +{ + string IConnectionString.ConnectionString => "Server=127.0.0.1,5432;Database=postgres;Uid=A;Pwd=A;"; +} diff --git a/Academic_Performance/Academic_Performance/Repositories/Implementations/MarkRepository.cs b/Academic_Performance/Academic_Performance/Repositories/Implementations/MarkRepository.cs deleted file mode 100644 index 46b6035..0000000 --- a/Academic_Performance/Academic_Performance/Repositories/Implementations/MarkRepository.cs +++ /dev/null @@ -1,27 +0,0 @@ -using Academic_Performance.Entities; -using Academic_Performance.Entities.Enums; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Academic_Performance.Repositories.Implementations -{ - public class MarkRepository : IMarkRepository - { - public void CreateMark(Mark Mark) - { - } - - void IMarkRepository.DeleteMark(int id) - { - - } - - IEnumerable IMarkRepository.ReadMark() - { - return []; - } - } -} diff --git a/Academic_Performance/Academic_Performance/Repositories/Implementations/OrderRepository.cs b/Academic_Performance/Academic_Performance/Repositories/Implementations/OrderRepository.cs index 3c72810..230ebea 100644 --- a/Academic_Performance/Academic_Performance/Repositories/Implementations/OrderRepository.cs +++ b/Academic_Performance/Academic_Performance/Repositories/Implementations/OrderRepository.cs @@ -1,5 +1,9 @@ using Academic_Performance.Entities; using Academic_Performance.Entities.Enums; +using Dapper; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; using System; using System.Collections.Generic; using System.Linq; @@ -10,11 +14,46 @@ namespace Academic_Performance.Repositories.Implementations { public class OrderRepository : IOrderRepository { + private readonly IConnectionString _connectionString; + private readonly ILogger _logger; + public OrderRepository(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } public void AddOrder(Order order) { + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(order)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryInsert = @"INSERT INTO Orderr(TypeS,Date,StudentId,Information) + VALUES (@TypeS,@Date,@StudentId,@Information)"; + connection.Execute(queryInsert, order); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавлении объекта"); + throw; + } } public void DeleteOrder(int id) { + + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryDelete = @"DELETE FROM Orderr WHERE Id=@id"; + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } } public IEnumerable GetAllOrders() { @@ -22,14 +61,66 @@ namespace Academic_Performance.Repositories.Implementations } public Order GetOrderById(int id) { - return Order.CreateEntity(0,0, string.Empty,TypeS.None); + _logger.LogInformation("Получение объекта по идентификатору"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = @"SELECT * FROM Orderr WHERE Id=@id"; + var order = connection.QueryFirst(querySelect, new + { + id + }); + _logger.LogDebug("Найденный объект: {json}", + JsonConvert.SerializeObject(order)); + return order; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при поиске объекта"); + throw; + } } public void UpdateOrder(Order order) { + + _logger.LogInformation("Редактирование объекта"); + _logger.LogDebug("Объект: {json}", + JsonConvert.SerializeObject(order)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryUpdate = @"UPDATE Orderr SET + Information=@Information, + TypeS=@TypeS, + Date=@Date, + StudentId=@StudentId + WHERE Id=@id"; + connection.Execute(queryUpdate, order); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при редактировании объекта"); + throw; + } } IEnumerable IOrderRepository.ReadOrder() { - return []; + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM Orderr"; + var order = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", + JsonConvert.SerializeObject(order)); + return order; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } } } } diff --git a/Academic_Performance/Academic_Performance/Repositories/Implementations/StatementRepository.cs b/Academic_Performance/Academic_Performance/Repositories/Implementations/StatementRepository.cs index 05d4909..eb7b25e 100644 --- a/Academic_Performance/Academic_Performance/Repositories/Implementations/StatementRepository.cs +++ b/Academic_Performance/Academic_Performance/Repositories/Implementations/StatementRepository.cs @@ -1,6 +1,11 @@ using Academic_Performance.Entities; +using Dapper; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; using System; using System.Collections.Generic; +using System.Diagnostics.Contracts; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -9,23 +14,101 @@ namespace Academic_Performance.Repositories.Implementations { public class StatementRepository : IStatementRepository { + private readonly IConnectionString _connectionString; + private readonly ILogger _logger; + public StatementRepository(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } public void CreateStatement(Statement statement) { + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(statement)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); + using var transaction = connection.BeginTransaction(); + var queryInsert = @"INSERT INTO Statemant (TeacherId,SubjectId) + VALUES (@TeacherId, @SubjectId); + SELECT MAX(Id) FROM Statemant"; + var statementId = connection.QueryFirst(queryInsert, statement, transaction); + var querySubInsert = @"INSERT INTO Markkk(Value,StudentId) + VALUES (@Value,@StudentId)"; + foreach (var elem in statement.Mark) + { + connection.Execute(querySubInsert, new + { + + elem.Value, + elem.StudentId + }, transaction); + } + transaction.Commit(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавлении объекта"); + throw; + } } public void DeleteStatement(int id) { + + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new + NpgsqlConnection(_connectionString.ConnectionString); + var queryDelete = @"DELETE FROM Statemant + WHERE Id=@id"; + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } + } public IEnumerable ReadStatements() { - return []; - } - - public void UpdateStatement(Statement statment) - { + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = @"SELECT * FROM Statemant"; + var statements = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", + JsonConvert.SerializeObject(statements)); + return statements; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } } + public IEnumerable ReadStatement() { - return []; + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM Statemant"; + var statements = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", + JsonConvert.SerializeObject(statements)); + return statements; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } } } } \ No newline at end of file diff --git a/Academic_Performance/Academic_Performance/Repositories/Implementations/StudentRepository.cs b/Academic_Performance/Academic_Performance/Repositories/Implementations/StudentRepository.cs index a845006..4cc357c 100644 --- a/Academic_Performance/Academic_Performance/Repositories/Implementations/StudentRepository.cs +++ b/Academic_Performance/Academic_Performance/Repositories/Implementations/StudentRepository.cs @@ -1,35 +1,123 @@ using Academic_Performance.Entities; using Academic_Performance.Entities.Enums; +using Dapper; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Xml.Linq; namespace Academic_Performance.Repositories.Implementations { public class StudentRepository : IStudentRepository { - public void AddStudent(Student subject) + private readonly IConnectionString _connectionString; + private readonly ILogger _logger; + public StudentRepository(IConnectionString connectionString, ILogger logger) { + _connectionString = connectionString; + _logger = logger; + } + public void AddStudent(Student student) + { + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(student)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryInsert = @"INSERT INTO Studentt (Name, Groupp, Flow) + VALUES (@Name, @Groupp, @Flow)"; + connection.Execute(queryInsert, student); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавлении объекта"); + throw; + } } public void DeleteStudent(int id) { + + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryDelete = @"DELETE FROM Studentt WHERE Id=@id"; + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } } - public IEnumerable GetAllStudents() - { - return new List(); - } + public Student GetStudentById(int id) { - return Student.CreateEntity(0, string.Empty,string.Empty ,Group.None); + _logger.LogInformation("Получение объекта по идентификатору"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = @"SELECT * FROM Studentt WHERE Id=@id"; + var student = connection.QueryFirst(querySelect, new + { + id + }); + _logger.LogDebug("Найденный объект: {json}", + JsonConvert.SerializeObject(student)); + return student; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при поиске объекта"); + throw; + } } public void UpdateStudent(Student student) { + + _logger.LogInformation("Редактирование объекта"); + _logger.LogDebug("Объект: {json}", + JsonConvert.SerializeObject(student)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryUpdate = @"UPDATE Studentt SET + Name=@Name, + Groupp=@Groupp, + Flow=@Flow + WHERE Id=@id"; + connection.Execute(queryUpdate, student); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при редактировании объекта"); + throw; + } } IEnumerable IStudentRepository.ReadStudent() { - return []; + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM Studentt"; + var students = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", + JsonConvert.SerializeObject(students)); + return students; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } } } } diff --git a/Academic_Performance/Academic_Performance/Repositories/Implementations/SubjectRepository.cs b/Academic_Performance/Academic_Performance/Repositories/Implementations/SubjectRepository.cs index 650a9ed..9d62901 100644 --- a/Academic_Performance/Academic_Performance/Repositories/Implementations/SubjectRepository.cs +++ b/Academic_Performance/Academic_Performance/Repositories/Implementations/SubjectRepository.cs @@ -1,5 +1,9 @@ using Academic_Performance.Entities; +using Dapper; +using Microsoft.Extensions.Logging; using Microsoft.VisualBasic.Devices; +using Newtonsoft.Json; +using Npgsql; using System; using System.Collections.Generic; using System.Linq; @@ -10,22 +14,107 @@ namespace Academic_Performance.Repositories.Implementations { public class SubjectRepository : ISubjectRepository { + private readonly IConnectionString _connectionString; + private readonly ILogger _logger; + public SubjectRepository(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } public void AddSubject(Subject subject) { + + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(subject)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryInsert = @"INSERT INTO Subject(Name) + VALUES (@Name)"; + connection.Execute(queryInsert, subject); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавлении объекта"); + throw; + } } public void DeleteSubject(int id) { + + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryDelete = @"DELETE FROM Subject WHERE Id=@id"; + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } } public Subject GetSubjectById(int id) { - return Subject.CreateEntity(0, string.Empty); + _logger.LogInformation("Получение объекта по идентификатору"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = @"SELECT * FROM Subject WHERE Id=@id"; + var subject = connection.QueryFirst(querySelect, new + { + id + }); + _logger.LogDebug("Найденный объект: {json}", + JsonConvert.SerializeObject(subject)); + return subject; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при поиске объекта"); + throw; + } } public void UpdateSubject(Subject subject) { + + _logger.LogInformation("Редактирование объекта"); + _logger.LogDebug("Объект: {json}", + JsonConvert.SerializeObject(subject)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryUpdate = @"UPDATE Subject SET + Name=@Name + WHERE Id=@id"; + connection.Execute(queryUpdate, subject); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при редактировании объекта"); + throw; + } } - IEnumerable ISubjectRepository.ReadSubject() + public IEnumerable ReadSubject() { - return []; + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM Subject"; + var subjects = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", + JsonConvert.SerializeObject(subjects)); + return subjects; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } } } } diff --git a/Academic_Performance/Academic_Performance/Repositories/Implementations/TeacherRepository.cs b/Academic_Performance/Academic_Performance/Repositories/Implementations/TeacherRepository.cs index c59a32d..d5bb7b1 100644 --- a/Academic_Performance/Academic_Performance/Repositories/Implementations/TeacherRepository.cs +++ b/Academic_Performance/Academic_Performance/Repositories/Implementations/TeacherRepository.cs @@ -1,4 +1,8 @@ using Academic_Performance.Entities; +using Dapper; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; using System; using System.Collections.Generic; using System.Linq; @@ -9,26 +13,108 @@ namespace Academic_Performance.Repositories.Implementations { public class TeacherRepository : ITeacherRepository { + private readonly IConnectionString _connectionString; + private readonly ILogger _logger; + public TeacherRepository(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } public void CreateTeacher(Teacher teacher) { - } - public void DeleteTeacher(int id) - { - } - public IEnumerable GetAllTeachers() - { - return new List(); - } - public Teacher GetTeacherById(int id) - { - return Teacher.CreateEntity(0, string.Empty); - } - public IEnumerable ReadTeachers() - { - return []; + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(teacher)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryInsert = @"INSERT INTO Teacher(Name) + VALUES (@Name)"; + connection.Execute(queryInsert, teacher); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при добавлении объекта"); + throw; + } } public void UpdateTeacher(Teacher teacher) { + _logger.LogInformation("Редактирование объекта"); + _logger.LogDebug("Объект: {json}", + JsonConvert.SerializeObject(teacher)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryUpdate = @"UPDATE Teacher SET + Name=@Name + WHERE Id=@id"; + connection.Execute(queryUpdate, teacher); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при редактировании объекта"); + throw; + } } + public void DeleteTeacher(int id) + { + + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryDelete = @"DELETE FROM Teacher WHERE Id=@id"; + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении объекта"); + throw; + } + + } + + public Teacher GetTeacherById(int id) + { + _logger.LogInformation("Получение объекта по идентификатору"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = @"SELECT * FROM Teacher WHERE Id=@id"; + var teacher = connection.QueryFirst(querySelect, new + { + id + }); + _logger.LogDebug("Найденный объект: {json}", + JsonConvert.SerializeObject(teacher)); + return teacher; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при поиске объекта"); + throw; + } + } + public IEnumerable ReadTeachers() + { + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM Teacher"; + var teachers = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", + JsonConvert.SerializeObject(teachers)); + return teachers; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + } + } + } } diff --git a/Academic_Performance/Academic_Performance/appsettings.json b/Academic_Performance/Academic_Performance/appsettings.json new file mode 100644 index 0000000..51a77e4 --- /dev/null +++ b/Academic_Performance/Academic_Performance/appsettings.json @@ -0,0 +1,15 @@ +{ + "Serilog": { + "Using": [ "Serilog.Sinks.File" ], + "MinimumLevel": "Debug", + "WriteTo": [ + { + "Name": "File", + "Args": { + "path": "Logs/Academic_log.txt", + "rollingInterval": "Day" + } + } + ] + } +} \ No newline at end of file