feat(data): add the drawing set client and release session

The desktop needs a cross-platform way to read and save sets and to turn
one into nests before any UI is built on it. RemoteDrawingSetStore covers
every /api/sets route with the library client's checks and conflict
handling. SetReleasePlan groups a set by material, grade, thickness, units
and cut type without I/O, so the release dialog can preview refusals
(duplicate names, drawings without material) before anything is created.

SetReleaseSession builds every group's nest through LibraryDrawingInsert
before uploading any, so a refusal leaves nothing on the server; uploads
then never cancel mid-flight, a lost reply is reconciled by the nest's
client-allocated id, and the release is posted only when every chosen
nest exists, with a same-id retry when that post fails.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ajandClaude Opus 5.5 committed 2026-10-20 13:48:23 -04:00
1 parent 44666b289d
commit af6975b9f1
11 files changed
+2104 -2

No files matched your search

+8 -2
View File
@@ -329,11 +329,17 @@ public sealed class RemoteDrawingLibrary : IDrawingLibraryStore, IDisposable
}
}
/// <summary>The nest server predates the drawing library (it answered HTTP 404).</summary>
/// <summary>The nest server predates the drawing library or another feature (it answered HTTP 404).</summary>
public sealed class ServerTooOldException : IOException
{
public ServerTooOldException()
: base("This nest server does not support the drawing library (HTTP 404). Update the nest server to this OpenNest version.")
: this("the drawing library")
{
}
/// <summary><paramref name="feature"/> names what is missing, for example "drawing sets".</summary>
public ServerTooOldException(string feature)
: base($"This nest server does not support {feature} (HTTP 404). Update the nest server to this OpenNest version.")
{
}
}