Начало бд
This commit is contained in:
parent
01b2bc9960
commit
9f9e4e92f9
@ -10,13 +10,14 @@ namespace TaskTrackerContracts.BindingModels
|
||||
public class DirectionBindingModel : IDirectionModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public Dictionary<int, (IStudentModel, int)> DirectionStudents
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public Dictionary<int, IStudentModel> DirectionStudents
|
||||
{
|
||||
get;
|
||||
set;
|
||||
} = new();
|
||||
|
||||
public Dictionary<int, (ISubjectModel, int)> DirectionSubjects
|
||||
public Dictionary<int, ISubjectModel> DirectionSubjects
|
||||
{
|
||||
get;
|
||||
set;
|
||||
|
@ -9,5 +9,6 @@ namespace TaskTrackerContracts.SearchModels
|
||||
public class DirectionSearchModel
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
|
@ -9,5 +9,6 @@ namespace TaskTrackerContracts.SearchModels
|
||||
public class ExamSearchModel
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
public int? SubjectId { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -9,5 +9,7 @@ namespace TaskTrackerContracts.SearchModels
|
||||
public class ResultSearchModel
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
public int? SubjectId { get; set; }
|
||||
public int? StudentId { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -9,5 +9,6 @@ namespace TaskTrackerContracts.SearchModels
|
||||
public class StudentSearchModel
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
|
@ -9,5 +9,6 @@ namespace TaskTrackerContracts.SearchModels
|
||||
public class SubjectSearchModel
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -11,11 +11,11 @@ namespace TaskTrackerContracts.StoragesContracts
|
||||
{
|
||||
public interface IDirectionStorage
|
||||
{
|
||||
List<DirectionBindingModel> GetFullList();
|
||||
/*List<DirectionBindingModel> GetFullList();
|
||||
List<DirectionBindingModel> GetFilteredList(DirectionSearchModel model);
|
||||
DirectionBindingModel? GetElement(DirectionSearchModel model);
|
||||
DirectionBindingModel? Insert(DirectionBindingModel model);
|
||||
DirectionBindingModel? Update(DirectionBindingModel model);
|
||||
DirectionBindingModel? Delete(DirectionBindingModel model);
|
||||
DirectionBindingModel? Delete(DirectionBindingModel model);*/
|
||||
}
|
||||
}
|
||||
|
@ -11,11 +11,11 @@ namespace TaskTrackerContracts.StoragesContracts
|
||||
{
|
||||
public interface IExamStorage
|
||||
{
|
||||
List<ExamBindingModel> GetFullList();
|
||||
/*List<ExamBindingModel> GetFullList();
|
||||
List<ExamBindingModel> GetFilteredList(ExamSearchModel model);
|
||||
ExamBindingModel? GetElement(ExamSearchModel model);
|
||||
ExamBindingModel? Insert(ExamBindingModel model);
|
||||
ExamBindingModel? Update(ExamBindingModel model);
|
||||
ExamBindingModel? Delete(ExamBindingModel model);
|
||||
ExamBindingModel? Delete(ExamBindingModel model);*/
|
||||
}
|
||||
}
|
||||
|
@ -11,11 +11,11 @@ namespace TaskTrackerContracts.StoragesContracts
|
||||
{
|
||||
public interface IResultStorage
|
||||
{
|
||||
List<ResultBindingModel> GetFullList();
|
||||
/*List<ResultBindingModel> GetFullList();
|
||||
List<ResultBindingModel> GetFilteredList(ResultSearchModel model);
|
||||
ResultBindingModel? GetElement(ResultSearchModel model);
|
||||
ResultBindingModel? Insert(ResultBindingModel model);
|
||||
ResultBindingModel? Update(ResultBindingModel model);
|
||||
ResultBindingModel? Delete(ResultBindingModel model);
|
||||
ResultBindingModel? Delete(ResultBindingModel model);*/
|
||||
}
|
||||
}
|
||||
|
@ -11,11 +11,11 @@ namespace TaskTrackerContracts.StoragesContracts
|
||||
{
|
||||
public interface IStudentStorage
|
||||
{
|
||||
List<StudentBindingModel> GetFullList();
|
||||
/* List<StudentBindingModel> GetFullList();
|
||||
List<StudentBindingModel> GetFilteredList(StudentSearchModel model);
|
||||
StudentBindingModel? GetElement(StudentSearchModel model);
|
||||
StudentBindingModel? Insert(StudentBindingModel model);
|
||||
StudentBindingModel? Update(StudentBindingModel model);
|
||||
StudentBindingModel? Delete(StudentBindingModel model);
|
||||
StudentBindingModel? Delete(StudentBindingModel model);*/
|
||||
}
|
||||
}
|
||||
|
@ -11,11 +11,11 @@ namespace TaskTrackerContracts.StoragesContracts
|
||||
{
|
||||
public interface ISubjectStorage
|
||||
{
|
||||
List<SubjectBindingModel> GetFullList();
|
||||
/*List<SubjectBindingModel> GetFullList();
|
||||
List<SubjectBindingModel> GetFilteredList(SubjectSearchModel model);
|
||||
SubjectBindingModel? GetElement(SubjectSearchModel model);
|
||||
SubjectBindingModel? Insert(SubjectBindingModel model);
|
||||
SubjectBindingModel? Update(SubjectBindingModel model);
|
||||
SubjectBindingModel? Delete(SubjectBindingModel model);
|
||||
SubjectBindingModel? Delete(SubjectBindingModel model);*/
|
||||
}
|
||||
}
|
||||
|
@ -10,13 +10,14 @@ namespace TaskTrackerContracts.ViewModels
|
||||
public class DirectionViewModel : IDirectionModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public Dictionary<int, (IStudentModel, int)> DirectionStudents
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public Dictionary<int, IStudentModel> DirectionStudents
|
||||
{
|
||||
get;
|
||||
set;
|
||||
} = new();
|
||||
|
||||
public Dictionary<int, (ISubjectModel, int)> DirectionSubjects
|
||||
public Dictionary<int, ISubjectModel> DirectionSubjects
|
||||
{
|
||||
get;
|
||||
set;
|
||||
|
@ -8,7 +8,8 @@ namespace TaskTrackerDataModels.Models
|
||||
{
|
||||
public interface IDirectionModel : IId
|
||||
{
|
||||
Dictionary<int, (IStudentModel, int)> DirectionStudents { get; }
|
||||
Dictionary<int, (ISubjectModel, int)> DirectionSubjects { get; }
|
||||
string Name { get; }
|
||||
Dictionary<int, IStudentModel> DirectionStudents { get; }
|
||||
Dictionary<int, ISubjectModel> DirectionSubjects { get; }
|
||||
}
|
||||
}
|
||||
|
114
TaskTrackerDatabase/Implements/DirectionStorage.cs
Normal file
114
TaskTrackerDatabase/Implements/DirectionStorage.cs
Normal file
@ -0,0 +1,114 @@
|
||||
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 DirectionStorage : IDirectionStorage
|
||||
{
|
||||
public List<DirectionViewModel> GetFullList()
|
||||
{
|
||||
using var context = new TaskTrackerDatabase();
|
||||
return context.Directions
|
||||
.Include(x => x.Students)
|
||||
.ThenInclude(x => x.Student)
|
||||
//.ToList()
|
||||
.Include(x => x.Subjects)
|
||||
.ThenInclude(x => x.Subject)
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
public List<DirectionViewModel> GetFilteredList(DirectionSearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Name))
|
||||
{
|
||||
return new();
|
||||
}
|
||||
using var context = new TaskTrackerDatabase();
|
||||
return context.Directions
|
||||
.Include(x => x.Students)
|
||||
.ThenInclude(x => x.Student)
|
||||
.Include(x => x.Subjects)
|
||||
.ThenInclude(x => x.Subject)
|
||||
.Where(x => x.Name.Contains(model.Name))
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
public DirectionViewModel? GetElement(DirectionSearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Name) && !model.Id.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new TaskTrackerDatabase();
|
||||
return context.Directions
|
||||
.Include(x => x.Students)
|
||||
.ThenInclude(x => x.Student)
|
||||
.Include(x => x.Subjects)
|
||||
.ThenInclude(x => x.Subject)
|
||||
.FirstOrDefault(x => (!string.IsNullOrEmpty(model.Name) && x.Name == model.Name) ||
|
||||
(model.Id.HasValue && x.Id == model.Id))
|
||||
?.GetViewModel;
|
||||
}
|
||||
public DirectionViewModel? Insert(DirectionBindingModel model)
|
||||
{
|
||||
using var context = new TaskTrackerDatabase();
|
||||
var newReinforced = Direction.Create(context, model);
|
||||
if (newReinforced == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
context.Directions.Add(newReinforced);
|
||||
context.SaveChanges();
|
||||
return newReinforced.GetViewModel;
|
||||
}
|
||||
public DirectionViewModel? Update(DirectionBindingModel model)
|
||||
{
|
||||
using var context = new TaskTrackerDatabase();
|
||||
using var transaction = context.Database.BeginTransaction();
|
||||
try
|
||||
{
|
||||
var reinforced = context.Directions.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (reinforced == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
reinforced.Update(model);
|
||||
context.SaveChanges();
|
||||
reinforced.UpdateStudents(context, model);
|
||||
reinforced.UpdateSubjects(context, model);
|
||||
transaction.Commit();
|
||||
return reinforced.GetViewModel;
|
||||
}
|
||||
catch
|
||||
{
|
||||
transaction.Rollback();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
public DirectionViewModel? Delete(DirectionBindingModel model)
|
||||
{
|
||||
using var context = new TaskTrackerDatabase();
|
||||
var element = context.Directions
|
||||
.Include(x => x.Students)
|
||||
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (element != null)
|
||||
{
|
||||
context.Directions.Remove(element);
|
||||
context.SaveChanges();
|
||||
return element.GetViewModel;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
110
TaskTrackerDatabase/Implements/ExamStorage.cs
Normal file
110
TaskTrackerDatabase/Implements/ExamStorage.cs
Normal file
@ -0,0 +1,110 @@
|
||||
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<ExamViewModel> GetFullList()
|
||||
{
|
||||
using var context = new TaskTrackerDatabase();
|
||||
return context.Exams
|
||||
.Include(x => x.Subject)
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public List<ExamViewModel> 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;
|
||||
}
|
||||
}
|
||||
}
|
115
TaskTrackerDatabase/Implements/ResultStorage.cs
Normal file
115
TaskTrackerDatabase/Implements/ResultStorage.cs
Normal file
@ -0,0 +1,115 @@
|
||||
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<ResultViewModel> GetFullList()
|
||||
{
|
||||
using var context = new TaskTrackerDatabase();
|
||||
return context.Results
|
||||
.Include(x => x.Subject)
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public List<ResultViewModel> 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;
|
||||
}
|
||||
}
|
||||
}
|
87
TaskTrackerDatabase/Implements/StudentStorage.cs
Normal file
87
TaskTrackerDatabase/Implements/StudentStorage.cs
Normal file
@ -0,0 +1,87 @@
|
||||
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 StudentStorage : IStudentStorage
|
||||
{
|
||||
public List<StudentViewModel> GetFullList()
|
||||
{
|
||||
using var context = new TaskTrackerDatabase();
|
||||
return context.Students
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public List<StudentViewModel> GetFilteredList(StudentSearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Name))
|
||||
{
|
||||
return new();
|
||||
}
|
||||
using var context = new TaskTrackerDatabase();
|
||||
return context.Students
|
||||
.Where(x => x.Name.Contains(model.Name))
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public StudentViewModel? GetElement(StudentSearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Name) && !model.Id.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new TaskTrackerDatabase();
|
||||
return context.Students.FirstOrDefault(x =>
|
||||
(!string.IsNullOrEmpty(model.Name) && x.Name == model.Name || (model.Id.HasValue && x.Id == model.Id)))?.GetViewModel;
|
||||
}
|
||||
|
||||
public StudentViewModel? Insert(StudentBindingModel model)
|
||||
{
|
||||
var newStudent = Student.Create(model);
|
||||
if (newStudent == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new TaskTrackerDatabase();
|
||||
context.Students.Add(newStudent);
|
||||
context.SaveChanges();
|
||||
return newStudent.GetViewModel;
|
||||
}
|
||||
|
||||
public StudentViewModel? Update(StudentBindingModel model)
|
||||
{
|
||||
using var context = new TaskTrackerDatabase();
|
||||
var user = context.Students.FirstOrDefault(x => x.Id == model.Id);
|
||||
if (user == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
user.Update(model);
|
||||
context.SaveChanges();
|
||||
return user.GetViewModel;
|
||||
}
|
||||
|
||||
public StudentViewModel? Delete(StudentBindingModel model)
|
||||
{
|
||||
using var context = new TaskTrackerDatabase();
|
||||
var element = context.Students.FirstOrDefault(x => x.Id == model.Id);
|
||||
if (element != null)
|
||||
{
|
||||
context.Students.Remove(element);
|
||||
context.SaveChanges();
|
||||
return element.GetViewModel;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
87
TaskTrackerDatabase/Implements/SubjectStorage.cs
Normal file
87
TaskTrackerDatabase/Implements/SubjectStorage.cs
Normal file
@ -0,0 +1,87 @@
|
||||
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 SubjectStorage : ISubjectStorage
|
||||
{
|
||||
public List<SubjectViewModel> GetFullList()
|
||||
{
|
||||
using var context = new TaskTrackerDatabase();
|
||||
return context.Subjects
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public List<SubjectViewModel> GetFilteredList(SubjectSearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Name))
|
||||
{
|
||||
return new();
|
||||
}
|
||||
using var context = new TaskTrackerDatabase();
|
||||
return context.Subjects
|
||||
.Where(x => x.Name.Contains(model.Name))
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public SubjectViewModel? GetElement(SubjectSearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Name) && !model.Id.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new TaskTrackerDatabase();
|
||||
return context.Subjects.FirstOrDefault(x =>
|
||||
(!string.IsNullOrEmpty(model.Name) && x.Name == model.Name || (model.Id.HasValue && x.Id == model.Id)))?.GetViewModel;
|
||||
}
|
||||
|
||||
public SubjectViewModel? Insert(SubjectBindingModel model)
|
||||
{
|
||||
var newSubject = Subject.Create(model);
|
||||
if (newSubject == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new TaskTrackerDatabase();
|
||||
context.Subjects.Add(newSubject);
|
||||
context.SaveChanges();
|
||||
return newSubject.GetViewModel;
|
||||
}
|
||||
|
||||
public SubjectViewModel? Update(SubjectBindingModel model)
|
||||
{
|
||||
using var context = new TaskTrackerDatabase();
|
||||
var user = context.Subjects.FirstOrDefault(x => x.Id == model.Id);
|
||||
if (user == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
user.Update(model);
|
||||
context.SaveChanges();
|
||||
return user.GetViewModel;
|
||||
}
|
||||
|
||||
public SubjectViewModel? Delete(SubjectBindingModel model)
|
||||
{
|
||||
using var context = new TaskTrackerDatabase();
|
||||
var element = context.Subjects.FirstOrDefault(x => x.Id == model.Id);
|
||||
if (element != null)
|
||||
{
|
||||
context.Subjects.Remove(element);
|
||||
context.SaveChanges();
|
||||
return element.GetViewModel;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
142
TaskTrackerDatabase/Models/Direction.cs
Normal file
142
TaskTrackerDatabase/Models/Direction.cs
Normal file
@ -0,0 +1,142 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TaskTrackerContracts.BindingModels;
|
||||
using TaskTrackerContracts.ViewModels;
|
||||
using TaskTrackerDataModels.Models;
|
||||
|
||||
namespace TaskTrackerDatabase.Models
|
||||
{
|
||||
public class Direction : IDirectionModel
|
||||
{
|
||||
[Required]
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
public string Name { get; set; } = string.Empty;
|
||||
|
||||
|
||||
private Dictionary<int, IStudentModel>? _directionStudents = null;
|
||||
[NotMapped]
|
||||
public Dictionary<int, IStudentModel> DirectionStudents
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_directionStudents == null)
|
||||
{
|
||||
_directionStudents = Students
|
||||
.ToDictionary(recPC => recPC.StudentId, recPC =>
|
||||
(recPC.Student as IStudentModel));
|
||||
}
|
||||
return _directionStudents;
|
||||
}
|
||||
}
|
||||
[ForeignKey("DirectionId")]
|
||||
public virtual List<DirectionStudent> Students { get; set; } = new();
|
||||
|
||||
|
||||
|
||||
|
||||
private Dictionary<int, ISubjectModel>? _directionSubjects = null;
|
||||
[NotMapped]
|
||||
public Dictionary<int, ISubjectModel> DirectionSubjects
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_directionSubjects == null)
|
||||
{
|
||||
_directionSubjects = Subjects
|
||||
.ToDictionary(recPC => recPC.SubjectId, recPC =>
|
||||
(recPC.Subject as ISubjectModel));
|
||||
}
|
||||
return _directionSubjects;
|
||||
}
|
||||
}
|
||||
[ForeignKey("DirectionId")]
|
||||
public virtual List<DirectionSubject> Subjects { get; set; } = new();
|
||||
|
||||
public static Direction Create(TaskTrackerDatabase context, DirectionBindingModel model)
|
||||
{
|
||||
return new Direction()
|
||||
{
|
||||
Id = model.Id,
|
||||
Name = model.Name,
|
||||
Students = model.DirectionStudents.Select(x => new DirectionStudent
|
||||
{
|
||||
Student = context.Students.First(y => y.Id == x.Key)
|
||||
}).ToList(),
|
||||
Subjects = model.DirectionSubjects.Select(x => new DirectionSubject
|
||||
{
|
||||
Subject = context.Subjects.First(y => y.Id == x.Key)
|
||||
}).ToList()
|
||||
};
|
||||
}
|
||||
public void Update(DirectionBindingModel model)
|
||||
{
|
||||
Name = model.Name;
|
||||
}
|
||||
public DirectionViewModel GetViewModel => new()
|
||||
{
|
||||
Id = Id,
|
||||
Name = Name,
|
||||
DirectionStudents = DirectionStudents,
|
||||
DirectionSubjects = DirectionSubjects
|
||||
};
|
||||
public void UpdateStudents(TaskTrackerDatabase context, DirectionBindingModel model)
|
||||
{
|
||||
var directionStudents = context.DirectionStudents.Where(rec => rec.DirectionId == model.Id).ToList();
|
||||
if (directionStudents != null && DirectionStudents.Count > 0)
|
||||
{ // удалили те, которых нет в модели
|
||||
context.DirectionStudents.RemoveRange(directionStudents.Where(rec => !model.DirectionStudents.ContainsKey(rec.StudentId)));
|
||||
context.SaveChanges();
|
||||
// обновили количество у существующих записей
|
||||
foreach (var updateStudents in directionStudents)
|
||||
{
|
||||
model.DirectionStudents.Remove(updateStudents.StudentId);
|
||||
}
|
||||
context.SaveChanges();
|
||||
}
|
||||
var reinforced = context.Directions.First(x => x.Id == Id);
|
||||
foreach (var rp in model.DirectionStudents)
|
||||
{
|
||||
context.DirectionStudents.Add(new DirectionStudent
|
||||
{
|
||||
Direction = reinforced,
|
||||
Student = context.Students.First(x => x.Id == rp.Key)
|
||||
});
|
||||
context.SaveChanges();
|
||||
}
|
||||
_directionStudents = null;
|
||||
}
|
||||
public void UpdateSubjects(TaskTrackerDatabase context, DirectionBindingModel model)
|
||||
{
|
||||
var directionSubjects = context.DirectionSubjects.Where(rec => rec.DirectionId == model.Id).ToList();
|
||||
if (directionSubjects != null && DirectionSubjects.Count > 0)
|
||||
{ // удалили те, которых нет в модели
|
||||
context.DirectionSubjects.RemoveRange(directionSubjects.Where(rec => !model.DirectionSubjects.ContainsKey(rec.SubjectId)));
|
||||
context.SaveChanges();
|
||||
// обновили количество у существующих записей
|
||||
foreach (var updateSubjects in directionSubjects)
|
||||
{
|
||||
model.DirectionSubjects.Remove(updateSubjects.SubjectId);
|
||||
}
|
||||
context.SaveChanges();
|
||||
}
|
||||
var reinforced = context.Directions.First(x => x.Id == Id);
|
||||
foreach (var rp in model.DirectionSubjects)
|
||||
{
|
||||
context.DirectionSubjects.Add(new DirectionSubject
|
||||
{
|
||||
Direction = reinforced,
|
||||
Subject = context.Subjects.First(x => x.Id == rp.Key)
|
||||
});
|
||||
context.SaveChanges();
|
||||
}
|
||||
_directionSubjects = null;
|
||||
}
|
||||
}
|
||||
}
|
24
TaskTrackerDatabase/Models/DirectionStudent.cs
Normal file
24
TaskTrackerDatabase/Models/DirectionStudent.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace TaskTrackerDatabase.Models
|
||||
{
|
||||
public class DirectionSubject
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
public int DirectionId { get; set; }
|
||||
|
||||
[Required]
|
||||
public int SubjectId { get; set; }
|
||||
|
||||
[Required]
|
||||
public virtual Direction Direction{ get; set; } = new();
|
||||
public virtual Subject Subject { get; set; } = new();
|
||||
}
|
||||
}
|
24
TaskTrackerDatabase/Models/DirectionSubject.cs
Normal file
24
TaskTrackerDatabase/Models/DirectionSubject.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace TaskTrackerDatabase.Models
|
||||
{
|
||||
public class DirectionStudent
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
public int DirectionId { get; set; }
|
||||
|
||||
[Required]
|
||||
public int StudentId { get; set; }
|
||||
|
||||
[Required]
|
||||
public virtual Direction Direction{ get; set; } = new();
|
||||
public virtual Student Student { get; set; } = new();
|
||||
}
|
||||
}
|
54
TaskTrackerDatabase/Models/Exam.cs
Normal file
54
TaskTrackerDatabase/Models/Exam.cs
Normal file
@ -0,0 +1,54 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TaskTrackerContracts.BindingModels;
|
||||
using TaskTrackerContracts.ViewModels;
|
||||
using TaskTrackerDataModels.Models;
|
||||
|
||||
namespace TaskTrackerDatabase.Models
|
||||
{
|
||||
public class Exam : IExamModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
public int SubjectId { get; set; }
|
||||
[Required]
|
||||
|
||||
public DateTime Date { get; set; }
|
||||
public virtual Subject Subject { get; set; }
|
||||
public static Exam? Create(ExamBindingModel? model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return new Exam()
|
||||
{
|
||||
Id = model.Id,
|
||||
SubjectId = model.SubjectId,
|
||||
Date = model.Date,
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
public void Update(ExamBindingModel? model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
Date = model.Date;
|
||||
}
|
||||
|
||||
public ExamViewModel GetViewModel => new()
|
||||
{
|
||||
Id = Id,
|
||||
SubjectId = SubjectId,
|
||||
Date = Date,
|
||||
};
|
||||
}
|
||||
}
|
64
TaskTrackerDatabase/Models/Result.cs
Normal file
64
TaskTrackerDatabase/Models/Result.cs
Normal file
@ -0,0 +1,64 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TaskTrackerContracts.BindingModels;
|
||||
using TaskTrackerContracts.StoragesContracts;
|
||||
using TaskTrackerContracts.ViewModels;
|
||||
using TaskTrackerDataModels.Models;
|
||||
|
||||
namespace TaskTrackerDatabase.Models
|
||||
{
|
||||
public class Result : IResultModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
public string Grade { get; set; } = string.Empty;
|
||||
[Required]
|
||||
|
||||
public int StudentId { get; set; }
|
||||
[Required]
|
||||
|
||||
public int SubjectId { get; set; }
|
||||
|
||||
public Student Student { get; set; }
|
||||
public Subject Subject { get; set; }
|
||||
|
||||
public static Result? Create(ResultBindingModel? model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return new Result()
|
||||
{
|
||||
Id = model.Id,
|
||||
Grade = model.Grade,
|
||||
StudentId = model.StudentId,
|
||||
SubjectId = model.SubjectId,
|
||||
};
|
||||
}
|
||||
|
||||
public void Update(ResultBindingModel? model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
Grade = model.Grade;
|
||||
StudentId = model.StudentId;
|
||||
SubjectId = model.SubjectId;
|
||||
}
|
||||
|
||||
public ResultViewModel GetViewModel => new()
|
||||
{
|
||||
Id = Id,
|
||||
Grade = Grade,
|
||||
StudentId = StudentId,
|
||||
SubjectId = SubjectId,
|
||||
};
|
||||
}
|
||||
}
|
59
TaskTrackerDatabase/Models/Student.cs
Normal file
59
TaskTrackerDatabase/Models/Student.cs
Normal file
@ -0,0 +1,59 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TaskTrackerContracts.BindingModels;
|
||||
using TaskTrackerContracts.BusinessLogicsContracts;
|
||||
using TaskTrackerContracts.ViewModels;
|
||||
using TaskTrackerDataModels.Models;
|
||||
|
||||
namespace TaskTrackerDatabase.Models
|
||||
{
|
||||
public class Student : IStudentModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
public string Name { get; set; } = string.Empty;
|
||||
[Required]
|
||||
|
||||
public DateTime DateBirth { get; set; }
|
||||
[ForeignKey("StudentId")]
|
||||
public virtual List<Result> Results { get; set; } = new();
|
||||
[ForeignKey("StudentId")]
|
||||
public virtual List<Exam> Exams { get; set; } = new();
|
||||
public static Student? Create(StudentBindingModel? model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return new Student()
|
||||
{
|
||||
Id = model.Id,
|
||||
Name = model.Name,
|
||||
DateBirth = model.DateBirth,
|
||||
};
|
||||
}
|
||||
|
||||
public void Update(StudentBindingModel? model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
Name = model.Name;
|
||||
DateBirth = model.DateBirth;
|
||||
}
|
||||
|
||||
public StudentViewModel GetViewModel => new()
|
||||
{
|
||||
Id = Id,
|
||||
Name = Name,
|
||||
DateBirth = DateBirth,
|
||||
};
|
||||
}
|
||||
}
|
52
TaskTrackerDatabase/Models/Subject.cs
Normal file
52
TaskTrackerDatabase/Models/Subject.cs
Normal file
@ -0,0 +1,52 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TaskTrackerContracts.BindingModels;
|
||||
using TaskTrackerContracts.ViewModels;
|
||||
using TaskTrackerDataModels.Models;
|
||||
|
||||
namespace TaskTrackerDatabase.Models
|
||||
{
|
||||
public class Subject : ISubjectModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
public string Name { get; set; } = string.Empty;
|
||||
[ForeignKey("SubjectId")]
|
||||
public virtual List<Exam> Exams { get; set; } = new();
|
||||
[ForeignKey("SubjectId")]
|
||||
public virtual List<Result> Results { get; set; } = new();
|
||||
public static Subject? Create(SubjectBindingModel? model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return new Subject()
|
||||
{
|
||||
Id = model.Id,
|
||||
Name = model.Name,
|
||||
};
|
||||
}
|
||||
|
||||
public void Update(SubjectBindingModel? model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
Name = model.Name;
|
||||
}
|
||||
|
||||
public SubjectViewModel GetViewModel => new()
|
||||
{
|
||||
Id = Id,
|
||||
Name = Name,
|
||||
};
|
||||
}
|
||||
}
|
@ -19,5 +19,14 @@ namespace TaskTrackerDatabase
|
||||
public virtual DbSet<OrganizationProject> OrganizationProjects { set; get; }
|
||||
public virtual DbSet<Task> Tasks { set; get; }
|
||||
public virtual DbSet<User> Users { set; get; }
|
||||
|
||||
|
||||
public virtual DbSet<Direction> Directions { set; get; }
|
||||
public virtual DbSet<Student> Students { set; get; }
|
||||
public virtual DbSet<Subject> Subjects { set; get; }
|
||||
public virtual DbSet<DirectionStudent> DirectionStudents { set; get; }
|
||||
public virtual DbSet<DirectionSubject> DirectionSubjects { set; get; }
|
||||
public virtual DbSet<Result> Results { set; get; }
|
||||
public virtual DbSet<Exam> Exams { set; get; }
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user