fix(dal): ShortcodeService теперь возвращает значения мультиполей через запятую, NULL как "null". Добавлены отсутствующие навигационные данные

This commit is contained in:
Mikhail Kuznetsov
2025-12-10 14:12:38 +10:00
parent 3a136f5bf4
commit 03683a13d3
3 changed files with 32 additions and 18 deletions

View File

@@ -37,26 +37,27 @@ namespace PARR.DAL.Services.Implementations.Unit
}
public async Task<Dictionary<string, string>> GetFieldValuesAsync(Guid unitId, IReadOnlyCollection<string> aihitNames)
public async Task<List<(string FieldName, string? Value)>> GetFieldValuesAsync(
Guid unitId,
IReadOnlyCollection<string> aihitNames)
{
if (aihitNames == null || aihitNames.Count == 0)
return new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
return new List<(string, string?)>();
var result = await dataContext.UnitInValues
var keyValuePairs = await dataContext.UnitInValues
.AsNoTracking()
.AsSplitQuery()
.Where(uiv => uiv.UnitId == unitId
&& uiv.Field != null
&& uiv.Value != null
&& aihitNames.Contains(uiv.Field.AihitName.ToUpper()))
.ToDictionaryAsync(
uiv => uiv.Field!.AihitName.ToUpper(),
uiv => uiv.Value!.Value ?? "",
StringComparer.OrdinalIgnoreCase);
.Select(uiv => new { Key = uiv.Field!.AihitName.ToUpper(), Value = uiv.Value!.Value })
.ToListAsync();
// Журналируем если не нашли поля
var foundFieldNames = keyValuePairs.Select(kvp => kvp.Key).ToHashSet(StringComparer.OrdinalIgnoreCase);
var missing = aihitNames
.Where(name => !result.ContainsKey(name.ToUpper()))
.Where(name => !foundFieldNames.Contains(name.ToUpper()))
.ToList();
if (missing.Any())
{
@@ -64,7 +65,7 @@ namespace PARR.DAL.Services.Implementations.Unit
unitId, string.Join(", ", missing));
}
return result;
return keyValuePairs.Select(kvp => (kvp.Key, kvp.Value)).ToList();
}
}
}