This commit is contained in:
biss committed 2026-09-07 19:34:03 +08:00
1 parent cec56564b5
commit ae075bda6d
32 files changed
+10052 -90

No files matched your search

@@ -33,7 +33,8 @@ public sealed class CoursesController(
Guid? categoryId = null,
CourseNature? nature = null,
bool? isEnabled = null,
CancellationToken cancellationToken = default)
CancellationToken cancellationToken = default,
bool? isArchived = null)
{
pageSize = Math.Clamp(pageSize, 10, 100);
if (!CursorToken.TryDecode<CourseCursor>(cursor, out var after))
@@ -61,6 +62,7 @@ public sealed class CoursesController(
(x.EnglishName != null && x.EnglishName.Contains(keyword)));
}
if (isArchived.HasValue) source = source.Where(x => x.IsArchived == isArchived.Value);
var total = await source.CountAsync(cancellationToken);
if (after is not null)
{
@@ -105,7 +107,7 @@ public sealed class CoursesController(
}),
x.IsEnabled,
x.SortOrder,
x.CreatedAt,
x.IsArchived, x.ArchivedAt, x.ArchiveReason, x.CreatedAt,
CanManage = canManageAll ||
canManageCollegeCourses &&
x.CollegeId == managedCollegeId &&
@@ -132,7 +134,7 @@ public sealed class CoursesController(
string? keyword = null,
CancellationToken cancellationToken = default)
{
var source = ScopedCourses().AsNoTracking().Where(x => x.IsEnabled);
var source = ScopedCourses().AsNoTracking().Where(x => x.IsEnabled && !x.IsArchived);
if (collegeId.HasValue)
source = source.Where(x => x.CollegeId == collegeId.Value);
if (nature.HasValue)
@@ -220,6 +222,7 @@ public sealed class CoursesController(
var validation = await ValidateAsync(id, request, cancellationToken);
if (validation is not null) return validation;
if (entity.IsArchived) return Conflict(new ProblemDetails { Detail = "已归档课程请先恢复后再编辑。", Status = 409 });
entity.Code = request.Code.Trim();
entity.Name = request.Name.Trim();
entity.EnglishName = Normalize(request.EnglishName);
@@ -257,6 +260,7 @@ public sealed class CoursesController(
var entity = await db.Courses.FindAsync([id], cancellationToken);
if (entity is null) return NotFound();
if (!CanManage(entity.CollegeId, entity.Nature)) return Forbid();
if (entity.IsArchived) return Conflict(new ProblemDetails { Detail = "已归档课程不能删除。", Status = 409 });
db.Courses.Remove(entity);
return await SaveAsync(id, false, cancellationToken);
}