feat(dal,templateUpdater): Сохранение шаблонов для переименования в таблицу TemplateRenamePending
This commit is contained in:
@@ -3,10 +3,13 @@ using Microsoft.Extensions.Logging;
|
||||
using PARR.Core.Extensions;
|
||||
using PARR.Core.Repositories.Interfaces;
|
||||
using PARR.Core.Repositories.Interfaces.JobRepositories;
|
||||
using PARR.Core.Repositories.Interfaces.TemplateRepositories;
|
||||
using PARR.Core.Repositories.Interfaces.Unit;
|
||||
using PARR.Core.Services.NextRunServices;
|
||||
using PARR.Domain.Common.Rabbit.Messages.TemplateMatching;
|
||||
using PARR.Domain.Entities;
|
||||
using PARR.Domain.Entities.JobEntities;
|
||||
using PARR.Domain.Entities.TemplateEntities;
|
||||
using PARR.Domain.Enums;
|
||||
|
||||
namespace PARR.TemplateUpdater.Services
|
||||
@@ -20,6 +23,7 @@ namespace PARR.TemplateUpdater.Services
|
||||
private readonly IRobotConfigurationRepository robotConfigurationService;
|
||||
private readonly INextRunService nextRunService;
|
||||
private readonly IUnitInValueRepository unitInValueService;
|
||||
private readonly ITemplateRenamePendingRepository _templateRenamePendingRepository;
|
||||
|
||||
public TemplateUpdaterService(
|
||||
ILogger<TemplateUpdaterService> logger,
|
||||
@@ -28,7 +32,8 @@ namespace PARR.TemplateUpdater.Services
|
||||
IUnitRepository unitService,
|
||||
IRobotConfigurationRepository robotConfigurationService,
|
||||
INextRunService nextRunService,
|
||||
IUnitInValueRepository unitInValueService
|
||||
IUnitInValueRepository unitInValueService,
|
||||
ITemplateRenamePendingRepository templateRenamePendingRepository
|
||||
)
|
||||
{
|
||||
this.logger = logger;
|
||||
@@ -38,6 +43,7 @@ namespace PARR.TemplateUpdater.Services
|
||||
this.robotConfigurationService = robotConfigurationService;
|
||||
this.nextRunService = nextRunService;
|
||||
this.unitInValueService = unitInValueService;
|
||||
_templateRenamePendingRepository = templateRenamePendingRepository;
|
||||
}
|
||||
|
||||
|
||||
@@ -53,7 +59,8 @@ namespace PARR.TemplateUpdater.Services
|
||||
var template = await templateService.Get()
|
||||
.Include(t => t.RobotConfigurations)
|
||||
.Include(t => t.UnitsInTemplate)
|
||||
.AsSplitQuery()
|
||||
//.AsSplitQuery()
|
||||
.AsSingleQuery()
|
||||
.FirstOrDefaultAsync(t => t.Id == query.TemplateId);
|
||||
if (template == null)
|
||||
{
|
||||
@@ -64,9 +71,14 @@ namespace PARR.TemplateUpdater.Services
|
||||
var templateIsChanged = false;
|
||||
var scheduleIsChanged = false;
|
||||
|
||||
if (template.Name != query.Name.Trim())
|
||||
var trimmedNewName = query.Name.Trim();
|
||||
if (template.Name != trimmedNewName)
|
||||
{
|
||||
template.Name = query.Name.Trim();
|
||||
var prepareOldNameResult = await PrepareOldTemplateNameAsync(template.Name, trimmedNewName, template);
|
||||
if (!prepareOldNameResult)
|
||||
return;
|
||||
|
||||
template.Name = trimmedNewName;
|
||||
templateIsChanged = true;
|
||||
scheduleIsChanged = true;
|
||||
}
|
||||
@@ -276,5 +288,57 @@ namespace PARR.TemplateUpdater.Services
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Добавление записи в таблицу ожидания переименования
|
||||
/// </summary>
|
||||
/// <param name="oldName"></param>
|
||||
/// <param name="newName"></param>
|
||||
/// <param name="template"></param>
|
||||
/// <returns></returns>
|
||||
private async Task<bool> PrepareOldTemplateNameAsync(string oldName, string newName, Template template)
|
||||
{
|
||||
// Проверяем, не запущено ли уже переименование для этого шаблона
|
||||
var alreadyPending = await _templateRenamePendingRepository.Get()
|
||||
.AsNoTracking()
|
||||
.FirstOrDefaultAsync(t => t.TemplateId == template.Id);
|
||||
|
||||
if (alreadyPending != null)
|
||||
{
|
||||
logger.LogError("При попытке переименования шаблона {TemplateId}, из '{OldName}' в '{NewName}', " +
|
||||
"произошла ошибка, этот шаблон уже находится в процессе переименования (старое имя {PendingName})", template.Id, oldName, newName, alreadyPending.OldName);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Уникально ли имя в таблице ожидания переименования
|
||||
var existPendingOldName = await _templateRenamePendingRepository.Get()
|
||||
.AsNoTracking()
|
||||
.FirstOrDefaultAsync(t => t.OldName == oldName);
|
||||
|
||||
if (existPendingOldName != null)
|
||||
{
|
||||
logger.LogError("При добавлении старого имени в таблицу ожидания для шаблона {TemplateId} обнаружен конфликт: " +
|
||||
"имя '{ExistOldName}' уже зарезервировано другим процессом для шаблона {ExistTemplateId}",
|
||||
template.Id, existPendingOldName.OldName, existPendingOldName.TemplateId);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Все нормально, добавляем запись в таблицу
|
||||
var pendingRename = new TemplateRenamePending
|
||||
{
|
||||
TemplateId = template.Id,
|
||||
DateCreated = DateTimeOffset.UtcNow,
|
||||
OldName = oldName,
|
||||
Template = template
|
||||
};
|
||||
|
||||
var addResult = await _templateRenamePendingRepository.CreateAsync(pendingRename);
|
||||
if (!addResult)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user