feat: drawing_fill_title_block — упрочнение по ревью Codex реализации
#3/#6: доступ к графе через RequireStampCell(stamp,columnId) — null-check ячейки + единое место валидации (запись и чтение). #4: проверка columnId>0 в helper (защищает и ReadStampCellAsync). #2/#5: нетранзакционность записи зафиксирована комментарием (откат при Update()==FALSE спекулятивен, не делаем). RCW — долг v2-2. Тесты без изменений в числе: 123 unit + 65 integration = 188 зелёных. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -46,8 +46,11 @@ public sealed class DrawingService
|
||||
throw new ArgumentException("Укажите хотя бы одно поле основной надписи (designation/name/material).");
|
||||
|
||||
var stamp = RequireActiveStamp();
|
||||
// Нетранзакционно: все графы записываются, затем один Update() фиксирует. При Update()==FALSE
|
||||
// (на практике не воспроизводится) откат старых значений не делаем — он спекулятивен (Str уже
|
||||
// на in-memory объектах графы, повторный Update мог бы тоже упасть); сообщаем об ошибке.
|
||||
foreach (var (columnId, text) in fields)
|
||||
stamp.Text[columnId].Str = text; // Str замещает содержимое (Clear не нужен)
|
||||
RequireStampCell(stamp, columnId).Str = text; // Str замещает содержимое (Clear не нужен)
|
||||
if (!stamp.Update())
|
||||
throw new InvalidOperationException("IStamp.Update вернул FALSE — основная надпись не обновлена.");
|
||||
return fields.Count;
|
||||
@@ -58,9 +61,18 @@ public sealed class DrawingService
|
||||
=> _dispatcher.InvokeAsync(() =>
|
||||
{
|
||||
var stamp = RequireActiveStamp();
|
||||
return stamp.Text[columnId]?.Str ?? string.Empty;
|
||||
return RequireStampCell(stamp, columnId).Str ?? string.Empty;
|
||||
}, ct);
|
||||
|
||||
/// <summary>Получить графу основной надписи по номеру с диагностикой (номер > 0, ячейка != null).</summary>
|
||||
private static IText RequireStampCell(IStamp stamp, int columnId)
|
||||
{
|
||||
if (columnId <= 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(columnId), "Номер графы основной надписи должен быть > 0.");
|
||||
return stamp.Text[columnId]
|
||||
?? throw new InvalidOperationException($"Графа {columnId} основной надписи недоступна (Text[{columnId}] == null).");
|
||||
}
|
||||
|
||||
private IStamp RequireActiveStamp()
|
||||
{
|
||||
var doc2d = RequireActiveDrawing();
|
||||
|
||||
Reference in New Issue
Block a user