Лабораторная работа №2

This commit is contained in:
Мария Котова 2024-11-27 10:31:49 +04:00
parent 8bb29fc84b
commit 28469e3f85
20 changed files with 618 additions and 39 deletions

View File

@ -11,5 +11,5 @@ public enum ClassType
None = 0,
Lection = 1,
Computer =2,
Standart = 3
Standart = 4
}

View File

@ -10,12 +10,19 @@ public class GroupTimetable
public int GroupId { get; private set; }
public int TimeTableId { get; private set; }
public int DisciplineID { get; private set; }
public int ClassID { get; private set; }
public int GroupID { get; private set; }
public int TeacherID { get; private set; }
public static GroupTimetable CreateElement(int idGroup, int idTimeTable)
public static GroupTimetable CreateElement(int idTimeTable, int idDiscipline, int idClass, int idGroup, int idTeacher)
{
return new GroupTimetable()
{
DisciplineID = idDiscipline,
ClassID = idClass,
GroupId = idGroup,
TeacherID = idTeacher,
TimeTableId = idTimeTable
};
}

View File

@ -12,10 +12,6 @@ public class TimeTable
public int NumberLesson { get; private set; }
public int Day { get; private set; }
public int Week { get; private set; }
public int DisciplineID { get; private set; }
public int ClassID { get; private set; }
public int GroupID { get; private set; }
public int TeacherID { get; private set; }
public IEnumerable<GroupTimetable> GroupTimetable
{
get;
@ -24,7 +20,7 @@ public class TimeTable
public static TimeTable CreateOperation(int id, int numberLesson, int day, int week, int disciplineID, int classID, int groupID, int teacherID, IEnumerable<GroupTimetable> groupTimetable)
public static TimeTable CreateOperation(int id, int numberLesson, int day, int week, IEnumerable<GroupTimetable> groupTimetable)
{
return new TimeTable()
{
@ -32,10 +28,6 @@ public class TimeTable
NumberLesson = numberLesson,
Day = day,
Week = week,
DisciplineID = disciplineID,
ClassID = classID,
GroupID = groupID,
TeacherID = teacherID,
GroupTimetable = groupTimetable
};
}

View File

@ -73,7 +73,7 @@ namespace ProjectTimeTable.Forms
if (_auditoriumId.HasValue)
{
_auditoriumRepository.UpdateAuditorium(CreateAuditorium(_auditoriumId.Value));
_auditoriumRepository.UpdateAuditorium(CreateAuditorium((int)_auditoriumId));
}
else
{
@ -81,6 +81,7 @@ namespace ProjectTimeTable.Forms
}
Close();
}
catch (Exception ex)
{

View File

@ -30,10 +30,10 @@ namespace ProjectTimeTable.Forms
{
throw new InvalidDataException(nameof(group));
}
TextBoxName.Text = group.Name;
numericUpDownCourse.Value = group.Course;
numericUpDownCount.Value = group.CountPeople;
comboBoxPlan.SelectedValue = group.PlanID;
_groupId = value;
}
catch (Exception ex)
@ -67,7 +67,7 @@ namespace ProjectTimeTable.Forms
if (_groupId.HasValue)
{
_groupRepository.UpdateGroup(CreateGroup(_groupId.Value));
_groupRepository.UpdateGroup(CreateGroup((int)_groupId));
}
else
{
@ -83,7 +83,7 @@ namespace ProjectTimeTable.Forms
}
}
private Group CreateGroup(int id) => Group.CreateEntity(0, TextBoxName.Text,
private Group CreateGroup(int id) => Group.CreateEntity(id, TextBoxName.Text,
Convert.ToInt32(numericUpDownCourse.Value), Convert.ToInt32(numericUpDownCount.Value), (int)comboBoxPlan.SelectedValue!);

View File

@ -50,6 +50,5 @@ namespace ProjectTimeTable.Forms
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}

View File

@ -115,6 +115,7 @@
ButtonSave.TabIndex = 18;
ButtonSave.Text = "Сохранить";
ButtonSave.UseVisualStyleBackColor = true;
ButtonSave.Click += ButtonSave_Click;
//
// ButtonCancel
//
@ -125,6 +126,7 @@
ButtonCancel.TabIndex = 19;
ButtonCancel.Text = "Отмена";
ButtonCancel.UseVisualStyleBackColor = true;
ButtonCancel.Click += ButtonCancel_Click;
//
// groupBoxTimeTable
//

