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