using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using TaskTrackerContracts.BindingModels; using TaskTrackerContracts.SearchModels; using TaskTrackerContracts.StoragesContracts; using TaskTrackerContracts.ViewModels; using TaskTrackerDatabase.Models; namespace TaskTrackerDatabase.Implements { public class ExamStorage : IExamStorage { public List GetFullList() { using var context = new TaskTrackerDatabase(); return context.Exams .Include(x => x.Subject) .Select(x => x.GetViewModel) .ToList(); } public List GetFilteredList(ExamSearchModel model) { using var context = new TaskTrackerDatabase(); if (model.Id.HasValue) { return context.Exams .Include(x => x.Subject) .Where(x => x.Id == model.Id) .Select(x => x.GetViewModel) .ToList(); } else if (!model.SubjectId.HasValue) { return context.Exams .Include(x => x.Subject) .Where(x => x.SubjectId == model.SubjectId) .Select(x => x.GetViewModel) .ToList(); } return new(); } public ExamViewModel? GetElement(ExamSearchModel model) { if (!model.Id.HasValue) { return null; } using var context = new TaskTrackerDatabase(); return context.Exams .Include(x => x.Subject) .FirstOrDefault(x => x.Id == model.Id) ?.GetViewModel; } public ExamViewModel? Insert(ExamBindingModel model) { var newExam = Exam.Create(model); if (newExam == null) { return null; } using var context = new TaskTrackerDatabase(); context.Exams.Add(newExam); context.SaveChanges(); return context.Exams .Include(x => x.Subject) .FirstOrDefault(x => x.Id == newExam.Id) ?.GetViewModel; } public ExamViewModel? Update(ExamBindingModel model) { using var context = new TaskTrackerDatabase(); var order = context.Exams.FirstOrDefault(x => x.Id == model.Id); if (order == null) { return null; } order.Update(model); context.SaveChanges(); return context.Exams .Include(x => x.Subject) .FirstOrDefault(x => x.Id == model.Id) ?.GetViewModel; } public ExamViewModel? Delete(ExamBindingModel model) { using var context = new TaskTrackerDatabase(); var element = context.Exams.FirstOrDefault(rec => rec.Id == model.Id); if (element != null) { var deletedElement = context.Exams .Include(x => x.Subject) .FirstOrDefault(x => x.Id == model.Id) ?.GetViewModel; context.Exams.Remove(element); context.SaveChanges(); return deletedElement; } return null; } } }