diff --git a/PARR.API/Contracts/V1/Requests/Queries/TemplateQuery.cs b/PARR.API/Contracts/V1/Requests/Queries/TemplateQuery.cs index ce7bc843..a80721b6 100644 --- a/PARR.API/Contracts/V1/Requests/Queries/TemplateQuery.cs +++ b/PARR.API/Contracts/V1/Requests/Queries/TemplateQuery.cs @@ -1,4 +1,5 @@ using PARR.Constants; +using System.Text.Json.Serialization; namespace PARR.API.Contracts.V1.Requests.Queries { @@ -24,5 +25,30 @@ namespace PARR.API.Contracts.V1.Requests.Queries /// StatusType /// public TemplateStatusTypeEnum? StatusTypeId { get; set; } + + /// + /// Статус синхронизации шаблонов и расписаний + /// + public TemplateQuerySyncStatusEnum? SyncStatus { get; set; } + } + + /// + /// Статус синхронизации шаблонов и расписаний + /// + [JsonConverter(typeof(JsonStringEnumConverter))] + public enum TemplateQuerySyncStatusEnum + { + /// + /// Ожидает синхронизации + /// + Waiting = 0, + /// + /// Выполнена синхронизация + /// + Complete = 1, + /// + /// Ошибка синхронизации + /// + Error = 2 } } diff --git a/PARR.API/Controllers/V1/TemplateController.cs b/PARR.API/Controllers/V1/TemplateController.cs index 99bd201f..91b6078a 100644 --- a/PARR.API/Controllers/V1/TemplateController.cs +++ b/PARR.API/Controllers/V1/TemplateController.cs @@ -79,6 +79,25 @@ namespace PARR.API.Controllers.V1 if (filter.StatusTypeId.HasValue) query = query.Where(t => t.StatusTypeId == filter.StatusTypeId); + #region Статус синхронизации + + switch (filter.SyncStatus) + { + case (TemplateQuerySyncStatusEnum.Waiting): + query = query.Where(t => t.RobotConfigurations.Any(x => x.TaskStatusCode != (int)TaskStatusEnum.Ok)); + break; + case (TemplateQuerySyncStatusEnum.Complete): + query = query.Where(t => t.RobotConfigurations.All(x => x.TaskStatusCode == (int)TaskStatusEnum.Ok)); + break; + case (TemplateQuerySyncStatusEnum.Error): + query = query.Where(t => t.RobotConfigurations.Any(x => x.RobotStatusCode == (int)RobotStatusEnum.Error)); + break; + default: + break; + } + + #endregion + var templates = await templateService.GetPage(query, paginationFilter).ToListAsync(); if (!templates.Any())