Files

139 lines
5.4 KiB
C#

using ElectronicDiaryAbstractions.Models;
using ElectronicDiaryAbstractions.WorkAbstractions;
using Npgsql;
namespace ElectronicDiaryPostgresImplementation.WorkImplementation
{
public class TeacherWork : ITeacherWork
{
private readonly ISubjectWork _subjectWork;
public TeacherWork(ISubjectWork 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;
}
}
}