diff --git a/PARR.API/Contracts/V1/Responses/ApplicationInWorkResponse.cs b/PARR.API/Contracts/V1/Responses/ApplicationInWorkResponse.cs deleted file mode 100644 index 3f1525bb..00000000 --- a/PARR.API/Contracts/V1/Responses/ApplicationInWorkResponse.cs +++ /dev/null @@ -1,102 +0,0 @@ -namespace PARR.API.Contracts.V1.Responses -{ - public class ApplicationInWorkBaseResponse - { - public Guid Id { get; set; } - - public required string TemplateDuration { get; set; } - - public required string ShortDescription { get; set; } - - public required string FullDescription { get; set; } - - public required string Solution { get; set; } - - public DateTimeOffset ReferenceDate { get; set; } - - public bool IsAutoDistributionEnabled { get; set; } - - public bool IsAgent { get; set; } - - public ApplicationResponse? Application { get; set; } - } - - - public class ApplicationInWorkResponse : ApplicationInWorkBaseResponse - { - public string? AgentName { get; set; } - - public int? AgentTimeOutSec { get; set; } - - public string? AgentScript { get; set; } - - //public WorkResponse? Work { get; set; } - - public int TemplatesCount { get; set; } - - - #region Статистика - - public TemplateStats? TemplateStatistics { get; set; } - - public ScheduleStats? ScheduleStatistics { get; set; } - - #endregion - - - public ApplicationInWorkScheduleResponse? Schedule { get; set; } - - public List? WorkGroups { get; set; } - - //public JobAutoControlBaseResponse? AutoControl { get; set; } - } - - - public class ApplicationInWorkScheduleResponse - { - public string Timezone { get; set; } = string.Empty; - - public EsppScheduleTypeScheduleResponse? TypeSchedule { get; set; } - - public List? Values { get; set; } - } - - - //public class TemplateStats - //{ - // /// - // /// Активированных шаблонов - // /// - // public int Activated { get; set; } - - // /// - // /// Синхронизировано шаблонов (TaskStatus = 30/Ok) - // /// - // public int Synchronized { get; set; } - - // /// - // /// Ошибок синхронизации (RobotStatus = 33/Error) - // /// - // public int Errors { get; set; } - //} - - - //public class ScheduleStats - //{ - // /// - // /// Активированных шаблонов - // /// - // public int Activated { get; set; } - - // /// - // /// Синхронизировано шаблонов (TaskStatus = 30/Ok) - // /// - // public int Synchronized { get; set; } - - // /// - // /// Ошибок синхронизации (RobotStatus = 33/Error) - // /// - // public int Errors { get; set; } - //} - -} diff --git a/PARR.API/Contracts/V1/Responses/ApplicationResponse.cs b/PARR.API/Contracts/V1/Responses/ApplicationResponse.cs deleted file mode 100644 index ee875e91..00000000 --- a/PARR.API/Contracts/V1/Responses/ApplicationResponse.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace PARR.API.Contracts.V1.Responses -{ - public class ApplicationResponse - { - public Guid Id { get; set; } - - public required string Name { get; set; } - - public ApplicationTypeResponse? Type { get; set; } - } -} diff --git a/PARR.API/Contracts/V1/Responses/ApplicationTypeResponse.cs b/PARR.API/Contracts/V1/Responses/ApplicationTypeResponse.cs deleted file mode 100644 index 01510c9e..00000000 --- a/PARR.API/Contracts/V1/Responses/ApplicationTypeResponse.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace PARR.API.Contracts.V1.Responses -{ - public class ApplicationTypeResponse - { - public Guid Id { get; set; } - - public required string Name { get; set; } - - public required string Description { get; set; } - } -} diff --git a/PARR.API/Contracts/V1/Responses/EkStatusResponse.cs b/PARR.API/Contracts/V1/Responses/EkStatusResponse.cs deleted file mode 100644 index 70bb144d..00000000 --- a/PARR.API/Contracts/V1/Responses/EkStatusResponse.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace PARR.API.Contracts.V1.Responses -{ - public class EkStatusResponse - { - public int Code { get; set; } - public required string Name { get; set; } - } -} diff --git a/PARR.API/Contracts/V1/Responses/HostBaseResponse.cs b/PARR.API/Contracts/V1/Responses/HostBaseResponse.cs deleted file mode 100644 index 8bdc1744..00000000 --- a/PARR.API/Contracts/V1/Responses/HostBaseResponse.cs +++ /dev/null @@ -1,43 +0,0 @@ -namespace PARR.API.Contracts.V1.Responses -{ - public class HostBaseResponse - { - public Guid Id { get; set; } - - public string Ek { get; set; } = string.Empty; - - public required string IP { get; set; } - - //TODO: Удалить поле Status, использовать EkStatus - public string? Status { get; set; } - - public EkStatusResponse? EkStatus { get; set; } - - public string? WorkGroupName { get; set; } - - public WorkGroupResponse? WorkGroup { get; set; } - - //TODO: Удалить поле ResponseArea, использовать EkResponseArea - public string? ResponseArea { get; set; } - - public ResponseAreaResponse? EkResponseArea { get; set; } - - public DateTimeOffset? LastLogon { get; set; } - } - - /// - /// Респонс Хоста для Шаблона - /// - public class HostTemplateResponse : HostBaseResponse - { - - } - - /// - /// Респонс Хоста с приложениями (компнентном составе) - /// - public class HostWithApplicationsResponse : HostBaseResponse - { - public List? Applications { get; set; } - } -} diff --git a/PARR.API/Contracts/V1/Responses/ResponseAreaResponse.cs b/PARR.API/Contracts/V1/Responses/ResponseAreaResponse.cs deleted file mode 100644 index e25a8277..00000000 --- a/PARR.API/Contracts/V1/Responses/ResponseAreaResponse.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace PARR.API.Contracts.V1.Responses -{ - public class ResponseAreaResponse - { - public int Code { get; set; } - - public required string Name { get; set; } - } -} diff --git a/PARR.API/Contracts/V1/Responses/Statistics/StatResponseAreaWorkLoadResponse.cs b/PARR.API/Contracts/V1/Responses/Statistics/StatResponseAreaWorkLoadResponse.cs index fa0cacf5..5df79513 100644 --- a/PARR.API/Contracts/V1/Responses/Statistics/StatResponseAreaWorkLoadResponse.cs +++ b/PARR.API/Contracts/V1/Responses/Statistics/StatResponseAreaWorkLoadResponse.cs @@ -2,6 +2,6 @@ { public class StatResponseAreaWorkLoadResponse : StatWorkLoadDataBaseResponse { - public required ResponseAreaResponse ResponseArea { get; set; } + //public required ResponseAreaResponse ResponseArea { get; set; } } } diff --git a/PARR.API/Contracts/V1/Responses/Statistics/StatWorkGroupWorkLoadResponse.cs b/PARR.API/Contracts/V1/Responses/Statistics/StatWorkGroupWorkLoadResponse.cs index db75dd45..9cf20874 100644 --- a/PARR.API/Contracts/V1/Responses/Statistics/StatWorkGroupWorkLoadResponse.cs +++ b/PARR.API/Contracts/V1/Responses/Statistics/StatWorkGroupWorkLoadResponse.cs @@ -2,6 +2,6 @@ { public class StatWorkGroupWorkLoadResponse : StatWorkLoadDataBaseResponse { - public required WorkGroupResponse WorkGroup { get; set; } + //public required WorkGroupResponse WorkGroup { get; set; } } } diff --git a/PARR.API/Contracts/V1/Responses/Statistics/StatWorkWorkLoadResponse.cs b/PARR.API/Contracts/V1/Responses/Statistics/StatWorkWorkLoadResponse.cs index 02676a3d..9764fc66 100644 --- a/PARR.API/Contracts/V1/Responses/Statistics/StatWorkWorkLoadResponse.cs +++ b/PARR.API/Contracts/V1/Responses/Statistics/StatWorkWorkLoadResponse.cs @@ -2,8 +2,8 @@ { public class StatWorkWorkLoadResponse : StatWorkLoadDataBaseResponse { - public required ApplicationInWorkBaseResponse Job { get; set; } + //public required ApplicationInWorkBaseResponse Job { get; set; } - public required WorkGroupResponse WorkGroup { get; set; } + //public required WorkGroupResponse WorkGroup { get; set; } } } diff --git a/PARR.API/Contracts/V1/Responses/WorkGroupResponse.cs b/PARR.API/Contracts/V1/Responses/WorkGroupResponse.cs deleted file mode 100644 index 64b85509..00000000 --- a/PARR.API/Contracts/V1/Responses/WorkGroupResponse.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace PARR.API.Contracts.V1.Responses -{ - public class WorkGroupResponse - { - public Guid Id { get; set; } - - public required string Name { get; set; } - - public ResponseAreaResponse? ResponseArea { get; set; } - } -} diff --git a/PARR.API/Controllers/V1/ApplicationController.cs b/PARR.API/Controllers/V1/ApplicationController.cs deleted file mode 100644 index aaaf9f69..00000000 --- a/PARR.API/Controllers/V1/ApplicationController.cs +++ /dev/null @@ -1,73 +0,0 @@ -using AutoMapper; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using Microsoft.EntityFrameworkCore; -using PARR.API.Contracts.V1; -using PARR.API.Contracts.V1.Requests.Queries; -using PARR.API.Contracts.V1.Responses; -using PARR.API.Contracts.V1.Responses.Base; -using PARR.API.Controllers.V1.Base; -using PARR.API.Extensions; -using PARR.DAL.Models; -using PARR.DAL.Services.Interfaces; -using PARR.Domain.Common.Pagination; -using PARR.Domain.Common.Roles; - -namespace PARR.API.Controllers.V1 -{ - /// - /// Управление приложениями - /// - - [Authorize(Roles = ParrRoles.Administrator.Role)] - public class ApplicationController : BaseApiController - { - private readonly IMapper mapper; - private readonly IApplicationService applicationService; - - public ApplicationController( - IMapper mapper, - IApplicationService applicationService - ) - { - this.mapper = mapper; - this.applicationService = applicationService; - } - - - /// - /// Список приложений постранично - /// - /// - /// - [HttpGet(ApiRoutes.Application.GetAll)] - public async Task GetAll([FromQuery] PaginationQuery paginationQuery, [FromQuery] ApplicationQuery filter) - { - var paginationFilter = mapper.Map(paginationQuery); - - IQueryable query = applicationService.Get() - .Include(t => t.ApplicationType) - .OrderBy(t => t.Name); - - if (!string.IsNullOrWhiteSpace(filter.Name)) - query = query.Where(t => t.Name.ToLower().Contains(filter.Name.ToLower())); - - if (filter.TypeId.HasValue) - query = query.Where(t => t.ApplicationTypeId == filter.TypeId); - - if (filter.Id.HasValue) - query = query.Where(t => t.Id == filter.Id); - - - var apps = await applicationService.GetPage(query, paginationFilter).ToListAsync(); - - if (!apps.Any()) - return NoContent(); - - var appsResponse = mapper.Map>(apps); - var paginationResponse = new PagedResponse(appsResponse, true).GetPaginatedProps(paginationFilter, query); - - return Ok(paginationResponse); - } - } -} diff --git a/PARR.API/Controllers/V1/ApplicationTypeController.cs b/PARR.API/Controllers/V1/ApplicationTypeController.cs deleted file mode 100644 index a1acc4ee..00000000 --- a/PARR.API/Controllers/V1/ApplicationTypeController.cs +++ /dev/null @@ -1,53 +0,0 @@ -using AutoMapper; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using Microsoft.EntityFrameworkCore; -using PARR.API.Contracts.V1; -using PARR.API.Contracts.V1.Responses; -using PARR.API.Contracts.V1.Responses.Base; -using PARR.API.Controllers.V1.Base; -using PARR.DAL.Services.Interfaces; -using PARR.Domain.Common.Roles; - -namespace PARR.API.Controllers.V1 -{ - /// - /// Управление типами приложений - /// - - [Authorize(Roles = ParrRoles.Administrator.Role)] - public class ApplicationTypeController : BaseApiController - { - private readonly IMapper mapper; - private readonly IApplicationTypeService applicationTypeService; - - public ApplicationTypeController( - IMapper mapper, - IApplicationTypeService applicationTypeService - ) - { - this.mapper = mapper; - this.applicationTypeService = applicationTypeService; - } - - - /// - /// Список типов приложений - /// - /// - [HttpGet(ApiRoutes.ApplicationType.GetAll)] - public async Task GetAll() - { - var appTypes = await applicationTypeService.Get().OrderBy(t => t.Description) - .ToListAsync(); - - if (!appTypes.Any()) - return NoContent(); - - var response = mapper.Map>(appTypes); - - return Ok(new Response>(response, true)); - } - - } -} diff --git a/PARR.API/Controllers/V1/EkStatusController.cs b/PARR.API/Controllers/V1/EkStatusController.cs deleted file mode 100644 index 2d05ef68..00000000 --- a/PARR.API/Controllers/V1/EkStatusController.cs +++ /dev/null @@ -1,51 +0,0 @@ -using AutoMapper; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using Microsoft.EntityFrameworkCore; -using PARR.API.Contracts.V1; -using PARR.API.Contracts.V1.Responses; -using PARR.API.Contracts.V1.Responses.Base; -using PARR.API.Controllers.V1.Base; -using PARR.DAL.Services.Interfaces; -using PARR.Domain.Common.Roles; - -namespace PARR.API.Controllers.V1 -{ - /// - /// Статусы ЭК - /// - [Authorize(Roles = ParrRoles.Administrator.Role)] - public class EkStatusController : BaseApiController - { - private readonly IEkStatusService ekStatusService; - private readonly IMapper mapper; - - public EkStatusController( - IEkStatusService ekStatusService, - IMapper mapper - ) - { - this.ekStatusService = ekStatusService; - this.mapper = mapper; - } - - - /// - /// Получить список статусов ЭК - /// - /// млни - [HttpGet(ApiRoutes.EkStatus.GetAll)] - public async Task GetAll() - { - var statuses = await ekStatusService.Get().OrderBy(t => t.Name).ToListAsync(); - - if (!statuses.Any()) - return NoContent(); - - var response = mapper.Map>(statuses); - - return Ok(new Response>(response, true)); - } - - } -} diff --git a/PARR.API/Controllers/V1/ResponseAreaController.cs b/PARR.API/Controllers/V1/ResponseAreaController.cs deleted file mode 100644 index a96b93f2..00000000 --- a/PARR.API/Controllers/V1/ResponseAreaController.cs +++ /dev/null @@ -1,71 +0,0 @@ -using AutoMapper; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using Microsoft.EntityFrameworkCore; -using PARR.API.Contracts.V1; -using PARR.API.Contracts.V1.Responses; -using PARR.API.Contracts.V1.Responses.Base; -using PARR.API.Controllers.V1.Base; -using PARR.DAL.Services.Interfaces; -using PARR.Domain.Common.Roles; - -namespace PARR.API.Controllers.V1 -{ - /// - /// Зоны ответственности - /// - [Authorize(Roles = ParrRoles.Administrator.Role)] - public class ResponseAreaController : BaseApiController - { - private readonly IMapper mapper; - private readonly IResponseAreaService responseAreaService; - - public ResponseAreaController( - IMapper mapper, - IResponseAreaService responseAreaService - ) - { - this.mapper = mapper; - this.responseAreaService = responseAreaService; - } - - - /// - /// Список зон ответственности - /// - /// - [HttpGet(ApiRoutes.ResponseArea.GetAll)] - public async Task GetAll() - { - var query = responseAreaService.Get().OrderBy(t => t.Name); - - var responseAreas = await query.ToListAsync(); - - if (!responseAreas.Any()) - return NoContent(); - - var response = mapper.Map>(responseAreas); - - return Ok(new Response>(response, true)); - } - - - /// - /// Получить зону ответственности по коду - /// - /// - /// - [HttpGet(ApiRoutes.ResponseArea.Get)] - public async Task Get([FromRoute] int responseAreaCode) - { - var responseArea = await responseAreaService.Get().FirstOrDefaultAsync(t => t.Code == responseAreaCode); - - if (responseArea == null) - return NotFound(); - - var response = mapper.Map(responseArea); - - return Ok(new Response(response, true)); - } - } -} diff --git a/PARR.API/Controllers/V1/Statistics/StatResponseAreaWorkLoadController.cs b/PARR.API/Controllers/V1/Statistics/StatResponseAreaWorkLoadController.cs index 45a1d759..cfe23499 100644 --- a/PARR.API/Controllers/V1/Statistics/StatResponseAreaWorkLoadController.cs +++ b/PARR.API/Controllers/V1/Statistics/StatResponseAreaWorkLoadController.cs @@ -22,19 +22,19 @@ namespace PARR.API.Controllers.V1.Statistics public class StatResponseAreaWorkLoadController : BaseApiController { private readonly ITemplateService templateService; - private readonly IResponseAreaService responseAreaService; + //private readonly IResponseAreaService responseAreaService; private readonly IMapper mapper; private readonly IWorkLoadService workLoadService; public StatResponseAreaWorkLoadController( ITemplateService templateService, - IResponseAreaService responseAreaService, + //IResponseAreaService responseAreaService, IMapper mapper, IWorkLoadService workLoadService ) { this.templateService = templateService; - this.responseAreaService = responseAreaService; + //this.responseAreaService = responseAreaService; this.mapper = mapper; this.workLoadService = workLoadService; } diff --git a/PARR.API/Controllers/V1/Statistics/StatUnitFieldValuesController.cs b/PARR.API/Controllers/V1/Statistics/StatUnitFieldValuesController.cs index b8ab7e9d..e24fe476 100644 --- a/PARR.API/Controllers/V1/Statistics/StatUnitFieldValuesController.cs +++ b/PARR.API/Controllers/V1/Statistics/StatUnitFieldValuesController.cs @@ -19,20 +19,20 @@ namespace PARR.API.Controllers.V1.Statistics [Authorize(Roles = ParrRoles.Administrator.Role)] public class StatUnitFieldValuesController : BaseApiController { - private readonly IApplicationService applicationService; + //private readonly IApplicationService applicationService; private readonly IUnitFieldValueService unitFieldValueService; private readonly INextRunService nextRunService; //private readonly ICalendarService calendarService; public StatUnitFieldValuesController( - IApplicationService applicationService, + //IApplicationService applicationService, IUnitFieldValueService unitFieldValueService, //ICalendarService calendarService INextRunService nextRunService ) { - this.applicationService = applicationService; + //this.applicationService = applicationService; this.unitFieldValueService = unitFieldValueService; this.nextRunService = nextRunService; //this.calendarService = calendarService; diff --git a/PARR.API/Controllers/V1/Statistics/StatWorkGroupWorkLoadController.cs b/PARR.API/Controllers/V1/Statistics/StatWorkGroupWorkLoadController.cs index 3a894297..5d3d1f6d 100644 --- a/PARR.API/Controllers/V1/Statistics/StatWorkGroupWorkLoadController.cs +++ b/PARR.API/Controllers/V1/Statistics/StatWorkGroupWorkLoadController.cs @@ -20,21 +20,21 @@ namespace PARR.API.Controllers.V1.Statistics { private readonly ITemplateService templateService; private readonly IWorkLoadService workLoadService; - private readonly IWorkGroupService workGroupService; + //private readonly IWorkGroupService workGroupService; private readonly IMapper mapper; private readonly ILogger logger; public StatWorkGroupWorkLoadController( ITemplateService templateService, IWorkLoadService workLoadService, - IWorkGroupService workGroupService, + //IWorkGroupService workGroupService, IMapper mapper, ILogger logger ) { this.templateService = templateService; this.workLoadService = workLoadService; - this.workGroupService = workGroupService; + //this.workGroupService = workGroupService; this.mapper = mapper; this.logger = logger; } diff --git a/PARR.API/Controllers/V1/Statistics/StatWorkWorkLoadController.cs b/PARR.API/Controllers/V1/Statistics/StatWorkWorkLoadController.cs index 7342ddac..81a9290a 100644 --- a/PARR.API/Controllers/V1/Statistics/StatWorkWorkLoadController.cs +++ b/PARR.API/Controllers/V1/Statistics/StatWorkWorkLoadController.cs @@ -23,21 +23,21 @@ namespace PARR.API.Controllers.V1.Statistics private readonly IWorkLoadService workLoadService; private readonly IMapper mapper; private readonly ILogger logger; - private readonly IWorkGroupService workGroupService; + //private readonly IWorkGroupService workGroupService; public StatWorkWorkLoadController( ITemplateService templateService, IWorkLoadService workLoadService, IMapper mapper, - ILogger logger, - IWorkGroupService workGroupService + ILogger logger + //IWorkGroupService workGroupService ) { this.templateService = templateService; this.workLoadService = workLoadService; this.mapper = mapper; this.logger = logger; - this.workGroupService = workGroupService; + //this.workGroupService = workGroupService; } diff --git a/PARR.API/Controllers/V1/WorkGroupController.cs b/PARR.API/Controllers/V1/WorkGroupController.cs deleted file mode 100644 index e91c2d47..00000000 --- a/PARR.API/Controllers/V1/WorkGroupController.cs +++ /dev/null @@ -1,95 +0,0 @@ -using AutoMapper; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using Microsoft.EntityFrameworkCore; -using PARR.API.Contracts.V1; -using PARR.API.Contracts.V1.Requests.Queries; -using PARR.API.Contracts.V1.Responses; -using PARR.API.Contracts.V1.Responses.Base; -using PARR.API.Controllers.V1.Base; -using PARR.API.Extensions; -using PARR.DAL.Contracts; -using PARR.DAL.Models; -using PARR.DAL.Services.Interfaces; -using PARR.Domain.Common.Pagination; -using PARR.Domain.Common.Roles; -using PARR.Domain.Enums; - -namespace PARR.API.Controllers.V1 -{ - /// - /// Рабочие группы - /// - [Authorize(Roles = ParrRoles.Administrator.Role)] - public class WorkGroupController : BaseApiController - { - private readonly IMapper mapper; - private readonly IWorkGroupService workGroupService; - - public WorkGroupController( - IMapper mapper, - IWorkGroupService workGroupService - ) - { - this.mapper = mapper; - this.workGroupService = workGroupService; - } - - - /// - /// Список рабочих групп постранично - /// - /// - [HttpGet(ApiRoutes.WorkGroup.GetAll)] - public async Task GetAll([FromQuery] PaginationQuery paginationQuery, [FromQuery] WorkGroupQuery filter) - { - var paginationFilter = mapper.Map(paginationQuery); - - IQueryable query = workGroupService.Get() - .Include(t => t.ResponseArea) - .OrderBy(t => t.Name); - - if (!string.IsNullOrEmpty(filter.Name)) - query = query.Where(t => t.Name.ToLower().Contains(filter.Name.ToLower())); - - if (filter.ResponseAreaCode.HasValue) - { - //todo: validate ResponseAreaEnum - if (!Enum.IsDefined(typeof(ResponseAreaEnum), filter.ResponseAreaCode.Value)) - return BadRequest(new Response(false, new List { new ErrorModel { FieldName = nameof(filter.ResponseAreaCode), Message = "Неверное значение" } })); - - query = query.Where(t => t.ResponseAreaCode == filter.ResponseAreaCode.Value); - } - - var workGroups = await workGroupService.GetPage(query, paginationFilter).ToListAsync(); - - if (!workGroups.Any()) - return NoContent(); - - var workGroupResponse = mapper.Map>(workGroups); - var paginationResponse = new PagedResponse(workGroupResponse, true).GetPaginatedProps(paginationFilter, query); - - return Ok(paginationResponse); - } - - - /// - /// Получить рабочую группу по id - /// - /// - /// - [HttpGet(ApiRoutes.WorkGroup.Get)] - public async Task Get([FromRoute] Guid id) - { - var workGroup = await workGroupService.Get().Include(t => t.ResponseArea).FirstOrDefaultAsync(t => t.Id == id); - - if (workGroup == null) - return NotFound(); - - var response = mapper.Map(workGroup); - - return Ok(new Response(response, true)); - } - - } -} diff --git a/PARR.API/MappingProfiles/DomainToResponseProfile.cs b/PARR.API/MappingProfiles/DomainToResponseProfile.cs index 92b652c7..540564be 100644 --- a/PARR.API/MappingProfiles/DomainToResponseProfile.cs +++ b/PARR.API/MappingProfiles/DomainToResponseProfile.cs @@ -106,31 +106,6 @@ namespace PARR.API.MappingProfiles #endregion - - CreateMap() - .ForMember(t => t.Type, o => o.MapFrom(s => s.ApplicationType)); - - CreateMap(); - - #region Host - - CreateMap() - .Include() - .Include() - .ForMember(d => d.Status, o => o.MapFrom(s => s.EkStatus!.Name)) - .ForMember(d => d.EkStatus, o => o.MapFrom(s => s.EkStatus)) - .ForMember(d => d.ResponseArea, o => o.MapFrom(s => s.ResponseArea!.Name)) - .ForMember(d => d.WorkGroupName, o => o.MapFrom(s => s.WorkGroup!.Name)) - .ForMember(d => d.WorkGroup, o => o.MapFrom(s => s.WorkGroup)) - .ForMember(d => d.EkResponseArea, o => o.MapFrom(s => s.ResponseArea)); - - CreateMap(); - - CreateMap() - .ForMember(d => d.Applications, o => o.MapFrom(s => s.ApplicationsInHosts.Select(t => t.Application).OrderBy(t => t.Name))); - - #endregion - #region Unit CreateMap(); @@ -181,12 +156,6 @@ namespace PARR.API.MappingProfiles //)); #endregion - #region WorkGroup - - CreateMap(); - - #endregion - #region Robot CreateMap(); @@ -423,29 +392,6 @@ namespace PARR.API.MappingProfiles #endregion - //#region JobAutoControl - - //CreateMap() - // .Include(); - - //CreateMap() - // .ForMember(d => d.EkMasks, o => o.MapFrom(s => s.JobEkMasks.OrderBy(t => t.Name))) - // .ForMember(d => d.EnabledEkStatuses, o => o.MapFrom(s => s.JobAutoControlInEkStatuses.Select(t => t.EkStatus).OrderBy(t => t.Name))) - // .ForMember(d => d.WorkGroups, o => o.MapFrom(s => s.ApplicationsInWork!.WorkGroups.Select(t => t.WorkGroup).OrderBy(t => t.Name))); - - - //#endregion - - #region ResponseArea - CreateMap(); - #endregion - - //CreateMap(); - - - CreateMap(); - - CreateMap(); #region TemplateHistory diff --git a/PARR.API/MappingProfiles/Resolvers/ApplicationInWorkScheduleResolver.cs b/PARR.API/MappingProfiles/Resolvers/ApplicationInWorkScheduleResolver.cs deleted file mode 100644 index c56493d2..00000000 --- a/PARR.API/MappingProfiles/Resolvers/ApplicationInWorkScheduleResolver.cs +++ /dev/null @@ -1,54 +0,0 @@ -using AutoMapper; -using PARR.API.Contracts.V1.Responses; -using PARR.DAL.Contracts; -using PARR.DAL.Models; -using PARR.DAL.Services.Interfaces; -using PARR.DAL.Services.Interfaces.Schedule; - -namespace PARR.API.MappingProfiles.Resolvers -{ - public class ApplicationInWorkScheduleResolver : IValueResolver - { - private readonly IEsppSchTypeConfigService esppConfigService; - private readonly ILogger logger; - private readonly IMapper mapper; - private readonly SettingsFromDb settingsFromDb; - private readonly IScheduleResponseAreaTimeOffsetService scheduleResponseAreaTimeOffsetService; - - public ApplicationInWorkScheduleResolver( - IEsppSchTypeConfigService esppConfigService, - ILogger logger, - IMapper mapper, - SettingsFromDb settingsFromDb, - IScheduleResponseAreaTimeOffsetService scheduleResponseAreaTimeOffsetService - ) - { - this.esppConfigService = esppConfigService; - this.logger = logger; - this.mapper = mapper; - this.settingsFromDb = settingsFromDb; - this.scheduleResponseAreaTimeOffsetService = scheduleResponseAreaTimeOffsetService; - } - - public ApplicationInWorkScheduleResponse? Resolve(ApplicationsInWork source, ApplicationInWorkResponse destination, ApplicationInWorkScheduleResponse? destMember, ResolutionContext context) - { - var schedule = esppConfigService.GetEsppScheduleDto(source.Id); - - if (schedule == null) - { - logger.LogError($"ApplicationInWorkScheduleResolver: Не смог замапить расписание, так как оно null. appInWorksId: {source.Id}"); - return null; - } - - var response = new ApplicationInWorkScheduleResponse - { - //Timezone = settingsFromDb.ScheduleTimezone, - Timezone = scheduleResponseAreaTimeOffsetService.GetDefault.EsppValue, - TypeSchedule = mapper.Map(schedule.TypeSchedule), - Values = mapper.Map>(schedule.Values).OrderBy(t => t.Order).ToList() - }; - - return response; - } - } -} diff --git a/PARR.API/Validators/ApplicationInWorkValidator.cs b/PARR.API/Validators/ApplicationInWorkValidator.cs deleted file mode 100644 index 4917573c..00000000 --- a/PARR.API/Validators/ApplicationInWorkValidator.cs +++ /dev/null @@ -1,230 +0,0 @@ -using FluentValidation; -using Microsoft.EntityFrameworkCore; -using Newtonsoft.Json.Linq; -using PARR.API.Contracts.V1.Requests; -using PARR.DAL.Services.Interfaces; - -namespace PARR.API.Validators -{ - public class ApplicationInWorkValidator : AbstractValidator - { - private readonly IApplicationsInWorkService applicationsInWorkService; - private readonly IEsppSchTypeConfigService esppSchTypeConfigService; - private readonly IWorkGroupService workGroupService; - private readonly IEsppSchTypeValueService esppSchTypeValueService; - - public ApplicationInWorkValidator( - IApplicationsInWorkService applicationsInWorkService, - IEsppSchTypeConfigService esppSchTypeConfigService, - IWorkGroupService workGroupService, - IEsppSchTypeValueService esppSchTypeValueService - ) - { - this.applicationsInWorkService = applicationsInWorkService; - this.esppSchTypeConfigService = esppSchTypeConfigService; - this.workGroupService = workGroupService; - this.esppSchTypeValueService = esppSchTypeValueService; - - RuleFor(t => t.TemplateDuration) - .NotNull().NotEmpty()//.WithMessage("Длительность данного задания на выполнение работ не может быть пустым") - .Matches("^\\d{1,2}\\s\\d{1,2}[:]\\d{1,2}[:]\\d{1,2}$") - //.WithMessage("Длительность данного задания на выполнение работ должна соответствовать шаблону dd hh:mm:ss(7 00:00:00)"); - .WithMessage("Значение не соответствует шаблону dd hh:mm:ss(7 00:00:00)"); - - RuleFor(t => t.ShortDescription) - .NotNull().NotEmpty();//.WithMessage("Краткое описание данного задания на выполнение работ не может быть пустым"); - - RuleFor(t => t.FullDescription) - .NotNull().NotEmpty();//.WithMessage("Подробное описание данного задания на выполнение работ не может быть пустым"); - - RuleFor(t => t.Solution) - .NotNull().NotEmpty();//.WithMessage("Решение данного задания на выполнение работ не может быть пустым"); - - RuleFor(t => t.WorkId) - .MustAsync(async (entity, value, c) => await IsWorkExist(entity)) - .WithMessage("Указан несуществующий Id работы"); - //.WithMessage("У данного задания на выполнение работ указан несуществующий Id работы"); - - RuleFor(t => t.ApplicationId) - .MustAsync(async (entity, value, c) => await IsApplicationExist(entity)) - .WithMessage("Указан несуществующий Id программного обеспечения"); - //.MustAsync(async (entity, value, c) => await AppInWorkIsUnique(entity)) - // .WithMessage("Задание на выполнение работ с такими ПО и работой уже существует"); - //.WithMessage("У данного задания на выполнение работ указан несуществующий Id программного обеспечения"); - - - - #region old schedule - //Проверяем настройки планировщика - //RuleFor(t => t.Schedule).NotNull().NotEmpty() - // .WithMessage("Настройки планировщика задания на выполнение работ не могут быть пустыми"); - - //RuleFor(t => t.Schedule.EsppSchValues) - // .NotNull().NotEmpty() - // .When(t => t.Schedule != null) - // .WithMessage("Настройки планировщика задания на выполнение работ не могут быть пустыми") - // .Must((entity, value, c) => IsEsppSchValuesExist(entity)) - // .WithMessage("Не удалось найти подходящую конфигруцию планировщика задания на выполнение работ"); - #endregion - - //RuleFor(t => t.Schedule) - // .NotNull().NotEmpty() - // .When(t => t.Schedule.Count() > 0) - // .WithMessage("Настройки планировщика не могут быть пустыми") - // .Must((entity, value, c) => IsEsppSchValuesExist(entity.Schedule)) - // .WithMessage("Не удалось найти подходящую конфигруцию планировщика задания"); - - #region comment - - //RuleFor(t => t.Schedule.Values) - // .NotNull().NotEmpty().WithMessage($"Настройки значений планировщика задания на выполнение работ не могут быть пустыми") - // .Must((entity, value, c) => IsScheduleTypeValueIdExist(entity)) - // .When(t => t.Schedule != null).WithMessage("Не удалось найти подходящую конфигруцию планировщика задания на выполнение работ"); - - //RuleFor(t => t.Schedule.TypeScheduleId) - // .NotNull().NotEmpty().WithMessage($"Тип планировщика задания на выполнение работ не может быть пустым") - // .Must((entity, value, c) => IsTypeScheduleIdExist(entity)) - // .When(t => t.Schedule != null).WithMessage($"Не удалось найти указанный тип планировщика задания на выполнение работ"); - - //RuleFor(t => t.Schedule.Values) - // .NotNull().NotEmpty().WithMessage($"Настройки значений планировщика задания на выполнение работ не могут быть пустыми") - // .Must((entity, value, c) => IsScheduleTypeValueIdExist(entity)) - // .When(t => t.Schedule != null).WithMessage("Не удалось найти подходящую конфигруцию планировщика задания на выполнение работ"); - - #endregion - - - RuleFor(t => t.WorkGroups) - .MustAsync(async (entity, value, c) => await IsWorkGroupsExistAsync(entity)) - .WithMessage("Указаные несуществующие Id рабочих групп"); - - - //Автораспределение может быть включено, только если у EsppSchTypeValues не пустое поле DistributionPeriodId - RuleFor(t => t.IsAutoDistributionEnabled) - .MustAsync(async (entity, value, c) => await IsAllowAutoDistributionEnabledAsync(entity, value)) - .WithMessage("Нельзя включить автораспределение для этого типа расписания"); - } - - - private async Task IsAllowAutoDistributionEnabledAsync(ApplicationInWorkRequest entity, bool value)//TODO JobGroupRequest - { - //Автораспределение может быть включено, только если у EsppSchTypeValues не пустое поле DistributionPeriodId - - if (value == false) - return true; - - //Распределение включено, смотрим, разрешено ли оно в расписании - //по идее, это расписание только с одним значением в EsppSchValues, но мы проверим у всех, но такого быть не может по хорошему - //foreach (var item in entity.Schedule) - //{ - // var schVal = await esppSchTypeValueService.GetAsync(item.TypeValueId); - // if (schVal != null) - // if (schVal.DistributionPeriodId == null) - // return false; - //} - - return true; - } - - - private async Task IsWorkGroupsExistAsync(ApplicationInWorkRequest entity) - { - var result = await workGroupService.Get().Where(t => entity.WorkGroups.Contains(t.Id)).ToListAsync(); - - return entity.WorkGroups.Count() == result.Count(); - } - - //private bool IsEsppSchValuesExist(ApplicationInWorkRequest request) - private bool IsEsppSchValuesExist(List listSchedule) - { - var configs = esppSchTypeConfigService.GetWithSchIncludes().ToList(); - - //Проверяем полученные Id конфигураций и Id конфигураций в базе - var typeConfigIdList = listSchedule.Select(t => t.TypeConfigId); - var foundTypeConfigIdList = configs.Where(t => typeConfigIdList.Contains(t.Id)).Distinct(); - - if (foundTypeConfigIdList.Count() == 0 //Не найдено совпадений с базой - || foundTypeConfigIdList.Select(t => t.TypeScheduleId).Distinct().Count() > 1) //или имеют разный тип планировщика - return false; - - var typeScheduleId = foundTypeConfigIdList.Select(t => t.TypeScheduleId).FirstOrDefault(); - - if (foundTypeConfigIdList.Count() != configs.Where(t => t.TypeScheduleId == typeScheduleId).Count()) //не все typeConfig найдены в базе - return false; - - //Теперь проверяем значения - foreach (var item in listSchedule) - { - var curTypeConfig = configs.Where(t => t.Id == item.TypeConfigId).Single(); - - var isCurValueExist = curTypeConfig!.EsppSchType!.EsppSchTypeValues.Where(t => t.Id == item.TypeValueId).Any(); - - if (!isCurValueExist) - return false; - } - - return true; - } - - //private async Task AppInWorkIsUnique(ApplicationInWorkRequest request) - //{ - // //уникальная запись по полям ApplicationId, WorkId - - // var existSameAiW = await applicationsInWorkService.GetAsync(request.ApplicationId, request.WorkId); - - // //TODO: тут спорно, нужна ли эта проверка? Мы же можем создать несколько РР на одно и тоже ПО но с разным расписанием? - // //к тому же, в методе update, такой проверки нет! - // //if (existSameAiW != null) - // // return BadRequest(new Response(false, new List { - // // new ErrorModel { Message = $"Уже существует задание на выполнение работ для программного обеспечения id({request.ApplicationId}) и работой id({request.WorkId})." } } - // // )); - - // return existSameAiW == null; - //} - - private async Task IsWorkExist(ApplicationInWorkRequest request) - { - //return await workService.GetAsync(request.WorkId) != null; - return true; - } - - - private async Task IsApplicationExist(ApplicationInWorkRequest request) - { - //return await workService.GetAsync(request.WorkId) != null; - return true; - } - - - //private bool IsTypeScheduleIdExist(ApplicationInWorkRequest request) - //{ - // var configs = esppSchTypeConfigService.GetWithSchIncludes().ToList(); - //var result = configs.Where(t => t.TypeId == request.Schedule.TypeScheduleId).FirstOrDefault() != null; - //return result; - // return false; - //} - - - //private bool IsScheduleTypeValueIdExist(ApplicationInWorkRequest request) - //{ - // var configs = esppSchTypeConfigService.GetWithSchIncludes().ToList(); - - // var mustValues = configs.Where(t => t.TypeScheduleId == request.Schedule.TypeScheduleId).ToList(); - // var values = request.Schedule.Values; - - // foreach (var mustValue in mustValues) - // { - // var mlValues = mustValue?.EsppSchType?.EsppSchTypeValues.Select(t => t.Id); - - // if (mlValues == null) - // return false; - - // if (!mlValues.Intersect(values).Any()) - // return false; - // } - - // return true; - //} - - } -} diff --git a/PARR.DAL/Context/DataContext.cs b/PARR.DAL/Context/DataContext.cs index bf2b5b6b..ad35b452 100644 --- a/PARR.DAL/Context/DataContext.cs +++ b/PARR.DAL/Context/DataContext.cs @@ -16,14 +16,14 @@ namespace PARR.DAL.Context { public DataContext(DbContextOptions options) : base(options) { } - public DbSet Hosts { get; set; } - public DbSet WorkGroups { get; set; } - public DbSet AppInWorkInWorkGroups { get; set; } - public DbSet EkStatuses { get; set; } - public DbSet ResponseAreas { get; set; } - public DbSet Applications { get; set; } - public DbSet ApplicationTypes { get; set; } - public DbSet ApplicationsInHosts { get; set; } + //public DbSet Hosts { get; set; } + //public DbSet WorkGroups { get; set; } + //public DbSet AppInWorkInWorkGroups { get; set; } + //public DbSet EkStatuses { get; set; } + //public DbSet ResponseAreas { get; set; } + //public DbSet Applications { get; set; } + //public DbSet ApplicationTypes { get; set; } + //public DbSet ApplicationsInHosts { get; set; } public DbSet