forked from DavidMakarov/StudentEnrollment
implement 3 of 5 projects (remain View and DatabaseImplement)
This commit is contained in:
parent
55beb4f1ed
commit
5f67d6dc8a
49
StudentEnrollment/StudentEnrollment.sln
Normal file
49
StudentEnrollment/StudentEnrollment.sln
Normal file
@ -0,0 +1,49 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.6.33815.320
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StudentEnrollmentView", "StudentEnrollmentView\StudentEnrollmentView.csproj", "{9F2D2847-BC2D-43E8-95D3-65FF657A4BC9}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StudentEnrollmentDatabaseImplement", "StudentEnrollmentDatabaseImplement\StudentEnrollmentDatabaseImplement.csproj", "{0E15CFEE-D946-455E-9E4E-90FA14674F7D}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StudentEnrollmentDataModels", "StudentEnrollmentDataModels\StudentEnrollmentDataModels.csproj", "{1E2E27BF-4895-4191-9669-A5822D7FA989}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StudentEnrollmentBusinessLogic", "StudentEnrollmentBusinessLogic\StudentEnrollmentBusinessLogic.csproj", "{A53CE753-75B2-44CC-9BE8-AE478C1A5796}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StudentEnrollmentContracts", "StudentEnrollmentContracts\StudentEnrollmentContracts.csproj", "{2F21A9AA-6FA9-4113-88C0-9C7BCCFBB822}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{9F2D2847-BC2D-43E8-95D3-65FF657A4BC9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9F2D2847-BC2D-43E8-95D3-65FF657A4BC9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9F2D2847-BC2D-43E8-95D3-65FF657A4BC9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9F2D2847-BC2D-43E8-95D3-65FF657A4BC9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0E15CFEE-D946-455E-9E4E-90FA14674F7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0E15CFEE-D946-455E-9E4E-90FA14674F7D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0E15CFEE-D946-455E-9E4E-90FA14674F7D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0E15CFEE-D946-455E-9E4E-90FA14674F7D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1E2E27BF-4895-4191-9669-A5822D7FA989}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1E2E27BF-4895-4191-9669-A5822D7FA989}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1E2E27BF-4895-4191-9669-A5822D7FA989}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1E2E27BF-4895-4191-9669-A5822D7FA989}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A53CE753-75B2-44CC-9BE8-AE478C1A5796}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A53CE753-75B2-44CC-9BE8-AE478C1A5796}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A53CE753-75B2-44CC-9BE8-AE478C1A5796}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A53CE753-75B2-44CC-9BE8-AE478C1A5796}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2F21A9AA-6FA9-4113-88C0-9C7BCCFBB822}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2F21A9AA-6FA9-4113-88C0-9C7BCCFBB822}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2F21A9AA-6FA9-4113-88C0-9C7BCCFBB822}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2F21A9AA-6FA9-4113-88C0-9C7BCCFBB822}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {6F203950-511C-4D26-A9CF-129D159AE690}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
106
StudentEnrollment/StudentEnrollmentBusinessLogic/CourseLogic.cs
Normal file
106
StudentEnrollment/StudentEnrollmentBusinessLogic/CourseLogic.cs
Normal file
@ -0,0 +1,106 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using StudentEnrollmentContracts.BindingModels;
|
||||
using StudentEnrollmentContracts.BusinessLogicContracts;
|
||||
using StudentEnrollmentContracts.SearchModels;
|
||||
using StudentEnrollmentContracts.StorageContracts;
|
||||
using StudentEnrollmentContracts.ViewModels;
|
||||
|
||||
namespace StudentEnrollmentBusinessLogic
|
||||
{
|
||||
public class CourseLogic : ICourseLogic
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
private readonly ICourseStorage _courseStorage;
|
||||
public CourseLogic(ILogger<CourseLogic> logger, ICourseStorage
|
||||
courseStorage)
|
||||
{
|
||||
_logger = logger;
|
||||
_courseStorage = courseStorage;
|
||||
}
|
||||
public List<CourseViewModel>? ReadList(CourseSearchModel? model)
|
||||
{
|
||||
_logger.LogInformation("ReadList. CourseName:{CourseName}.Id:{ Id}", model?.CourseName, model?.Id);
|
||||
var list = model == null ? _courseStorage.GetFullList() :
|
||||
_courseStorage.GetFilteredList(model);
|
||||
if (list == null)
|
||||
{
|
||||
_logger.LogWarning("ReadList return null list");
|
||||
return null;
|
||||
}
|
||||
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
|
||||
return list;
|
||||
}
|
||||
public CourseViewModel? ReadElement(CourseSearchModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
_logger.LogInformation("ReadElement. CourseName:{CourseName}.Id:{ Id}", model.CourseName, model.Id);
|
||||
var element = _courseStorage.GetElement(model);
|
||||
if (element == null)
|
||||
{
|
||||
_logger.LogWarning("ReadElement element not found");
|
||||
return null;
|
||||
}
|
||||
_logger.LogInformation("ReadElement find. Id:{Id}", element.Id);
|
||||
return element;
|
||||
}
|
||||
public bool Create(CourseBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_courseStorage.Insert(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Insert operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public bool Update(CourseBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_courseStorage.Update(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Update operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public bool Delete(CourseBindingModel model)
|
||||
{
|
||||
CheckModel(model, false);
|
||||
_logger.LogInformation("Delete. Id:{Id}", model.Id);
|
||||
if (_courseStorage.Delete(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Delete operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
private void CheckModel(CourseBindingModel model, bool withParams = true)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
if (!withParams)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.CourseName))
|
||||
{
|
||||
throw new ArgumentNullException("Нет названия направления!",
|
||||
nameof(model.CourseName));
|
||||
}
|
||||
_logger.LogInformation("Course. CourseName:{CourseName}. Id: { Id}", model.CourseName, model.Id);
|
||||
var element = _courseStorage.GetElement(new CourseSearchModel
|
||||
{
|
||||
CourseName = model.CourseName
|
||||
});
|
||||
if (element != null && element.Id != model.Id)
|
||||
{
|
||||
throw new InvalidOperationException("Направление с таким названием уже есть");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,112 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using StudentEnrollmentContracts.BindingModels;
|
||||
using StudentEnrollmentContracts.BusinessLogicContracts;
|
||||
using StudentEnrollmentContracts.SearchModels;
|
||||
using StudentEnrollmentContracts.StorageContracts;
|
||||
using StudentEnrollmentContracts.ViewModels;
|
||||
|
||||
namespace StudentEnrollmentBusinessLogic
|
||||
{
|
||||
public class ExamPointsLogic : IExamPointsLogic
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
private readonly IExamPointsStorage _examPointsStorage;
|
||||
public ExamPointsLogic(ILogger<ExamPointsLogic> logger, IExamPointsStorage
|
||||
examPointsStorage)
|
||||
{
|
||||
_logger = logger;
|
||||
_examPointsStorage = examPointsStorage;
|
||||
}
|
||||
public List<ExamPointsViewModel>? ReadList(ExamPointsSearchModel? model)
|
||||
{
|
||||
_logger.LogInformation("ReadList. Id:{ Id}", model?.Id);
|
||||
var list = model == null ? _examPointsStorage.GetFullList() :
|
||||
_examPointsStorage.GetFilteredList(model);
|
||||
if (list == null)
|
||||
{
|
||||
_logger.LogWarning("ReadList return null list");
|
||||
return null;
|
||||
}
|
||||
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
|
||||
return list;
|
||||
}
|
||||
public ExamPointsViewModel? ReadElement(ExamPointsSearchModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
_logger.LogInformation("ReadElement .Id:{ Id}", model.Id);
|
||||
var element = _examPointsStorage.GetElement(model);
|
||||
if (element == null)
|
||||
{
|
||||
_logger.LogWarning("ReadElement element not found");
|
||||
return null;
|
||||
}
|
||||
_logger.LogInformation("ReadElement find. Id:{Id}", element.Id);
|
||||
return element;
|
||||
}
|
||||
public bool Create(ExamPointsBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_examPointsStorage.Insert(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Insert operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public bool Update(ExamPointsBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_examPointsStorage.Update(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Update operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public bool Delete(ExamPointsBindingModel model)
|
||||
{
|
||||
CheckModel(model, false);
|
||||
_logger.LogInformation("Delete. Id:{Id}", model.Id);
|
||||
if (_examPointsStorage.Delete(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Delete operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
private void CheckModel(ExamPointsBindingModel model, bool withParams = true)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
if (!withParams)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (model.FirstExamPoints == 0)
|
||||
{
|
||||
throw new ArgumentNullException("Нет баллов за первый экзамен",
|
||||
nameof(model.FirstExamPoints));
|
||||
}
|
||||
if (model.SecondExamPoints == 0)
|
||||
{
|
||||
throw new ArgumentNullException("Нет баллов за второй экзамен",
|
||||
nameof(model.SecondExamPoints));
|
||||
}
|
||||
if (model.ThirdExamPoints == 0)
|
||||
{
|
||||
throw new ArgumentNullException("Нет баллов за третий экзамен",
|
||||
nameof(model.ThirdExamPoints));
|
||||
}
|
||||
_logger.LogInformation("ExamPoints. FirstExamPoints: {FirstExamPoints}. " +
|
||||
"SecondExamPoints: {SecondExamPoints}. ThirdExamPoints: {ThirdExamPoints}. AddPoints: {AddPoints}. Summary: {Summary}" +
|
||||
"Id: { Id}",
|
||||
model.FirstExamPoints, model.SecondExamPoints, model.ThirdExamPoints,
|
||||
model.AddPoints, model.Summary, model.Id);
|
||||
}
|
||||
}
|
||||
}
|
108
StudentEnrollment/StudentEnrollmentBusinessLogic/FacultyLogic.cs
Normal file
108
StudentEnrollment/StudentEnrollmentBusinessLogic/FacultyLogic.cs
Normal file
@ -0,0 +1,108 @@
|
||||
using StudentEnrollmentContracts.BusinessLogicContracts;
|
||||
using StudentEnrollmentContracts.StorageContracts;
|
||||
using StudentEnrollmentContracts.ViewModels;
|
||||
using StudentEnrollmentContracts.BindingModels;
|
||||
using StudentEnrollmentContracts.SearchModels;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace StudentEnrollmentBusinessLogic
|
||||
{
|
||||
public class FacultyLogic : IFacultyLogic
|
||||
{
|
||||
private readonly IFacultyStorage _facultyStorage;
|
||||
private readonly ILogger _logger;
|
||||
|
||||
public FacultyLogic(IFacultyStorage facultyStorage, ILogger logger)
|
||||
{
|
||||
_facultyStorage = facultyStorage;
|
||||
_logger = logger;
|
||||
}
|
||||
public List<FacultyViewModel>? ReadList(FacultySearchModel? model)
|
||||
{
|
||||
_logger.LogInformation("ReadList. FacultyName:{FacultyName}.Id:{ Id}", model?.FacultyName, model?.Id);
|
||||
var list = model == null ? _facultyStorage.GetFullList() :
|
||||
_facultyStorage.GetFilteredList(model);
|
||||
if (list == null)
|
||||
{
|
||||
_logger.LogWarning("ReadList return null list");
|
||||
return null;
|
||||
}
|
||||
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
|
||||
return list;
|
||||
}
|
||||
public FacultyViewModel? ReadElement(FacultySearchModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
_logger.LogInformation("ReadElement. FacultyName:{FacultyName}.Id:{ Id}", model.FacultyName, model.Id);
|
||||
var element = _facultyStorage.GetElement(model);
|
||||
if (element == null)
|
||||
{
|
||||
_logger.LogWarning("ReadElement element not found");
|
||||
return null;
|
||||
}
|
||||
_logger.LogInformation("ReadElement find. Id:{Id}", element.Id);
|
||||
return element;
|
||||
}
|
||||
public bool Create(FacultyBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_facultyStorage.Insert(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Insert operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public bool Update(FacultyBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_facultyStorage.Update(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Update operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Delete(FacultyBindingModel model)
|
||||
{
|
||||
CheckModel(model, false);
|
||||
_logger.LogInformation("Delete. Id:{Id}", model.Id);
|
||||
if (_facultyStorage.Delete(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Delete operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void CheckModel(FacultyBindingModel model, bool withParams = true)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
if (!withParams)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.FacultyName))
|
||||
{
|
||||
throw new ArgumentNullException("Нет названия факультета!",
|
||||
nameof(model.FacultyName));
|
||||
}
|
||||
_logger.LogInformation("Faculty. FacultyName:{FacultyName}. Id: { Id}", model.FacultyName, model.Id);
|
||||
var element = _facultyStorage.GetElement(new FacultySearchModel
|
||||
{
|
||||
FacultyName = model.FacultyName,
|
||||
}); ;
|
||||
if (element != null && element.Id != model.Id)
|
||||
{
|
||||
throw new InvalidOperationException("Факультет с таким же названием уже есть");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\StudentEnrollmentContracts\StudentEnrollmentContracts.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
119
StudentEnrollment/StudentEnrollmentBusinessLogic/StudentLogic.cs
Normal file
119
StudentEnrollment/StudentEnrollmentBusinessLogic/StudentLogic.cs
Normal file
@ -0,0 +1,119 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using StudentEnrollmentContracts.BindingModels;
|
||||
using StudentEnrollmentContracts.BusinessLogicContracts;
|
||||
using StudentEnrollmentContracts.SearchModels;
|
||||
using StudentEnrollmentContracts.StorageContracts;
|
||||
using StudentEnrollmentContracts.ViewModels;
|
||||
|
||||
namespace StudentEnrollmentBusinessLogic
|
||||
{
|
||||
public class StudentLogic : IStudentLogic
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
private readonly IStudentStorage _studentStorage;
|
||||
public StudentLogic(ILogger<StudentLogic> logger, IStudentStorage studentStorage)
|
||||
{
|
||||
_logger = logger;
|
||||
_studentStorage = studentStorage;
|
||||
}
|
||||
public List<StudentViewModel>? ReadList(StudentSearchModel? model)
|
||||
{
|
||||
_logger.LogInformation("ReadList. TIN: {TIN}. Id:{Id}", model?.TIN, model?.Id);
|
||||
var list = model == null ? _studentStorage.GetFullList() : _studentStorage.GetFilteredList(model);
|
||||
if (list == null)
|
||||
{
|
||||
_logger.LogWarning("ReadList return null list");
|
||||
return null;
|
||||
}
|
||||
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
|
||||
return list;
|
||||
}
|
||||
public StudentViewModel? ReadElement(StudentSearchModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
_logger.LogInformation("ReadList. TIN: {TIN}. Id:{Id}", model?.TIN, model.Id);
|
||||
var element = _studentStorage.GetElement(model);
|
||||
if (element == null)
|
||||
{
|
||||
_logger.LogWarning("ReadElement element not found");
|
||||
return null;
|
||||
}
|
||||
_logger.LogInformation("ReadElement find. Id:{Id}", element.Id);
|
||||
return element;
|
||||
}
|
||||
public bool Create(StudentBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_studentStorage.Insert(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Insert operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public bool Update(StudentBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_studentStorage.Update(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Update operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public bool Delete(StudentBindingModel model)
|
||||
{
|
||||
CheckModel(model, false);
|
||||
_logger.LogInformation("Delete. Id:{Id}", model.Id);
|
||||
if (_studentStorage.Delete(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Delete operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
private void CheckModel(StudentBindingModel model, bool withParams = true)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
if (!withParams)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.LastName))
|
||||
{
|
||||
throw new ArgumentNullException("Нет фамилии студента!", nameof(model.LastName));
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.FirstName))
|
||||
{
|
||||
throw new ArgumentNullException("Нет имени студента!", nameof(model.FirstName));
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.TIN))
|
||||
{
|
||||
throw new ArgumentNullException("Нет ИНН студента!", nameof(model.TIN));
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.Email))
|
||||
{
|
||||
throw new ArgumentNullException("Нет почты студента!", nameof(model.Email));
|
||||
}
|
||||
if (model.StudentCourse.Count == 0)
|
||||
{
|
||||
throw new ArgumentNullException("У студента должны быть баллы за экзамены!", nameof(model.StudentCourse));
|
||||
}
|
||||
_logger.LogInformation("Student. LastName: {LastName}, FirstName: {FirstName}, MiddleName: {MiddleName}, TIN: {TIN}, Email: {Email}, Id: {Id}", model.LastName, model.FirstName, model.MiddleName, model.TIN, model.Email, model.Id);
|
||||
var element = _studentStorage.GetElement(new StudentSearchModel
|
||||
{
|
||||
TIN = model.TIN
|
||||
});
|
||||
if (element != null && element.Id != model.Id)
|
||||
{
|
||||
throw new InvalidOperationException("Студент с таким ИНН уже есть");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
using StudentEnrollmentDataModels.Models;
|
||||
|
||||
namespace StudentEnrollmentContracts.BindingModels
|
||||
{
|
||||
public class CourseBindingModel : ICourseModel
|
||||
{
|
||||
public long Id { get; set; }
|
||||
public string CourseName { get; set; } = string.Empty;
|
||||
public string FacultyName { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
using StudentEnrollmentDataModels.Models;
|
||||
|
||||
namespace StudentEnrollmentContracts.BindingModels
|
||||
{
|
||||
public class ExamPointsBindingModel : IExamPointsModel
|
||||
{
|
||||
public long Id { get; set; }
|
||||
public int FirstExamPoints { get; set; }
|
||||
public int SecondExamPoints { get; set; }
|
||||
public int ThirdExamPoints { get; set; }
|
||||
public int AddPoints { get; set; } = 0;
|
||||
public int Summary { get; set; }
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
using StudentEnrollmentDataModels.Models;
|
||||
|
||||
namespace StudentEnrollmentContracts.BindingModels
|
||||
{
|
||||
public class FacultyBindingModel : IFacultyModel
|
||||
{
|
||||
public long Id { get; set; }
|
||||
public string FacultyName { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
using StudentEnrollmentDataModels.Models;
|
||||
|
||||
namespace StudentEnrollmentContracts.BindingModels
|
||||
{
|
||||
public class StudentBindingModel : IStudentModel
|
||||
{
|
||||
public long Id { get; set; }
|
||||
public string FirstName { get; set; } = string.Empty;
|
||||
public string LastName { get; set; } = string.Empty;
|
||||
public string MiddleName { get; set; } = string.Empty;
|
||||
public string Email { get; set; } = string.Empty;
|
||||
public string TIN { get; set; } = string.Empty;
|
||||
public long ExamPointsId { get; set; }
|
||||
public Dictionary<long, (ICourseModel, long)> StudentCourse
|
||||
{
|
||||
get;
|
||||
set;
|
||||
} = new();
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
using StudentEnrollmentContracts.BindingModels;
|
||||
using StudentEnrollmentContracts.SearchModels;
|
||||
using StudentEnrollmentContracts.ViewModels;
|
||||
|
||||
namespace StudentEnrollmentContracts.BusinessLogicContracts
|
||||
{
|
||||
public interface ICourseLogic
|
||||
{
|
||||
List<CourseViewModel>? ReadList(CourseSearchModel? model);
|
||||
CourseViewModel? ReadElement(CourseSearchModel model);
|
||||
bool Create(CourseBindingModel model);
|
||||
bool Update(CourseBindingModel model);
|
||||
bool Delete(CourseBindingModel model);
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
using StudentEnrollmentContracts.BindingModels;
|
||||
using StudentEnrollmentContracts.SearchModels;
|
||||
using StudentEnrollmentContracts.ViewModels;
|
||||
|
||||
namespace StudentEnrollmentContracts.BusinessLogicContracts
|
||||
{
|
||||
public interface IExamPointsLogic
|
||||
{
|
||||
List<ExamPointsViewModel>? ReadList(ExamPointsSearchModel? model);
|
||||
ExamPointsViewModel? ReadElement(ExamPointsSearchModel model);
|
||||
bool Create(ExamPointsBindingModel model);
|
||||
bool Update(ExamPointsBindingModel model);
|
||||
bool Delete(ExamPointsBindingModel model);
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
using StudentEnrollmentContracts.BindingModels;
|
||||
using StudentEnrollmentContracts.SearchModels;
|
||||
using StudentEnrollmentContracts.ViewModels;
|
||||
|
||||
namespace StudentEnrollmentContracts.BusinessLogicContracts
|
||||
{
|
||||
public interface IFacultyLogic
|
||||
{
|
||||
List<FacultyViewModel>? ReadList(FacultySearchModel? model);
|
||||
FacultyViewModel? ReadElement(FacultySearchModel model);
|
||||
bool Create(FacultyBindingModel model);
|
||||
bool Update(FacultyBindingModel model);
|
||||
bool Delete(FacultyBindingModel model);
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
using StudentEnrollmentContracts.BindingModels;
|
||||
using StudentEnrollmentContracts.SearchModels;
|
||||
using StudentEnrollmentContracts.ViewModels;
|
||||
|
||||
namespace StudentEnrollmentContracts.BusinessLogicContracts
|
||||
{
|
||||
public interface IStudentLogic
|
||||
{
|
||||
List<StudentViewModel>? ReadList(StudentSearchModel? model);
|
||||
StudentViewModel? ReadElement(StudentSearchModel model);
|
||||
bool Create(StudentBindingModel model);
|
||||
bool Update(StudentBindingModel model);
|
||||
bool Delete(StudentBindingModel model);
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
namespace StudentEnrollmentContracts.SearchModels
|
||||
{
|
||||
public class CourseSearchModel
|
||||
{
|
||||
public long? Id { get; set; }
|
||||
public string? CourseName { get; set; }
|
||||
}
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
namespace StudentEnrollmentContracts.SearchModels
|
||||
{
|
||||
public class ExamPointsSearchModel
|
||||
{
|
||||
public long? Id { get; set; }
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
namespace StudentEnrollmentContracts.SearchModels
|
||||
{
|
||||
public class FacultySearchModel
|
||||
{
|
||||
public long? Id { get; set; }
|
||||
public string? FacultyName { get; set; }
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
namespace StudentEnrollmentContracts.SearchModels
|
||||
{
|
||||
public class StudentSearchModel
|
||||
{
|
||||
public long? Id { get; set; }
|
||||
public string? TIN { get; set; }
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
using StudentEnrollmentContracts.BindingModels;
|
||||
using StudentEnrollmentContracts.SearchModels;
|
||||
using StudentEnrollmentContracts.ViewModels;
|
||||
|
||||
namespace StudentEnrollmentContracts.StorageContracts
|
||||
{
|
||||
public interface ICourseStorage
|
||||
{
|
||||
List<CourseViewModel> GetFullList();
|
||||
List<CourseViewModel> GetFilteredList(CourseSearchModel model);
|
||||
CourseViewModel? GetElement(CourseSearchModel model);
|
||||
CourseViewModel? Insert(CourseBindingModel model);
|
||||
CourseViewModel? Update(CourseBindingModel model);
|
||||
CourseViewModel? Delete(CourseBindingModel model);
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
using StudentEnrollmentContracts.BindingModels;
|
||||
using StudentEnrollmentContracts.SearchModels;
|
||||
using StudentEnrollmentContracts.ViewModels;
|
||||
|
||||
namespace StudentEnrollmentContracts.StorageContracts
|
||||
{
|
||||
public interface IExamPointsStorage
|
||||
{
|
||||
List<ExamPointsViewModel> GetFullList();
|
||||
List<ExamPointsViewModel> GetFilteredList(ExamPointsSearchModel model);
|
||||
ExamPointsViewModel? GetElement(ExamPointsSearchModel model);
|
||||
ExamPointsViewModel? Insert(ExamPointsBindingModel model);
|
||||
ExamPointsViewModel? Update(ExamPointsBindingModel model);
|
||||
ExamPointsViewModel? Delete(ExamPointsBindingModel model);
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
using StudentEnrollmentContracts.BindingModels;
|
||||
using StudentEnrollmentContracts.SearchModels;
|
||||
using StudentEnrollmentContracts.ViewModels;
|
||||
|
||||
namespace StudentEnrollmentContracts.StorageContracts
|
||||
{
|
||||
public interface IFacultyStorage
|
||||
{
|
||||
List<FacultyViewModel> GetFullList();
|
||||
List<FacultyViewModel> GetFilteredList(FacultySearchModel model);
|
||||
FacultyViewModel? GetElement(FacultySearchModel model);
|
||||
FacultyViewModel? Insert(FacultyBindingModel model);
|
||||
FacultyViewModel? Update(FacultyBindingModel model);
|
||||
FacultyViewModel? Delete(FacultyBindingModel model);
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
using StudentEnrollmentContracts.BindingModels;
|
||||
using StudentEnrollmentContracts.SearchModels;
|
||||
using StudentEnrollmentContracts.ViewModels;
|
||||
|
||||
namespace StudentEnrollmentContracts.StorageContracts
|
||||
{
|
||||
public interface IStudentStorage
|
||||
{
|
||||
List<StudentViewModel> GetFullList();
|
||||
List<StudentViewModel> GetFilteredList(StudentSearchModel model);
|
||||
StudentViewModel? GetElement(StudentSearchModel model);
|
||||
StudentViewModel? Insert(StudentBindingModel model);
|
||||
StudentViewModel? Update(StudentBindingModel model);
|
||||
StudentViewModel? Delete(StudentBindingModel model);
|
||||
}
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\StudentEnrollmentDataModels\StudentEnrollmentDataModels.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
@ -0,0 +1,14 @@
|
||||
using StudentEnrollmentDataModels.Models;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace StudentEnrollmentContracts.ViewModels
|
||||
{
|
||||
public class CourseViewModel : ICourseModel
|
||||
{
|
||||
public long Id { get; set; }
|
||||
[DisplayName("Название направления")]
|
||||
public string CourseName { get; set; } = string.Empty;
|
||||
[DisplayName("Название факультета")]
|
||||
public string FacultyName { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
using StudentEnrollmentDataModels.Models;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace StudentEnrollmentContracts.ViewModels
|
||||
{
|
||||
public class ExamPointsViewModel : IExamPointsModel
|
||||
{
|
||||
public long Id { get; set; }
|
||||
[DisplayName("Баллы за первый экзамен")]
|
||||
public int FirstExamPoints { get; set; }
|
||||
[DisplayName("Баллы за второй экзамен")]
|
||||
public int SecondExamPoints { get; set; }
|
||||
[DisplayName("Баллы за третий экзамен")]
|
||||
public int ThirdExamPoints { get; set; }
|
||||
[DisplayName("Дополнительные баллы")]
|
||||
public int AddPoints { get; set; } = 0;
|
||||
[DisplayName("Сумма баллов")]
|
||||
public int Summary { get; set; }
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
using StudentEnrollmentDataModels.Models;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace StudentEnrollmentContracts.ViewModels
|
||||
{
|
||||
public class FacultyViewModel : IFacultyModel
|
||||
{
|
||||
public long Id { get; set; }
|
||||
[DisplayName("Название факультета")]
|
||||
public string FacultyName { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
using StudentEnrollmentDataModels.Models;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace StudentEnrollmentContracts.ViewModels
|
||||
{
|
||||
public class StudentViewModel : IStudentModel
|
||||
{
|
||||
public long Id { get; set; }
|
||||
[DisplayName("Имя")]
|
||||
public string FirstName { get; set; } = string.Empty;
|
||||
[DisplayName("Фамилия")]
|
||||
public string LastName { get; set; } = string.Empty;
|
||||
[DisplayName("Отчество")]
|
||||
public string MiddleName { get; set; } = string.Empty;
|
||||
[DisplayName("Почта")]
|
||||
public string Email { get; set; } = string.Empty;
|
||||
[DisplayName("ИНН")]
|
||||
public string TIN { get; set; } = string.Empty;
|
||||
public long ExamPointsId { get; set; }
|
||||
[DisplayName("Суммарное количество баллов")]
|
||||
public int ExamPoints { get; set; }
|
||||
public Dictionary<long, (ICourseModel, long)> StudentCourse
|
||||
{
|
||||
get;
|
||||
set;
|
||||
} = new();
|
||||
}
|
||||
}
|
7
StudentEnrollment/StudentEnrollmentDataModels/IId.cs
Normal file
7
StudentEnrollment/StudentEnrollmentDataModels/IId.cs
Normal file
@ -0,0 +1,7 @@
|
||||
namespace StudentEnrollmentDataModels
|
||||
{
|
||||
public interface IId
|
||||
{
|
||||
long Id { get; }
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
namespace StudentEnrollmentDataModels.Models
|
||||
{
|
||||
public interface ICourseModel : IId
|
||||
{
|
||||
string CourseName { get; }
|
||||
string FacultyName { get; }
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
namespace StudentEnrollmentDataModels.Models
|
||||
{
|
||||
public interface IExamPointsModel : IId
|
||||
{
|
||||
int FirstExamPoints { get; }
|
||||
int SecondExamPoints { get; }
|
||||
int AddPoints { get; }
|
||||
int Summary { get; }
|
||||
}
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
namespace StudentEnrollmentDataModels.Models
|
||||
{
|
||||
public interface IFacultyModel : IId
|
||||
{
|
||||
string FacultyName { get; }
|
||||
}
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
namespace StudentEnrollmentDataModels.Models
|
||||
{
|
||||
public interface IStudentModel : IId
|
||||
{
|
||||
string LastName { get; }
|
||||
string FirstName { get; }
|
||||
string MiddleName { get; }
|
||||
string Email { get; }
|
||||
string TIN { get; }
|
||||
long ExamPointsId { get; }
|
||||
Dictionary<long, (ICourseModel, long)> StudentCourse { get; }
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
@ -0,0 +1,9 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
19
StudentEnrollment/StudentEnrollmentView/Program.cs
Normal file
19
StudentEnrollment/StudentEnrollmentView/Program.cs
Normal file
@ -0,0 +1,19 @@
|
||||
namespace StudentEnrollmentView
|
||||
{
|
||||
internal static class Program
|
||||
{
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
// To customize application configuration such as set high DPI settings or default font,
|
||||
// see https://aka.ms/applicationconfiguration.
|
||||
ApplicationConfiguration.Initialize();
|
||||
Application.Run(new Form1());
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<TargetFramework>net7.0-windows</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
Loading…
x
Reference in New Issue
Block a user