CourseWork_SchoolStudyAgain/SchoolAgainStudy/SchoolAgainStudyDataBaseImplements/Implements/DiyStorage.cs

133 lines
4.4 KiB
C#

using Microsoft.EntityFrameworkCore;
using SchoolAgainStudyContracts.BindingModel;
using SchoolAgainStudyContracts.SearchModel;
using SchoolAgainStudyContracts.StorageContracts;
using SchoolAgainStudyContracts.ViewModel;
using SchoolAgainStudyDataBaseImplements.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SchoolAgainStudyDataBaseImplements.Implements
{
public class DiyStorage : IDiyStorage
{
public List<DiyViewModel> GetFullList()
{
using var context = new SchoolDataBase();
return context.Diys
.Include(x => x.Interests)
.ThenInclude(x => x.Interest)
.ToList()
.Select(x => x.GetViewModel)
.ToList();
}
public List<DiyViewModel> GetFilteredList(DiySearchModel model)
{
if(!model.StudentId.HasValue)
{
return new();
}
using var context = new SchoolDataBase();
if(model.DateFrom.HasValue && model.DateTo.HasValue && model.StudentId.HasValue)
{
return context.Diys
.Include(x => x.Interests)
.ThenInclude(x => x.Interest)
.Where(x => x.DateCreate >= model.DateFrom && x.DateCreate <= model.DateTo && x.StudentId == model.StudentId)
.ToList()
.Select(x => x.GetViewModel)
.ToList();
}
return context.Diys
.Include(x => x.Interests)
.ThenInclude(x => x.Interest)
.Where(x => x.StudentId == model.StudentId )
.ToList()
.Select(x => x.GetViewModel)
.ToList();
}
public DiyViewModel? GetElement(DiySearchModel model)
{
if (string.IsNullOrEmpty(model.Title) && !model.Id.HasValue && !model.StudentId.HasValue)
{
return null;
}
using var context = new SchoolDataBase();
if(!string.IsNullOrEmpty(model.Title)&& model.StudentId.HasValue)
return context.Diys
.Include(x => x.Interests)
.ThenInclude(x => x.Interest)
.FirstOrDefault(x => x.Title.Equals(model.Title) &&
x.StudentId==model.StudentId)
?.GetViewModel;
return context.Diys
.Include(x => x.Interests)
.ThenInclude(x => x.Interest)
.FirstOrDefault(x =>
x.Id == model.Id)
?.GetViewModel;
}
public DiyViewModel? Insert(DiyBindingModel model)
{
using var context = new SchoolDataBase();
var newDiy = Diy.Create(context, model);
if (newDiy == null)
{
return null;
}
context.Diys.Add(newDiy);
context.SaveChanges();
return newDiy.GetViewModel;
}
public DiyViewModel? Update(DiyBindingModel model)
{
using var context = new SchoolDataBase();
using var transaction = context.Database.BeginTransaction();
try
{
var diy = context.Diys.FirstOrDefault(rec => rec.Id == model.Id);
if (diy == null)
{
return null;
}
diy.Update(model);
context.SaveChanges();
diy.UpdateInterests(context, model);
transaction.Commit();
return diy.GetViewModel;
}
catch
{
transaction.Rollback();
throw;
}
}
public DiyViewModel? Delete(DiyBindingModel model)
{
using var context = new SchoolDataBase();
var element = context.Diys
.Include(x => x.Interests)
.FirstOrDefault(rec => rec.Id == model.Id);
if (element != null)
{
context.Diys.Remove(element);
context.SaveChanges();
return element.GetViewModel;
}
return null;
}
}
}