Rename Project concept to Novel across the stack

Renames the domain concept from Project to Novel throughout the backend
(entities, DTOs, services, endpoints, ProjectAccessService/Permission,
ProjectId foreign keys), MCP server (tool names and routes), and the
React/Vite frontend (types, hooks, routes, components). Adds a new EF
Core migration (RenameProjectToNovel) using RenameTable/RenameColumn to
preserve existing data instead of dropping/recreating tables. Updates
CLAUDE.md's structure section to reference Novels/ instead of Projects/.
This commit is contained in:
James Wampler
2026-08-17 23:03:09 -07:00
parent 0ab4f568b5
commit 4313c8f206
95 changed files with 3192 additions and 1660 deletions
+8 -8
View File
@@ -1,4 +1,4 @@
using Novelly.Api.Projects;
using Novelly.Api.Novels;
namespace Novelly.Api.Tests;
@@ -20,24 +20,24 @@ public class GenreServiceTests : ServiceTestFixture
}
[Test]
public async Task A_project_can_be_filed_under_a_genre_off_the_list()
public async Task A_novel_can_be_filed_under_a_genre_off_the_list()
{
var fantasy = (await Genres.ListAsync()).First(g => g.Name == "Fantasy");
var project = await Projects.CreateAsync(new CreateProjectRequest("The Salt Road", Genre: fantasy.Name));
var novel = await Novels.CreateAsync(new CreateNovelRequest("The Salt Road", Genre: fantasy.Name));
Assert.That(project.Genre, Is.EqualTo("Fantasy"));
Assert.That(novel.Genre, Is.EqualTo("Fantasy"));
}
[Test]
public async Task A_project_can_still_carry_a_genre_that_is_not_on_the_list()
public async Task A_novel_can_still_carry_a_genre_that_is_not_on_the_list()
{
var project = await Projects.CreateAsync(
new CreateProjectRequest("The Salt Road", Genre: "Nautical Gothic"));
var novel = await Novels.CreateAsync(
new CreateNovelRequest("The Salt Road", Genre: "Nautical Gothic"));
Assert.Multiple(async () =>
{
Assert.That(project.Genre, Is.EqualTo("Nautical Gothic"));
Assert.That(novel.Genre, Is.EqualTo("Nautical Gothic"));
Assert.That((await Genres.ListAsync()).Select(g => g.Name), Has.No.Member("Nautical Gothic"));
});
}