View File

@ -25,7 +25,7 @@ namespace ProjectTimeTable.Forms
ColumnDiscipline.DataSource =disciplineRepository.ReadDiscipline();
ColumnDiscipline.DisplayMember = "Name";
ColumnDiscipline.ValueMember = "Id";
ColumnDiscipline.ValueMember = "ID";
ColumnAuditorium.DataSource = auditoriumRepository.ReadAuditorium();
ColumnAuditorium.DisplayMember = "Name";
@ -50,10 +50,9 @@ namespace ProjectTimeTable.Forms
throw new Exception("Имеются незаполненные поля");
}
dataGridViewTimeTable.RowCount--;
_timeTableRepository.CreateTimeTable(TimeTable.CreateOperation(0, Convert.ToInt32(numericUpDownCountLesson.Value),
Convert.ToInt32(numericUpDownDay.Value), Convert.ToInt32(numericUpDownWeek.Value), (int)comboBoxDiscipline.SelectedValue!,
(int)comboBoxAuditorium.SelectedValue!, (int)comboBoxGroup.SelectedValue!, (int)comboBoxTeacher.SelectedValue!,
Convert.ToInt32(numericUpDownDay.Value), Convert.ToInt32(numericUpDownWeek.Value),
CreateListGroupTimeTableFromDataGrid()));
Close();
@ -80,7 +79,8 @@ namespace ProjectTimeTable.Forms
continue;
}
list.Add(GroupTimetable.CreateElement(Convert.ToInt32(comboBoxGroup.SelectedIndex), 0));
list.Add(GroupTimetable.CreateElement(Convert.ToInt32(comboBoxDiscipline.SelectedIndex), Convert.ToInt32(comboBoxAuditorium.SelectedIndex),
Convert.ToInt32(comboBoxGroup.SelectedIndex), Convert.ToInt32(comboBoxTeacher.SelectedIndex), 0));
}
return list;

View File

@ -1,6 +1,10 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using ProjectTimeTable.Repositories;
using ProjectTimeTable.Repositories.Implementation;
using Serilog;
using Unity;
using Unity.Microsoft.Logging;
namespace ProjectTimeTable
{
@ -21,14 +25,29 @@ namespace ProjectTimeTable
private static IUnityContainer CreateContainer()
{
var container = new UnityContainer();
container.AddExtension(new LoggingExtension(CreateLoggerFactory()));
container.RegisterType<IGroupRepositories, GroupRepositories>();
container.RegisterType<IAuditoriumRepositories, AuditoriumRepositories>();
container.RegisterType<IDisciplineRepositories, DisciplineRepositories>();
container.RegisterType<IPlanRepositories, PlanRepositories>();
container.RegisterType<ITeacherRepositories, TeacherRepositories>();
container.RegisterType<ITimeTableRepositories, TimeTableRepositories>();
container.RegisterType<IConnectionString, ConnectionString>();
return container;
}
private static LoggerFactory CreateLoggerFactory()
{
var loggerFactory = new LoggerFactory();
loggerFactory.AddSerilog(new LoggerConfiguration()
.ReadFrom.Configuration(new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build())
.CreateLogger());
return loggerFactory;
}
}
}

View File

@ -9,7 +9,20 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Dapper" Version="2.1.35" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.1" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Serilog" Version="4.1.0" />
<PackageReference Include="Serilog.Extensions.Logging" Version="8.0.0" />
<PackageReference Include="Serilog.Settings.Configuration" Version="8.0.4" />
<PackageReference Include="Serilog.Sinks.File" Version="6.0.0" />
<PackageReference Include="Sstv.Outbox.Npgsql" Version="2.0.0" />
<PackageReference Include="System.Data.SqlClient" Version="4.9.0" />
<PackageReference Include="Unity" Version="5.11.10" />
<PackageReference Include="Unity.Container" Version="5.11.11" />
<PackageReference Include="Unity.Microsoft.Logging" Version="5.11.1" />
</ItemGroup>
<ItemGroup>
@ -31,4 +44,10 @@
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

