2021-04-03 23:46:48 +04:00
using DatabaseCore ;
using DatabaseCore.Models.Department ;
using DepartmentBusinessLogic.BindingModels ;
using DepartmentBusinessLogic.Interfaces ;
using DepartmentBusinessLogic.ViewModels ;
using Microsoft.EntityFrameworkCore ;
using ModuleTools.Enums ;
using ModuleTools.Models ;
using System ;
using System.Linq ;
namespace DepartmentDatabaseImplementation.Implementations
{
/// <summary>
/// Реализация ILecturerService
/// </summary>
2021-04-05 12:25:10 +04:00
public class LecturerService :
AbstractGenerticEntityService < LecturerGetBindingModel , LecturerSetBindingModel , Lecturer , LecturerListViewModel , LecturerViewModel > ,
ILecturerService
2021-04-03 23:46:48 +04:00
{
2021-04-05 12:25:10 +04:00
protected override OperationResultModel AdditionalCheckingWhenAdding ( DbContext context , LecturerSetBindingModel model ) = > OperationResultModel . Success ( null ) ;
2021-04-03 23:46:48 +04:00
2021-04-05 12:25:10 +04:00
protected override OperationResultModel AdditionalCheckingWhenDeleting ( DbContext context , Lecturer entity , LecturerGetBindingModel model )
2021-04-03 23:46:48 +04:00
{
2021-04-05 12:25:10 +04:00
if ( entity . User = = null )
2021-04-03 23:46:48 +04:00
{
2021-04-05 12:25:10 +04:00
return OperationResultModel . Error ( "Error:" , "Н е найден пользователь от сотрудника" , ResultServiceStatusCode . NotFound ) ;
2021-04-03 23:46:48 +04:00
}
2021-04-05 14:20:07 +04:00
if ( context . Set < EducationDirection > ( ) . Any ( x = > x . LecturerId = = model . Id & & ! x . IsDeleted ) )
{
return OperationResultModel . Error ( "Error:" , "Есть направления обучения, у которых этот преподаватель указан руководителем" , ResultServiceStatusCode . ExsistItem ) ;
}
2021-04-05 12:25:10 +04:00
return OperationResultModel . Success ( null ) ; ;
2021-04-03 23:46:48 +04:00
}
2021-04-05 12:25:10 +04:00
protected override IQueryable < Lecturer > AdditionalCheckingWhenReadingList ( IQueryable < Lecturer > query , LecturerGetBindingModel model )
2021-04-03 23:46:48 +04:00
{
2021-04-05 12:25:10 +04:00
if ( model . UserId . HasValue )
2021-04-03 23:46:48 +04:00
{
query = query . Where ( x = > x . UserId = = model . UserId ) ;
}
if ( model . LecturerAcademicDegreeId . HasValue )
{
query = query . Where ( x = > x . LecturerAcademicDegreeId = = model . LecturerAcademicDegreeId ) ;
}
if ( model . LecturerAcademicRankId . HasValue )
{
query = query . Where ( x = > x . LecturerAcademicRankId = = model . LecturerAcademicRankId ) ;
}
2021-04-05 12:25:10 +04:00
return query ;
2021-04-03 23:46:48 +04:00
}
2021-04-05 12:25:10 +04:00
protected override OperationResultModel AdditionalCheckingWhenUpdateing ( DbContext context , LecturerSetBindingModel model ) = > OperationResultModel . Success ( null ) ;
protected override void AdditionalDeleting ( DbContext context , Lecturer entity , LecturerGetBindingModel model )
2021-04-03 23:46:48 +04:00
{
2021-04-05 12:25:10 +04:00
entity . User . IsDeleted = true ;
entity . User . DateDelete = DateTime . Now ;
2021-04-03 23:46:48 +04:00
2021-04-05 12:25:10 +04:00
context . SaveChanges ( ) ;
var links = context . Set < LecturerPost > ( ) . Where ( x = > x . LecturerId = = model . Id ) ;
foreach ( var link in links )
2021-04-03 23:46:48 +04:00
{
2021-04-05 12:25:10 +04:00
link . IsDeleted = true ;
link . DateDelete = DateTime . Now ;
2021-04-03 23:46:48 +04:00
}
context . SaveChanges ( ) ;
2021-04-05 12:25:10 +04:00
}
2021-04-03 23:46:48 +04:00
2021-04-05 12:25:10 +04:00
protected override Lecturer GetUniqueEntity ( LecturerSetBindingModel model , DbContext context ) = > context . Set < Lecturer > ( ) . FirstOrDefault ( x = > x . LastName = = model . LastName & & x . FirstName = = model . FirstName & &
x . Patronymic = = model . Patronymic & & x . Id ! = model . Id ) ;
protected override IQueryable < Lecturer > IncludingWhenReading ( IQueryable < Lecturer > query )
{
return query
. Include ( x = > x . LecturerAcademicRank )
. Include ( x = > x . LecturerAcademicDegree )
. Include ( x = > x . LecturerPosts ) . Include ( "LecturerPosts.Post" ) ;
2021-04-03 23:46:48 +04:00
}
2021-04-05 12:25:10 +04:00
protected override IQueryable < Lecturer > OrderingWhenReading ( IQueryable < Lecturer > query ) = > query
. OrderByDescending ( x = > x . LecturerPosts . Max ( y = > y . Post . Order ) )
. ThenBy ( x = > x . LecturerAcademicRank . Order )
. ThenBy ( x = > x . LecturerAcademicDegree . Order )
. ThenBy ( x = > x . LastName )
. ThenBy ( x = > x . FirstName ) ;
2021-04-03 23:46:48 +04:00
}
}