feat(dal,api): IMatchingStatusService - управление статусами matcher`a. Отображение статусов в АПИ, нельзя повторно из апи отправить задание мэтчеру если сейчас идет matching

This commit is contained in:
Mikhail Trubnikov
2026-01-16 11:04:26 +10:00
parent 3205c1db8e
commit 99a491ede8
14 changed files with 303 additions and 91 deletions

View File

@@ -14,6 +14,7 @@ using PARR.API.Services.Interfaces;
using PARR.Constants;
using PARR.DAL.Contracts;
using PARR.DAL.DomainModels;
using PARR.DAL.DomainServices.Interfaces;
using PARR.DAL.Models;
using PARR.DAL.Models.Job;
using PARR.DAL.Services.Interfaces;
@@ -36,6 +37,7 @@ namespace PARR.API.Controllers.V1
private readonly IValidator<JobGroupRequest> validator;
private readonly IJobGroupTypeService jobGroupTypeService;
private readonly SettingsFromDb settingsFromDb;
private readonly IMatchingStatusService matchingStatusService;
public JobGroupController(
ILogger<JobController> logger,
@@ -46,7 +48,8 @@ namespace PARR.API.Controllers.V1
IEsppSchTypeConfigService esppConfigService,
IValidator<JobGroupRequest> validator,
IJobGroupTypeService jobGroupTypeService,
SettingsFromDb settingsFromDb
SettingsFromDb settingsFromDb,
IMatchingStatusService matchingStatusService
)
{
this.logger = logger;
@@ -58,6 +61,7 @@ namespace PARR.API.Controllers.V1
this.validator = validator;
this.jobGroupTypeService = jobGroupTypeService;
this.settingsFromDb = settingsFromDb;
this.matchingStatusService = matchingStatusService;
}
@@ -366,7 +370,7 @@ namespace PARR.API.Controllers.V1
/// <summary>
/// Заполнить поля планировщика
/// Заполнить обязательные поля
/// </summary>
/// <param name="jobGroupResponse"></param>
/// <returns></returns>
@@ -390,6 +394,8 @@ namespace PARR.API.Controllers.V1
jobGroupResponse.Schedule = scheduleResponse;
jobGroupResponse.JobsCount = await jobService.Get().CountAsync(t => t.GroupId == jobGroupResponse.Id);
jobGroupResponse.MatchingStatus = await GetMatchingStatusAsync(jobGroupResponse.Id);
}
@@ -419,5 +425,18 @@ namespace PARR.API.Controllers.V1
return null;
}
}
/// <summary>
/// Получить статус matching`a
/// </summary>
/// <param name="jobGroupId"></param>
/// <returns></returns>
private async Task<MatchingStatusResponse?> GetMatchingStatusAsync(Guid jobGroupId)
{
var statusMatching = await matchingStatusService.GetStatusAsync(jobGroupId, SyncTaskEntityTypeEnum.JobGroup);
return mapper.Map<MatchingStatusResponse>(statusMatching);
}
}
}