using Microsoft.EntityFrameworkCore; using StudentEnrollmentContracts.BindingModels; using StudentEnrollmentContracts.SearchModels; using StudentEnrollmentContracts.StorageContracts; using StudentEnrollmentContracts.ViewModels; using StudentEnrollmentDatabaseImplement.Models; namespace StudentEnrollmentDatabaseImplement.Implements { public class StudentStorage : IStudentStorage { public List GetFullList() { using var context = new StudentEnrollmentDatabase(); return context.student .Include(x => x.ExamPoints) .Select(x => x.GetViewModel) .ToList(); } public List GetFilteredList(StudentSearchModel model) { if (model.tin == 0) { return new(); } using var context = new StudentEnrollmentDatabase(); return context.student .Include(x => x.ExamPoints) .Where(x => (model.student_id.HasValue && x.student_id == model.student_id) || (model.tin == 0 && x.tin == model.tin)) .Select(x => x.GetViewModel) .ToList(); } public StudentViewModel? GetElement(StudentSearchModel model) { if (model.tin == 0 && !model.student_id.HasValue) { return null; } using var context = new StudentEnrollmentDatabase(); return context.student .Include(x => x.ExamPoints) .FirstOrDefault(x => (model.student_id.HasValue && x.student_id == model.student_id) || (model.tin == 0 && x.tin == model.tin))? .GetViewModel; } public StudentViewModel? Insert(StudentBindingModel model) { using var context = new StudentEnrollmentDatabase(); var newStudent = Student.Create(context, model); if (newStudent == null) { return null; } context.student.Add(newStudent); context.SaveChanges(); return context.student.Include(x => x.ExamPoints).FirstOrDefault(x => x.student_id == newStudent.student_id)?.GetViewModel; } public StudentViewModel? Update(StudentBindingModel model) { using var context = new StudentEnrollmentDatabase(); var student = context.student.FirstOrDefault(x => x.student_id == model.Id); if (student == null) { return null; } student.Update(model); context.SaveChanges(); return student.GetViewModel; } public StudentViewModel? Delete(StudentBindingModel model) { using var context = new StudentEnrollmentDatabase(); var element = context.student.FirstOrDefault(rec => rec.student_id == model.Id); if (element != null) { context.student.Remove(element); context.SaveChanges(); return element.GetViewModel; } return null; } } }