diff --git a/src/Novelly.Api/Beats/BeatService.cs b/src/Novelly.Api/Beats/BeatService.cs index d6a16e3..72cf5c1 100644 --- a/src/Novelly.Api/Beats/BeatService.cs +++ b/src/Novelly.Api/Beats/BeatService.cs @@ -116,6 +116,8 @@ public class BeatService( beat.Tags = await tags.ResolveAsync(chapter.ProjectId, names, ct); } + chapter.UpdatedAt = DateTimeOffset.UtcNow; + db.Beats.Add(beat); await db.SaveChangesAsync(ct); @@ -150,6 +152,7 @@ public class BeatService( beat.WhatHappened = Patch.Apply(beat.WhatHappened, request.WhatHappened); beat.WhatsNext = Patch.Apply(beat.WhatsNext, request.WhatsNext); beat.UpdatedAt = DateTimeOffset.UtcNow; + chapter.UpdatedAt = beat.UpdatedAt; if (request.CharacterIds is { } characterIds) { @@ -179,6 +182,12 @@ public class BeatService( await RequireBeatAccessAsync(beat, ProjectPermission.DeleteContent, ct); + var chapter = await db.Chapters.FirstOrDefaultAsync(c => c.Id == beat.ChapterId, ct); + if (chapter is not null) + { + chapter.UpdatedAt = DateTimeOffset.UtcNow; + } + db.Beats.Remove(beat); await db.SaveChangesAsync(ct); return true; @@ -215,6 +224,12 @@ public class BeatService( beat.SortOrder = order++; } + var chapter = await db.Chapters.FirstOrDefaultAsync(c => c.Id == chapterId, ct); + if (chapter is not null) + { + chapter.UpdatedAt = DateTimeOffset.UtcNow; + } + await db.SaveChangesAsync(ct); return await ListAsync(chapterId, ct); } @@ -262,6 +277,7 @@ public class BeatService( { beat.Characters.Add(character); beat.UpdatedAt = DateTimeOffset.UtcNow; + chapter.UpdatedAt = beat.UpdatedAt; } await db.SaveChangesAsync(ct); @@ -312,14 +328,18 @@ public class BeatService( } var nextSortOrder = await NextSortOrderAsync(request.TargetChapterId, ct); + var now = DateTimeOffset.UtcNow; foreach (var beatId in request.BeatIds) { var beat = beats.Single(b => b.Id == beatId); beat.ChapterId = request.TargetChapterId; beat.SortOrder = nextSortOrder++; - beat.UpdatedAt = DateTimeOffset.UtcNow; + beat.UpdatedAt = now; } + chapter.UpdatedAt = now; + targetChapter.UpdatedAt = now; + await db.SaveChangesAsync(ct); return beats; } diff --git a/src/Novelly.Web/src/pages/DashboardPage.tsx b/src/Novelly.Web/src/pages/DashboardPage.tsx index 8819a3d..0aab407 100644 --- a/src/Novelly.Web/src/pages/DashboardPage.tsx +++ b/src/Novelly.Web/src/pages/DashboardPage.tsx @@ -5,6 +5,7 @@ import { useAuth } from '../auth/AuthContext' import { AutoField, EmptyState, ErrorNote, Spinner, StatusBadge } from '../components/ui' const RECENT_COUNT = 5 +const RECENT_CHAPTERS_COUNT = 10 export default function DashboardPage() { const { projectId = '' } = useParams() @@ -61,7 +62,7 @@ function OutliningDashboard({ projectId }: { projectId: string }) {
-

Outline

+

Chapters

View all → @@ -74,7 +75,7 @@ function OutliningDashboard({ projectId }: { projectId: string }) { ) : (
    - {recentChapters.slice(0, RECENT_COUNT).map((chapter) => ( + {recentChapters.slice(0, RECENT_CHAPTERS_COUNT).map((chapter) => (