View File

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

View File

@ -9,6 +9,7 @@ namespace ProjectTimeTable.Repositories;
public interface ITeacherRepositories
{
IEnumerable<Teacher> ReadTeacher();
Teacher ReadTeacherById(int id);

View File

@ -1,5 +1,9 @@
using ProjectTimeTable.Entites;
using Newtonsoft.Json;
using Npgsql;
using ProjectTimeTable.Entites;
using ProjectTimeTable.Entites.Enums;
using Dapper;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
@ -9,23 +13,110 @@ using System.Threading.Tasks;
namespace ProjectTimeTable.Repositories.Implementation;
public class AuditoriumRepositories : IAuditoriumRepositories
{
private readonly IConnectionString _connectionString;
private readonly ILogger<AuditoriumRepositories> _logger;
public AuditoriumRepositories(IConnectionString connectionString, ILogger<AuditoriumRepositories> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateAuditorium(Auditorium classs)
{
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(classs));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryInsert = @"INSERT INTO auditorium (Name, ClassType, Size)
VALUES (@Name, @ClassType, @Size)";
connection.Execute(queryInsert, classs);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
}
public void DeleteAuditorium(int id)
{
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryDelete = @"DELETE FROM Auditorium WHERE Id=@Id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
}
public IEnumerable<Auditorium> ReadAuditorium()
{
return [];
_logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Auditorium";
var auditorium = connection.Query<Auditorium>(querySelect);
_logger.LogDebug("Полученные объекты: {json}",
JsonConvert.SerializeObject(auditorium));
return auditorium;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
}
public Auditorium ReadAuditoriumById(int id) { return Auditorium.CreateEntity(0, string.Empty, ClassType.None, 0); }
public Auditorium ReadAuditoriumById(int id)
{
_logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"SELECT * FROM Auditorium WHERE Id=@id";
var auditorium = connection.QueryFirst<Auditorium>(querySelect, new
{
id
});
_logger.LogDebug("Найденный объект: {json}",
JsonConvert.SerializeObject(auditorium));
return auditorium;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
}
public void UpdateAuditorium(Auditorium classs)
{
_logger.LogInformation("Редактирование объекта");
_logger.LogDebug("Объект: {json}",
JsonConvert.SerializeObject(classs));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"UPDATE Auditorium SET
Name=@Name,
ClassType=@ClassType,
Size=@Size
WHERE Id=@id";
connection.Execute(queryUpdate, classs);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
}
}

View File

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTimeTable.Repositories.Implementation;
public class ConnectionString : IConnectionString
{
string IConnectionString.ConnectionString => "Server=localhost, 5432;Database=timetable_otp;Uid=postgres;Pwd=postgres;";
}

View File

@ -1,4 +1,8 @@
using ProjectTimeTable.Entites;
using Dapper;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Npgsql;
using ProjectTimeTable.Entites;
using System;
using System.Collections.Generic;
using System.Linq;
@ -9,25 +13,107 @@ namespace ProjectTimeTable.Repositories.Implementation;
public class DisciplineRepositories : IDisciplineRepositories
{
private readonly IConnectionString _connectionString;
private readonly ILogger<DisciplineRepositories> _logger;
public DisciplineRepositories(IConnectionString connectionString, ILogger<DisciplineRepositories> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateDiscipline(Discipline discipline)
{
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(discipline));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryInsert = @"INSERT INTO Discipline (Name)
VALUES (@Name)";
connection.Execute(queryInsert, discipline);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
}
public void DeleteDiscipline(int id)
{
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryDelete = @"DELETE FROM Discipline WHERE Id=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
}
public IEnumerable<Discipline> ReadDiscipline()
{
return [];
_logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Discipline";
var discipline = connection.Query<Discipline>(querySelect);
_logger.LogDebug("Полученные объекты: {json}",
JsonConvert.SerializeObject(discipline));
return discipline;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
}
public Discipline ReadDisciplineById(int id)
{
return Discipline.CreateEntity(0, string.Empty);
_logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"SELECT * FROM Discipline WHERE ID=@id";
var auditorium = connection.QueryFirst<Discipline>(querySelect, new
{
id
});
_logger.LogDebug("Найденный объект: {json}",
JsonConvert.SerializeObject(auditorium));
return auditorium;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
}
public void UpdateDiscipline(Discipline discipline)
{
_logger.LogInformation("Редактирование объекта");
_logger.LogDebug("Объект: {json}",
JsonConvert.SerializeObject(discipline));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"UPDATE Discipline SET
Name=@Name
WHERE ID=@id";
connection.Execute(queryUpdate, discipline);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
}
}

View File

@ -1,4 +1,8 @@
using ProjectTimeTable.Entites;
using Dapper;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Npgsql;
using ProjectTimeTable.Entites;
using System;
using System.Collections.Generic;
using System.Linq;
@ -9,25 +13,112 @@ namespace ProjectTimeTable.Repositories.Implementation;
public class GroupRepositories : IGroupRepositories
{
private readonly IConnectionString _connectionString;
private readonly ILogger<GroupRepositories> _logger;
public GroupRepositories(IConnectionString connectionString, ILogger<GroupRepositories> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateGroup(Group group)
{
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(group));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryInsert = @"INSERT INTO Groupp (Name, Course, CountPeople, PlanID)
VALUES (@Name, @Course, @CountPeople, @PlanID)";
connection.Execute(queryInsert, group);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
}
public void DeleteGroup(int id)
{
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryDelete = @"DELETE FROM Groupp WHERE ID=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
}
public IEnumerable<Group> ReadGroup()
{
return [];
_logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Groupp";
var group = connection.Query<Group>(querySelect);
_logger.LogDebug("Полученные объекты: {json}",
JsonConvert.SerializeObject(group));
return group;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
}
public Group ReadGroupById(int id)
{
return Group.CreateEntity(0, string.Empty, 0, 0, 0);
_logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"SELECT * FROM Groupp WHERE ID=@id";
var group = connection.QueryFirst<Group>(querySelect, new
{
id
});
_logger.LogDebug("Найденный объект: {json}",
JsonConvert.SerializeObject(group));
return group;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
}
public void UpdateGroup(Group group)
{
_logger.LogInformation("Редактирование объекта");
_logger.LogDebug("Объект: {json}",
JsonConvert.SerializeObject(group));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"UPDATE Groupp SET
Name=@Name,
Course=@Course,
CountPeople=@CountPeople,
PlanID=@PlanID
WHERE ID=@id";
connection.Execute(queryUpdate, group);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
}
}

View File

@ -1,26 +1,100 @@
using ProjectTimeTable.Entites;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Npgsql;
using ProjectTimeTable.Entites;
using Dapper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Unity;
namespace ProjectTimeTable.Repositories.Implementation;
public class PlanRepositories : IPlanRepositories
{
private readonly IConnectionString _connectionString;
private readonly ILogger<PlanRepositories> _logger;
public PlanRepositories(IConnectionString connectionString, ILogger<PlanRepositories> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreatePlan(Plan plan)
{
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(plan));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
connection.Open();
using var transaction = connection.BeginTransaction();
var queryInsert = @"INSERT INTO Plan (Name)
VALUES (@Name);
SELECT MAX(Id) FROM Plan";
var PlanID = connection.QueryFirst<int>(queryInsert, plan, transaction);
var querySubInsert = @"INSERT INTO DisciplinePlan (PlanId, DisciplineId, CountLesson, Course)
VALUES (@PlanId, @DisciplineId, @CountLesson, @Course)";
foreach (var elem in plan.DisciplinePlan)
{
connection.Execute(querySubInsert, new
{
PlanID,
elem.DisciplineId,
elem.CountLesson,
elem.Course
}, transaction);
}
transaction.Commit();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
}
public IEnumerable<Plan> ReadPlan(int? groupId = null, int? disciplineId = null)
{
return [];
_logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"SELECT * FROM Plan";
var plan = connection.Query<Plan>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(plan));
return plan;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
}
public Plan ReadPlanById(int id)
{
return Plan.CreateOperation(0, string.Empty,[]);
_logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"SELECT * FROM teacher WHERE [Id]=@id";
var plan = connection.QueryFirst<Plan>(querySelect, new
{
id
});
_logger.LogDebug("Найденный объект: {json}",
JsonConvert.SerializeObject(plan));
return plan;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
}
}

