Phase 20F Fixed build project

This commit is contained in:
Nick Beckley 2026-07-03 23:33:03 +01:00
parent 16ea855a3e
commit 6cd452018c
2 changed files with 15 additions and 6 deletions

View File

@ -247,7 +247,7 @@ public sealed class OnboardingService(
await PublishBuildProgress(userId, preview.PreviewID, "Creating characters...", 60, progress);
var result = await builds.BuildAsync(userId, request)
?? throw new InvalidOperationException("The project structure could not be built. Check the review choices and try again.");
?? throw new InvalidOperationException($"The project structure could not be built. Approved chapters: {request.Chapters.Count}, scenes: {request.Scenes.Count}, characters: {request.Characters.Count}. Return to review, save your selections, and try Build Project again.");
await scanPreviews.SaveBuildResultAsync(userId, result);
await PublishBuildProgress(userId, preview.PreviewID, "Finalising project...", 90, progress);
await PublishBuildProgress(userId, preview.PreviewID, result.Message, 100, progress, result);
@ -415,6 +415,15 @@ public sealed class OnboardingService(
var previewChapters = preview.Chapters.ToDictionary(chapter => chapter.TemporaryChapterKey, StringComparer.Ordinal);
var previewScenes = preview.Scenes.ToDictionary(scene => scene.TemporarySceneKey, StringComparer.Ordinal);
var includedChapterKeys = review.Chapters.Where(chapter => chapter.Include).Select(chapter => chapter.TemporaryChapterKey).ToHashSet(StringComparer.Ordinal);
if (includedChapterKeys.Count == 0)
{
throw new InvalidOperationException("Choose at least one chapter before continuing.");
}
if (!review.Scenes.Any(scene => scene.Include && includedChapterKeys.Contains(scene.TemporaryChapterKey)))
{
throw new InvalidOperationException("Choose at least one scene before continuing.");
}
if (review.Chapters.Where(chapter => chapter.Include).Any(chapter => string.IsNullOrWhiteSpace(chapter.Title)))
{

View File

@ -85,8 +85,8 @@
<input type="hidden" name="Chapters[@chapterIndex].TemporaryChapterKey" value="@chapter.TemporaryChapterKey" />
<input type="hidden" name="Chapters[@chapterIndex].ChapterNumber" value="@chapter.ChapterNumber" />
<label class="onboarding-review-toggle">
<input type="hidden" name="Chapters[@chapterIndex].Include" value="false" />
<input type="checkbox" name="Chapters[@chapterIndex].Include" value="true" checked="@chapter.Include" data-review-kind="chapter" />
<input type="hidden" name="Chapters[@chapterIndex].Include" value="false" />
Include chapter
</label>
<label class="onboarding-review-field">
@ -104,8 +104,8 @@
<input type="hidden" name="Scenes[@sceneIndex].TemporaryChapterKey" value="@scene.TemporaryChapterKey" />
<input type="hidden" name="Scenes[@sceneIndex].SceneNumberWithinChapter" value="@scene.SceneNumberWithinChapter" />
<label class="onboarding-review-toggle">
<input type="hidden" name="Scenes[@sceneIndex].Include" value="false" />
<input type="checkbox" name="Scenes[@sceneIndex].Include" value="true" checked="@scene.Include" data-review-kind="scene" />
<input type="hidden" name="Scenes[@sceneIndex].Include" value="false" />
Include scene
</label>
<label class="onboarding-review-field">
@ -116,8 +116,8 @@
@if (scene.WordCount == 0)
{
<label class="onboarding-review-toggle">
<input type="hidden" name="Scenes[@sceneIndex].AllowZeroWords" value="false" />
<input type="checkbox" name="Scenes[@sceneIndex].AllowZeroWords" value="true" />
<input type="hidden" name="Scenes[@sceneIndex].AllowZeroWords" value="false" />
Allow empty scene
</label>
}
@ -172,8 +172,8 @@
<input type="hidden" name="Characters[@characterIndex].TemporaryCharacterKey" value="@candidate.TemporaryCharacterKey" />
<input type="hidden" name="Characters[@characterIndex].Category" value="@candidate.Category" />
<label class="onboarding-review-toggle">
<input type="hidden" name="Characters[@characterIndex].Include" value="false" />
<input type="checkbox" name="Characters[@characterIndex].Include" value="true" checked="@candidate.Include" />
<input type="hidden" name="Characters[@characterIndex].Include" value="false" />
Include
</label>
<label class="onboarding-review-field">
@ -218,8 +218,8 @@
<input type="hidden" name="Characters[@characterIndex].TemporaryCharacterKey" value="@candidate.TemporaryCharacterKey" />
<input type="hidden" name="Characters[@characterIndex].Category" value="@candidate.Category" />
<label class="onboarding-review-toggle">
<input type="hidden" name="Characters[@characterIndex].Include" value="false" />
<input type="checkbox" name="Characters[@characterIndex].Include" value="true" checked="@candidate.Include" />
<input type="hidden" name="Characters[@characterIndex].Include" value="false" />
Include
</label>
<label class="onboarding-review-field">