fix(generatorTemplates): добавлена дополнительная проверка, на сущестование в БД шаблонов с таким же именем.

This commit is contained in:
Mikhail Trubnikov
2024-09-16 09:30:28 +10:00
parent 79753635c2
commit 3f447e8de6

View File

@@ -108,6 +108,11 @@ namespace PARR.GeneratorTemplates.Services
var templates = CreateQueryTemplates(groupingHosts, query);
//проверяем, что нет шаблонов с такими именами, исключаем их
templates = await ExcludeExistTemplatesAsync(templates);
if (!templates.Any())
continue;
//заполняем NextRun
templates = await templateDistributor.DistributeTemplateAsync(templates, appInWorkWg.Id, (Guid)group.Key!);
@@ -174,6 +179,27 @@ namespace PARR.GeneratorTemplates.Services
#endregion
}
/// <summary>
/// Исключаем существующие шаблоны из запроса на создание
/// </summary>
/// <param name="templates"></param>
/// <returns></returns>
private async Task<List<Template>> ExcludeExistTemplatesAsync(List<Template> templates)
{
// то ли костыль, то ли нет. Иногда попадают отфильтрованные шаблоны для создания, но они уже есть в БД. На всякий проверяем есть они или нет, и если есть, исключаем их из запроса.
// ищмем по имени такие шаблоны в БД и исключаем их
var existTemplates = await templateService.Get().Where(t => templates.Select(x => x.Name).Any(x => x == t.Name)).ToListAsync();
if (existTemplates.Any())
{
existTemplates.ForEach(item => logger.LogWarning($"Исключаем из запроса на создание шаблон, так как он уже есть в БД: {item.Name}"));
templates = templates.Where(t => !existTemplates.Any(x => x.Name == t.Name)).ToList();
}
return templates;
}
private List<Template> CreateQueryTemplates(List<Host> hosts, GeneratorTemplateMq query)
{
var templates = new List<Template>();