View File

@ -1,4 +1,8 @@
using ProjectTimeTable.Entites;
using Dapper;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Npgsql;
using ProjectTimeTable.Entites;
using ProjectTimeTable.Entites.Enums;
using System;
using System.Collections.Generic;
@ -10,25 +14,110 @@ namespace ProjectTimeTable.Repositories.Implementation;
public class TeacherRepositories : ITeacherRepositories
{
private readonly IConnectionString _connectionString;
private readonly ILogger<TeacherRepositories> _logger;
public TeacherRepositories(IConnectionString connectionString, ILogger<TeacherRepositories> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateTeacher(Teacher teacher)
{
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(teacher));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryInsert = @"INSERT INTO teacher (FirstName, SecondName, LastName, TeacherPost)
VALUES (@FirstName, @SecondName, @LastName, @TeacherPost)";
connection.Execute(queryInsert, 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 IEnumerable<Teacher> ReadTeacher()
{
return [];
_logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM teacher";
var teacher = connection.Query<Teacher>(querySelect);
_logger.LogDebug("Полученные объекты: {json}",
JsonConvert.SerializeObject(teacher));
return teacher;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
}
public Teacher ReadTeacherById(int id)
{
return Teacher.CreateEntity(0, string.Empty, string.Empty, string.Empty, TeacherPost.None);
_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<Teacher>(querySelect, new
{
id
});
_logger.LogDebug("Найденный объект: {json}",
JsonConvert.SerializeObject(teacher));
return 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
FirstName=@FirstName,
SecondName=@SecondName,
LastName=@LastName,
TeacherPost=@TeacherPost
WHERE Id=@id";
connection.Execute(queryUpdate, teacher);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
}
}
}

View File

@ -1,7 +1,12 @@
using ProjectTimeTable.Entites;
using Dapper;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Npgsql;
using ProjectTimeTable.Entites;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using System.Text;
using System.Threading.Tasks;
@ -9,16 +14,80 @@ namespace ProjectTimeTable.Repositories.Implementation;
public class TimeTableRepositories : ITimeTableRepositories
{
private readonly IConnectionString _connectionString;
private readonly ILogger<TimeTableRepositories> _logger;
public TimeTableRepositories(IConnectionString connectionString, ILogger<TimeTableRepositories> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateTimeTable(TimeTable timeTable)
{
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(timeTable));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
connection.Open();
using var transaction = connection.BeginTransaction();
var queryInsert = @"INSERT INTO TimeTable (NumberLesson, Day, Week)
VALUES (@NumberLesson, @Day, @Week);
SELECT MAX(Id) FROM TimeTable";
var PlanID = connection.QueryFirst<int>(queryInsert, timeTable, transaction);
var querySubInsert = @"INSERT INTO GroupTimetable (GroupId, timeTableId, DisciplineID, ClassID, GroupID, TeacherID)
VALUES (@GroupId, @timeTableId, @DisciplineID, @ClassID, @GroupID, @TeacherID)";
foreach (var elem in timeTable.GroupTimetable)
{
connection.Execute(querySubInsert, new
{
elem.GroupId,
elem.TimeTableId,
}, transaction);
}
transaction.Commit();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
}
public void DeleteTimeTable(int id)
{
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryDelete = @"DELETE FROM TimeTable
WHERE ID=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
}
public IEnumerable<TimeTable> ReadTimeTable(int? week = null, int? day = null, int? groupId = null, int? classId = null, int? teacherId = null)
{
return [];
_logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM timetable";
var timetable = connection.Query<TimeTable>(querySelect);
_logger.LogDebug("Полученные объекты: {json}",
JsonConvert.SerializeObject(timetable));
return timetable;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
}
}

View File

@ -0,0 +1,15 @@
{
"Serilog": {
"Using": [ "Serilog.Sinks.File" ],
"MinimumLevel": "Debug",
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "Logs/timetable_log.txt",
"rollingInterval": "Day"
}
}
]
}
}