feat(api, nextRun): при изменении расписания в jobGroup, отправляется запрос на обновление nextRun в связанных шаблонах.

This commit is contained in:
Mikhail Trubnikov
2026-02-27 16:37:52 +10:00
parent 10bf68709b
commit a4f8e9eccc
9 changed files with 162 additions and 32 deletions

View File

@@ -0,0 +1,70 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using PARR.API.Contracts.V1;
using PARR.API.Contracts.V1.Responses.Base;
using PARR.API.Controllers.V1.Base;
using PARR.API.Settings;
using PARR.BLL.Domain.Mq;
using PARR.BLL.Services.Interfaces;
using PARR.Common.Domain;
using PARR.Constants;
using PARR.DAL.Services.Interfaces.Job;
using Serilog.Core;
namespace PARR.API.Controllers.V1
{
/// <summary>
/// Пересчитать все nextRun для JobGroup
/// </summary>
[Authorize(Roles = ParrRoles.Administrator.Role)]
public class JobGroupUpdateNextRunController : BaseApiController
{
private readonly IMqService mqService;
private readonly MqSettings mqSettings;
private readonly IJobGroupService jobGroupService;
public JobGroupUpdateNextRunController(
IMqService mqService,
MqSettings mqSettings,
IJobGroupService jobGroupService
)
{
this.mqService = mqService;
this.mqSettings = mqSettings;
this.jobGroupService = jobGroupService;
}
/// <summary>
/// Обновить nextRun для всех шаблонах в JobGroup
/// </summary>
/// <returns></returns>
[HttpPost(ApiRoutes.JobGroupUpdateNextRun.UpdateNextRun)]
public async Task<IActionResult> UpdateNextRun([FromRoute] Guid jobGroupId)
{
var jobGroup = await jobGroupService.Get().AnyAsync(t => t.Id == jobGroupId);
if (!jobGroup)
return BadRequest(new Response<string?>(null, false, new List<ErrorModel> { new ErrorModel { Message = "Не найдена группа работ с ИД" } }));
var requestToMq = new NextRunUpdateMq
{
JobGroupId = jobGroupId,
Initiator = new HistoryInitiator
{
InitiatorComment = "Вручную отправлен запрос на обновление nextRun для группы работ",
InitiatorParrComponentId = ParrComponentsEnum.Api
}
};
var sendResult = await mqService.SendAsync(mqSettings.NextRun, new List<object> { requestToMq });
if (sendResult.IsSuccess)
return Created("", new Response<string?>(null, true, new List<ErrorModel>(), "Отправлен запрос на расчет nextRun для группы работ."));
else
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = "Ошибка при отправке данных." } }));
}
}
}