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 ResultStorage : IResultStorage { public List GetFullList() { using var context = new TaskTrackerDatabase(); return context.Results .Include(x => x.Subject) .Select(x => x.GetViewModel) .ToList(); } public List GetFilteredList(ResultSearchModel model) { using var context = new TaskTrackerDatabase(); if (model.Id.HasValue) { return context.Results .Include(x => x.Subject) .Where(x => x.Id == model.Id) .Select(x => x.GetViewModel) .ToList(); } else if (!model.SubjectId.HasValue) { return context.Results .Include(x => x.Subject) .Include(x => x.Student) .Where(x => x.SubjectId == model.SubjectId) .Select(x => x.GetViewModel) .ToList(); } return new(); } public ResultViewModel? GetElement(ResultSearchModel model) { if (!model.Id.HasValue) { return null; } using var context = new TaskTrackerDatabase(); return context.Results .Include(x => x.Subject) .Include(x => x.Student) .FirstOrDefault(x => x.Id == model.Id) ?.GetViewModel; } public ResultViewModel? Insert(ResultBindingModel model) { var newResult = Result.Create(model); if (newResult == null) { return null; } using var context = new TaskTrackerDatabase(); context.Results.Add(newResult); context.SaveChanges(); return context.Results .Include(x => x.Subject) .Include(x => x.Student) .FirstOrDefault(x => x.Id == newResult.Id) ?.GetViewModel; } public ResultViewModel? Update(ResultBindingModel model) { using var context = new TaskTrackerDatabase(); var order = context.Results.FirstOrDefault(x => x.Id == model.Id); if (order == null) { return null; } order.Update(model); context.SaveChanges(); return context.Results .Include(x => x.Subject) .Include(x => x.Student) .FirstOrDefault(x => x.Id == model.Id) ?.GetViewModel; } public ResultViewModel? Delete(ResultBindingModel model) { using var context = new TaskTrackerDatabase(); var element = context.Results.FirstOrDefault(rec => rec.Id == model.Id); if (element != null) { var deletedElement = context.Results .Include(x => x.Subject) .Include(x => x.Student) .FirstOrDefault(x => x.Id == model.Id) ?.GetViewModel; context.Results.Remove(element); context.SaveChanges(); return deletedElement; } return null; } } }