using Microsoft.EntityFrameworkCore; using StudentEnrollmentContracts.BindingModels; using StudentEnrollmentContracts.SearchModels; using StudentEnrollmentContracts.StorageContracts; using StudentEnrollmentContracts.ViewModels; using StudentEnrollmentDatabaseImplement.Models; namespace StudentEnrollmentDatabaseImplement.Implements { public class CourseStorage : ICourseStorage { public List GetFullList() { using var context = new StudentEnrollmentDatabase(); return context.course .Include(x => x.Faculty) .Select(x => x.GetViewModel) .ToList(); } public List GetFilteredList(CourseSearchModel model) { if (string.IsNullOrEmpty(model.name)) { return new(); } using var context = new StudentEnrollmentDatabase(); return context.course .Include(x => x.Faculty) .Where(x => (model.course_id.HasValue && x.course_id == model.course_id) || (string.IsNullOrEmpty(model.name) && x.name == model.name)) .Select(x => x.GetViewModel) .ToList(); } public CourseViewModel? GetElement(CourseSearchModel model) { if (string.IsNullOrEmpty(model.name) && !model.course_id.HasValue) { return null; } using var context = new StudentEnrollmentDatabase(); return context.course .Include(x => x.Faculty) .FirstOrDefault(x => (model.course_id.HasValue && x.course_id == model.course_id) || (string.IsNullOrEmpty(model.name) && x.name == model.name))? .GetViewModel; } public CourseViewModel? Insert(CourseBindingModel model) { using var context = new StudentEnrollmentDatabase(); var newCourse = Course.Create(model); if (newCourse == null) { return null; } context.course.Add(newCourse); context.SaveChanges(); return context.course .Include(x => x.Faculty) .FirstOrDefault(x => x.course_id == newCourse.course_id)? .GetViewModel; } public CourseViewModel? Update(CourseBindingModel model) { using var context = new StudentEnrollmentDatabase(); var course = context.course.Include(x => x.Faculty).FirstOrDefault(x => x.course_id == model.course_id); if (course == null) { return null; } course.Update(model); context.SaveChanges(); return course.GetViewModel; } public CourseViewModel? Delete(CourseBindingModel model) { using var context = new StudentEnrollmentDatabase(); var element = context.course.Include(x => x.Faculty).FirstOrDefault(rec => rec.course_id == model.course_id); if (element != null) { context.course.Remove(element); context.SaveChanges(); return element.GetViewModel; } return null; } } }