PIbd-21_Pyatakov_KM_Markov_.../UniversityDataBaseImplemet/Implements/StreamStorage.cs
2023-05-20 05:46:02 +04:00

160 lines
5.5 KiB
C#

using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UniversityContracts.BindingModels;
using UniversityContracts.SearchModels;
using UniversityContracts.StoragesContracts;
using UniversityContracts.ViewModels;
using Stream = UniversityDataBaseImplemet.Models.Stream;
namespace UniversityDataBaseImplemet.Implements
{
public class StreamStorage : IStreamStorage
{
public StreamViewModel? GetElement(StreamSearchModel model)
{
if (!model.Id.HasValue)
{
return null;
}
using var context = new Database();
return context.Streams
.Include(record => record.User)
.Include(record => record.StreamStudents)
.ThenInclude(record => record.Student)
.Include(record => record.EducationGroupStream)
.ThenInclude(record => record.EducationGroup)
.FirstOrDefault(record => record.Id == model.Id
|| record.Name.Equals(model.Name))
?.GetViewModel;
}
public List<StreamViewModel> GetFilteredList(StreamSearchModel model)
{
using var context = new Database();
if (model.Id.HasValue)
{
return context.Streams
.Include(record => record.StreamStudents)
.ThenInclude(record => record.Student)
.Where(record => record.Id.Equals(model.Id))
.Select(record => record.GetViewModel)
.ToList();
}
else if (model.UserId.HasValue)
{
return context.Streams
.Include(record => record.StreamStudents)
.ThenInclude(record => record.Student)
.Where(record => record.UserId == model.UserId)
.Select(record => record.GetViewModel)
.ToList();
}
else
{
return new();
}
}
public List<StreamViewModel> GetFullList()
{
using var context = new Database();
return context.Streams
.Include(record => record.StreamStudents)
.ThenInclude(record => record.Student)
.Select(record => record.GetViewModel)
.ToList();
}
public StreamViewModel? Insert(StreamBindingModel model)
{
using var context = new Database();
var newStream = Stream.Create(context, model);
if (newStream == null)
{
return null;
}
context.Streams.Add(newStream);
context.SaveChanges();
return newStream.GetViewModel;
}
public StreamViewModel? Update(StreamBindingModel model)
{
using var context = new Database();
using var transaction = context.Database.BeginTransaction();
try
{
var stream = context.Streams
.FirstOrDefault(record => record.Id.Equals(model.Id));
if (stream == null)
{
return null;
}
stream.Update(model);
stream.UpdateStreamStudents(context, model);
context.SaveChanges();
transaction.Commit();
return stream.GetViewModel;
}
catch
{
transaction.Rollback();
throw;
}
}
public StreamViewModel? Delete(StreamBindingModel model)
{
using var context = new Database();
var stream = context.Streams
.Include(record => record.User)
.Include(record => record.EducationGroupStream)
.FirstOrDefault(record => record.Id.Equals(model.Id));
if (stream == null)
{
return null;
}
context.Streams.Remove(stream);
context.SaveChanges();
return stream.GetViewModel;
}
public List<DisciplineViewModel> GetStreamDisciplines(StreamSearchModel model) {
if (model == null)
{
return new();
}
using var context = new Database();
var disciplines = context.Discipline
.Where(x => x.StreamId == model.Id)
.Select(x => x.GetViewModel)
.ToList();
return disciplines;
}
public int GetNumberOfPages(int userId, int pageSize)
{
using var context = new Database();
int carsCount = context.Streams.Where(c => c.UserId == userId).Count();
int numberOfpages = (int)Math.Ceiling((double)carsCount / pageSize);
return numberOfpages != 0 ? numberOfpages : 1;
}
public List<StudentViewModel> GetStreamStudents(StreamSearchModel model)
{
if (model == null)
{
return new();
}
using var context = new Database();
var students = context.StudentStreams
.Where(x => x.StreamId == model.Id)
.Where(x => x.Student.DateOfAddmission < model.DateTo && x.Student.DateOfAddmission >= model.DateFrom)
.Include(x => x.Student)
.ThenInclude(x => x.EducationStatus)
.Select(x => x.Student.GetViewModel)
.ToList();
return students;
}
}
}