diff --git a/src/Jiaowu.Api/Controllers/CourseAdjustmentsController.cs b/src/Jiaowu.Api/Controllers/CourseAdjustmentsController.cs index 6c4bc77..2377af2 100644 --- a/src/Jiaowu.Api/Controllers/CourseAdjustmentsController.cs +++ b/src/Jiaowu.Api/Controllers/CourseAdjustmentsController.cs @@ -3,6 +3,7 @@ using Jiaowu.Api.Domain.Academic; using Jiaowu.Api.Domain.Identity; using Jiaowu.Api.Infrastructure.Auth; using Jiaowu.Api.Infrastructure.Persistence; +using Jiaowu.Api.Infrastructure.Timetables; using Jiaowu.Api.Infrastructure.Scheduling; using Jiaowu.Api.Infrastructure.Teaching; using Microsoft.AspNetCore.Authorization; @@ -286,6 +287,8 @@ public sealed class CourseAdjustmentsController( db.CourseAdjustments.Add(adj); await db.SaveChangesAsync(cancellationToken); + await new PublishedTimetableProjectionService(db) + .RebuildPublishedPlansForTaskAsync(adj.TeachingTaskId, cancellationToken); if (request.Submit) { diff --git a/src/Jiaowu.Api/Infrastructure/Timetables/PublishedTimetableProjectionService.cs b/src/Jiaowu.Api/Infrastructure/Timetables/PublishedTimetableProjectionService.cs index 3465c9d..72d3534 100644 --- a/src/Jiaowu.Api/Infrastructure/Timetables/PublishedTimetableProjectionService.cs +++ b/src/Jiaowu.Api/Infrastructure/Timetables/PublishedTimetableProjectionService.cs @@ -6,6 +6,17 @@ namespace Jiaowu.Api.Infrastructure.Timetables; public sealed class PublishedTimetableProjectionService(AppDbContext db) { + public async Task RebuildPublishedPlansForTaskAsync(Guid teachingTaskId, CancellationToken cancellationToken) + { + var plans = await db.SchedulePlans + .Where(plan => plan.Status == SchedulePlanStatus.Published && + plan.Entries.Any(entry => entry.TeachingTaskId == teachingTaskId)) + .Include(plan => plan.Entries) + .ToListAsync(cancellationToken); + foreach (var plan in plans) + await RebuildAsync(plan, cancellationToken); + } + public async Task RebuildAsync(SchedulePlan plan, CancellationToken cancellationToken) { var previous = db.PublishedScheduleOccurrences.Where(x => x.SchedulePlanId == plan.Id);