feat(api): фильтр шаблонов по статусу синхронизации

This commit is contained in:
Mikhail Trubnikov
2025-12-12 10:45:20 +10:00
parent 03683a13d3
commit 87a317e878
2 changed files with 45 additions and 0 deletions

View File

@@ -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
/// </summary>
public TemplateStatusTypeEnum? StatusTypeId { get; set; }
/// <summary>
/// Статус синхронизации шаблонов и расписаний
/// </summary>
public TemplateQuerySyncStatusEnum? SyncStatus { get; set; }
}
/// <summary>
/// Статус синхронизации шаблонов и расписаний
/// </summary>
[JsonConverter(typeof(JsonStringEnumConverter))]
public enum TemplateQuerySyncStatusEnum
{
/// <summary>
/// Ожидает синхронизации
/// </summary>
Waiting = 0,
/// <summary>
/// Выполнена синхронизация
/// </summary>
Complete = 1,
/// <summary>
/// Ошибка синхронизации
/// </summary>
Error = 2
}
}

View File

@@ -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())