оплата у психолога не прошла, продолжаем делать

This commit is contained in:
1234 2024-04-30 23:42:53 +04:00
parent 755acc02a9
commit 4a9bd06926
5 changed files with 281 additions and 2 deletions

View File

@ -7,9 +7,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "University", "University\Un
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UniversityDataModels", "UniversityDataModels\UniversityDataModels.csproj", "{213B879D-95E6-4554-8C05-DF591E9006FF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversityContracts", "UniversityContracts\UniversityContracts.csproj", "{AC1D090C-E5C5-412C-88F7-139A64F6C58C}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UniversityContracts", "UniversityContracts\UniversityContracts.csproj", "{AC1D090C-E5C5-412C-88F7-139A64F6C58C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversityBusinessLogics", "UniversityBusinessLogics\UniversityBusinessLogics.csproj", "{EAB93F1E-4582-493D-8E4A-2EF5C02D20BB}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UniversityBusinessLogics", "UniversityBusinessLogics\UniversityBusinessLogics.csproj", "{EAB93F1E-4582-493D-8E4A-2EF5C02D20BB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversityDatabaseImplement", "UniversityDatabaseImplement\UniversityDatabaseImplement.csproj", "{F0442491-14CD-42ED-B684-4BE30D5A1FEE}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -33,6 +35,10 @@ Global
{EAB93F1E-4582-493D-8E4A-2EF5C02D20BB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EAB93F1E-4582-493D-8E4A-2EF5C02D20BB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EAB93F1E-4582-493D-8E4A-2EF5C02D20BB}.Release|Any CPU.Build.0 = Release|Any CPU
{F0442491-14CD-42ED-B684-4BE30D5A1FEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F0442491-14CD-42ED-B684-4BE30D5A1FEE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F0442491-14CD-42ED-B684-4BE30D5A1FEE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F0442491-14CD-42ED-B684-4BE30D5A1FEE}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -0,0 +1,115 @@
using System.Security.Cryptography.X509Certificates;
using UniversityContracts.BindingModels;
using UniversityContracts.SearchModels;
using UniversityContracts.StoragesContracts;
using UniversityContracts.ViewModels;
using UniversityDatabaseImplement.Models;
using Microsoft.EntityFrameworkCore;
namespace UniversityDatabaseImplement.Implements
{
public class ClientStorage : IClientStorage
{
private void CheckSearchModel(ClientSearchModel model)
{
if (model == null)
throw new ArgumentNullException("Передаваемая модель для поиска равна нулю", nameof(model));
if (!model.Id.HasValue && !model.DirectorId.HasValue && model.DisciplinesIds == null)
throw new ArgumentException("Все передаваемые поля поисковой модели оказались пусты или равны null");
}
public ClientViewModel? Delete(ClientBindingModel model)
{
using var context = new UniversityDB();
var element = context.Clients.FirstOrDefault(x => x.Id == model.Id);
if (element != null)
{
context.Clients.Remove(element);
context.SaveChanges();
return element;
}
return null;
}
public ClientViewModel? GetElement(ClientSearchModel model)
{
CheckSearchModel(model);
if (!model.Id.HasValue)
{
return null;
}
using var context = new UniversityDB();
return context.Clients
.Include(x => x.Director)
.FirstOrDefault(x => model.Id.HasValue && x.Id == model.Id);
}
public List<ClientViewModel> GetFilteredList(ClientSearchModel model)
{
CheckSearchModel(model);
if (model.Id.HasValue)
{
var res = GetElement(model);
return res != null ? new() { res } : new();
}
using var context = new UniversityDB();
// Запрос на получения клиентов с счетовами за период производится в сущности счетова,
// что позволяет избежать ненужный join или пост обработки запроса
// Включаем работника для view-model
var query = context.Clients.Include(x => x.Director);
if (model.DirectorId.HasValue)
{
// Нет необходимости включать счетову для отчета, поэтому включаем только сотрудника
return query
.Where(x => model.DirectorId == x.DirectorId)
.Select(x => (ClientViewModel)x)
.ToList();
}
// Выбираем клиента из списка айдишников дисциплин на посещения
if (model.DisciplinesIds != null)
return query
.Include(x => x.Disciplines)!
.ThenInclude(x => x.Discipline)
.ThenInclude(x => x.Client)
.Where(x => x.Disciplines.Any(y => model.DisciplinesIds.Contains(y.DisciplineId)))
.Select(x => (ClientViewModel)x)
.ToList();
return new();
}
public List<ClientViewModel> GetFullList()
{
using var context = new UniversityDB();
return context.Clients.Include(x => x.Director)
.Select(x => (ClientViewModel)x)
.ToList();
}
public ClientViewModel? Insert(ClientBindingModel model)
{
var newClient = Client.Create(model);
if (newClient == null)
{
return null;
}
using var context = new UniversityDB();
context.Clients.Add(newClient);
context.SaveChanges();
return newClient;
}
public ClientViewModel? Update(ClientBindingModel model)
{
using var context = new UniversityDB();
var Client = context.Clients.FirstOrDefault(x => x.Id == model.Id);
if (Client == null)
{
return null;
}
Client.Update(model);
context.SaveChanges();
return Client;
}
}
}

View File

@ -0,0 +1,39 @@
using UniversityContracts.BindingModels;
using UniversityContracts.SearchModels;
using UniversityContracts.StoragesContracts;
using UniversityContracts.ViewModels;
using UniversityDatabaseImplement.Models;
namespace UniversityDatabaseImplement.Implements
{
public class DirectorStorage : IDirectorStorage
{
private void CheckSearchModel(DirectorSearchModel model)
{
if (model == null)
throw new ArgumentNullException("Передаваемая модель для поиска равна нулю", nameof(model));
if (!model.Id.HasValue && string.IsNullOrEmpty(model.Login) && string.IsNullOrEmpty(model.Password))
throw new ArgumentException("Все передаваемые поля поисковой модели оказались пусты или равны null");
}
public DirectorViewModel? GetElement(DirectorSearchModel model)
{
CheckSearchModel(model);
using var context = new UniversityDB();
// возможность поиска только по логину для проверки на уникальность, или поиска по логина и паролю
return context.Directors
.FirstOrDefault(x => x.Login.Equals(model.Login) && (string.IsNullOrEmpty(model.Password) || x.Password.Equals(model.Password)));
}
public DirectorViewModel? Insert(DirectorBindingModel model)
{
if (model == null)
{
return null;
}
var newDirector = Director.Create(model);
using var context = new UniversityDB();
context.Directors.Add(newDirector);
context.SaveChanges();
return newDirector;
}
}
}

View File

@ -0,0 +1,96 @@
using UniversityContracts.BindingModels;
using UniversityContracts.SearchModels;
using UniversityContracts.StoragesContracts;
using UniversityContracts.ViewModels;
using UniversityDatabaseImplement.Models;
using Microsoft.EntityFrameworkCore;
namespace UniversityDatabaseImplement.Implements
{
public class RequirementStorage : IRequirementStorage
{
private void CheckSearchModel(RequirementSearchModel model)
{
if (model == null)
throw new ArgumentNullException("Передаваемая модель для поиска равна нулю", nameof(model));
if (!model.Id.HasValue && !model.DirectorId.HasValue)
throw new ArgumentException("Все передаваемые поля поисковой модели оказались пусты или равны null");
}
public RequirementViewModel? Delete(RequirementBindingModel model)
{
using var context = new UniversityDB();
var element = context.Requirements.FirstOrDefault(x => x.Id == model.Id);
if (element != null)
{
context.Requirements.Remove(element);
context.SaveChanges();
return element;
}
return null;
}
public RequirementViewModel? GetElement(RequirementSearchModel model)
{
CheckSearchModel(model);
using var context = new UniversityDB();
if (!model.Id.HasValue)
{
return null;
}
return context.Requirements
.Include(requirement => requirement.Director)
.Include(requirement => requirement.Disciplines).ThenInclude(requirementByDiscipline => requirementByDiscipline.Discipline)
.FirstOrDefault(x => model.Id.HasValue && x.Id == model.Id);
}
public List<RequirementViewModel> GetFilteredList(RequirementSearchModel model)
{
CheckSearchModel(model);
using var context = new UniversityDB();
return context.Requirements
.Include(requirement => requirement.Director)
.Include(requirement => requirement.Disciplines).ThenInclude(requirementByDiscipline => requirementByDiscipline.Discipline)
.Where(x => x.DirectorId == model.DirectorId)
.Select(x => (RequirementViewModel)x)
.ToList();
}
public List<RequirementViewModel> GetFullList()
{
using var context = new UniversityDB();
return context.Requirements
.Include(requirement => requirement.Director)
.Include(requirement => requirement.Disciplines).ThenInclude(requirementByDiscipline => requirementByDiscipline.Discipline)
.Select(x => (RequirementViewModel)x)
.ToList();
}
public RequirementViewModel? Insert(RequirementBindingModel model)
{
var newRequirement = Requirement.Create(model);
if (newRequirement == null)
{
return null;
}
using var context = new UniversityDB();
// Согласно тз при создании требований не требуется связывать ее с дисциплиными, поэтому нет UpdateDisciplines
context.Requirements.Add(newRequirement);
context.SaveChanges();
return newRequirement;
}
public RequirementViewModel? Update(RequirementBindingModel model)
{
using var context = new UniversityDB();
var requirement = context.Requirements.FirstOrDefault(x => x.Id == model.Id);
if (requirement == null)
{
return null;
}
requirement.Update(model);
context.SaveChanges();
requirement.UpdateDisciplines(context, model);
context.SaveChanges();
return requirement;
}
}
}

View File

@ -0,0 +1,23 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\UniversityContracts\UniversityContracts.csproj" />
<ProjectReference Include="..\UniversityDataModels\UniversityDataModels.csproj" />
</ItemGroup>
</Project>