160 lines
5.5 KiB
C#
Raw Normal View History

2023-04-08 22:25:55 +04:00
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
2023-04-08 22:25:55 +04:00
{
public StreamViewModel? GetElement(StreamSearchModel model)
{
if (!model.Id.HasValue)
{
return null;
}
using var context = new Database();
return context.Streams
2023-05-19 21:25:56 +04:00
.Include(record => record.User)
.Include(record => record.StreamStudents)
2023-04-09 03:08:30 +04:00
.ThenInclude(record => record.Student)
2023-05-19 21:25:56 +04:00
.Include(record => record.EducationGroupStream)
.ThenInclude(record => record.EducationGroup)
.FirstOrDefault(record => record.Id == model.Id
2023-04-08 22:25:55 +04:00
|| record.Name.Equals(model.Name))
?.GetViewModel;
}
public List<StreamViewModel> GetFilteredList(StreamSearchModel model)
{
using var context = new Database();
if (model.Id.HasValue)
{
return context.Streams
2023-04-09 03:08:30 +04:00
.Include(record => record.StreamStudents)
.ThenInclude(record => record.Student)
.Where(record => record.Id.Equals(model.Id))
2023-04-08 22:25:55 +04:00
.Select(record => record.GetViewModel)
.ToList();
}
else if (model.UserId.HasValue)
{
return context.Streams
2023-04-09 03:08:30 +04:00
.Include(record => record.StreamStudents)
.ThenInclude(record => record.Student)
2023-04-09 03:08:30 +04:00
.Where(record => record.UserId == model.UserId)
2023-04-08 22:25:55 +04:00
.Select(record => record.GetViewModel)
.ToList();
}
else
{
return new();
}
}
public List<StreamViewModel> GetFullList()
{
using var context = new Database();
return context.Streams
2023-04-09 03:08:30 +04:00
.Include(record => record.StreamStudents)
.ThenInclude(record => record.Student)
.Select(record => record.GetViewModel)
2023-04-08 22:25:55 +04:00
.ToList();
}
public StreamViewModel? Insert(StreamBindingModel model)
{
2023-05-19 21:25:56 +04:00
using var context = new Database();
var newStream = Stream.Create(context, model);
2023-04-08 22:25:55 +04:00
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);
2023-05-19 21:25:56 +04:00
stream.UpdateStreamStudents(context, model);
2023-04-08 22:25:55 +04:00
context.SaveChanges();
2023-04-09 03:08:30 +04:00
transaction.Commit();
2023-04-08 22:25:55 +04:00
return stream.GetViewModel;
}
catch
{
transaction.Rollback();
throw;
}
}
public StreamViewModel? Delete(StreamBindingModel model)
{
using var context = new Database();
var stream = context.Streams
2023-05-19 21:25:56 +04:00
.Include(record => record.User)
.Include(record => record.StreamStudents)
2023-04-08 22:25:55 +04:00
.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;
}
2023-05-19 21:25:56 +04:00
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();
2023-05-19 21:25:56 +04:00
var students = context.StudentStreams
.Where(x => x.StreamId == model.Id)
2023-05-19 13:11:40 +04:00
.Where(x => x.Student.DateOfAddmission < model.DateTo && x.Student.DateOfAddmission >= model.DateFrom)
2023-05-19 21:25:56 +04:00
.Include(x => x.Student)
.ThenInclude(x => x.EducationStatus)
.Select(x => x.Student.GetViewModel)
.ToList();
return students;
}
2023-04-08 22:25:55 +04:00
}
}