139 lines
5.4 KiB
C#
139 lines
5.4 KiB
C#
using ElectronicDiaryAbstractions.Models;
|
|
using ElectronicDiaryAbstractions.WorkAbstractions;
|
|
using Npgsql;
|
|
|
|
namespace ElectronicDiaryPostgresImplementation.WorkImplementation
|
|
{
|
|
public class TeacherWork : ITeacherWork
|
|
{
|
|
private readonly SubjectWork _subjectWork;
|
|
|
|
public TeacherWork(SubjectWork subjectWork)
|
|
{
|
|
_subjectWork = subjectWork;
|
|
}
|
|
|
|
public List<Teacher> GetAll()
|
|
{
|
|
var teachers = new List<Teacher>();
|
|
using var con = SqlConnection.GetConnection();
|
|
con.Open();
|
|
using var cmd = new NpgsqlCommand("SELECT * FROM teacher order by teacher_id", con);
|
|
using var reader = cmd.ExecuteReader();
|
|
while (reader.Read())
|
|
{
|
|
teachers.Add(new Teacher
|
|
{
|
|
Id = reader.GetInt32(0),
|
|
LastName = reader.GetString(1),
|
|
FirstName = reader.GetString(2),
|
|
Patronymic = reader.GetString(3),
|
|
UserId = reader.GetInt32(4),
|
|
});
|
|
}
|
|
return teachers;
|
|
}
|
|
|
|
public Teacher? Get(int id)
|
|
{
|
|
using var con = SqlConnection.GetConnection();
|
|
con.Open();
|
|
using var cmd = new NpgsqlCommand($"SELECT * FROM teacher WHERE teacher_id = {id}", con);
|
|
using var reader = cmd.ExecuteReader();
|
|
if (reader.Read())
|
|
{
|
|
return new Teacher
|
|
{
|
|
Id = reader.GetInt32(0),
|
|
LastName = reader.GetString(1),
|
|
FirstName = reader.GetString(2),
|
|
Patronymic = reader.GetString(3),
|
|
UserId = reader.GetInt32(4),
|
|
};
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public Teacher? Create(Teacher teacher)
|
|
{
|
|
using var con = SqlConnection.GetConnection();
|
|
con.Open();
|
|
using var cmd = new NpgsqlCommand("INSERT INTO teacher (last_name, first_name, patronymic, fk_user_id) VALUES (@LastName, @FirstName, @Patronymic, @UserId)", con);
|
|
cmd.Parameters.AddWithValue("@LastName", teacher.LastName);
|
|
cmd.Parameters.AddWithValue("@FirstName", teacher.FirstName);
|
|
cmd.Parameters.AddWithValue("@Patronymic", teacher.Patronymic);
|
|
cmd.Parameters.AddWithValue("@UserId", teacher.UserId);
|
|
cmd.ExecuteNonQuery();
|
|
return teacher;
|
|
}
|
|
|
|
public Teacher? Update(Teacher teacher)
|
|
{
|
|
using var con = SqlConnection.GetConnection();
|
|
con.Open();
|
|
using var cmd = new NpgsqlCommand($"UPDATE teacher SET last_name = '{teacher.LastName}', first_name = '{teacher.FirstName}', patronymic = '{teacher.Patronymic}', fk_user_id = {teacher.UserId} WHERE teacher_id = {teacher.Id}", con);
|
|
cmd.ExecuteNonQuery();
|
|
var element = Get(teacher.Id);
|
|
return element;
|
|
}
|
|
|
|
public Teacher? Delete(int id)
|
|
{
|
|
var element = Get(id);
|
|
using var con = SqlConnection.GetConnection();
|
|
con.Open();
|
|
using var cmd = new NpgsqlCommand($"DELETE FROM teacher WHERE teacher_id = {id}", con);
|
|
cmd.ExecuteNonQuery();
|
|
return element;
|
|
}
|
|
|
|
public List<Subject> GetAllTeacherSubjects(int teacherId)
|
|
{
|
|
var subjects = new List<Subject>();
|
|
using var con = SqlConnection.GetConnection();
|
|
con.Open();
|
|
using var cmd = new NpgsqlCommand($"SELECT s.subject_id, s.subject_name FROM teacher_subject ts JOIN subject s ON ts.fk_subject_id = s.subject_id WHERE ts.fk_teacher_id = {teacherId}", con);
|
|
using var reader = cmd.ExecuteReader();
|
|
while (reader.Read())
|
|
{
|
|
subjects.Add(new Subject()
|
|
{
|
|
Id = reader.GetInt32(0),
|
|
Name = reader.GetString(1),
|
|
});
|
|
}
|
|
return subjects;
|
|
}
|
|
|
|
public Subject? AddTeacherSubject(int teacherId, int subjectId)
|
|
{
|
|
using var con = SqlConnection.GetConnection();
|
|
con.Open();
|
|
using var cmd = new NpgsqlCommand("INSERT INTO teacher_subject (fk_teacher_id, fk_subject_id) VALUES (@TeacherId, @SubjectId)", con);
|
|
cmd.Parameters.AddWithValue("@TeacherId", teacherId);
|
|
cmd.Parameters.AddWithValue("@SubjectId", subjectId);
|
|
cmd.ExecuteNonQuery();
|
|
return _subjectWork.Get(subjectId);
|
|
}
|
|
|
|
public Subject? DeleteTeacherSubject(int teacherId, int subjectId)
|
|
{
|
|
using var con = SqlConnection.GetConnection();
|
|
con.Open();
|
|
using var cmd = new NpgsqlCommand($"DELETE FROM teacher_subject WHERE fk_teacher_id = {teacherId} AND fk_subject_id = {subjectId}", con);
|
|
cmd.ExecuteNonQuery();
|
|
return _subjectWork.Get(subjectId);
|
|
}
|
|
|
|
public List<Subject> DeleteAllTeacherSubjects(int teacherId)
|
|
{
|
|
var subjects = GetAllTeacherSubjects(teacherId);
|
|
using var con = SqlConnection.GetConnection();
|
|
con.Open();
|
|
using var cmd = new NpgsqlCommand($"DELETE FROM teacher_subject WHERE fk_teacher_id = {teacherId}", con);
|
|
cmd.ExecuteNonQuery();
|
|
return subjects;
|
|
}
|
|
}
|
|
}
|