fix(backend): 修复课程套餐路径和新增状态变更接口

- AdminCoursePackageController: 路径从 /admin/course-packages 改为 /admin/packages
- AdminCoursePackageController: 分页参数 pageNum → page,新增 submit/review/publish/offline
- CoursePackageService: 新增 submit/review/publish/offline 方法

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
lesingle 2026-03-03 15:04:43 +08:00
parent 01897a7ecc
commit e700029ee7
2 changed files with 60 additions and 4 deletions

View File

@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.*;
@Tag(name = "Admin - Course Packages", description = "Course Package Management for Admin")
@RestController
@RequestMapping("/api/v1/admin/course-packages")
@RequestMapping("/api/v1/admin/packages")
@RequiredArgsConstructor
@RequireRole(UserRole.ADMIN)
public class AdminCoursePackageController {
@ -24,12 +24,12 @@ public class AdminCoursePackageController {
@Operation(summary = "Get course packages")
@GetMapping
public Result<PageResult<CoursePackage>> getPackages(
@RequestParam(defaultValue = "1") int pageNum,
@RequestParam(value = "page", defaultValue = "1") int page,
@RequestParam(defaultValue = "20") int pageSize,
@RequestParam(required = false) String keyword,
@RequestParam(required = false) String status) {
Page<CoursePackage> page = coursePackageService.getPackages(pageNum, pageSize, keyword, status);
return Result.success(PageResult.of(page));
Page<CoursePackage> result = coursePackageService.getPackages(page, pageSize, keyword, status);
return Result.success(PageResult.of(result));
}
@Operation(summary = "Get course package by ID")
@ -56,4 +56,36 @@ public class AdminCoursePackageController {
coursePackageService.deletePackage(id);
return Result.success();
}
@Operation(summary = "Submit package for review")
@PostMapping("/{id}/submit")
public Result<Void> submitPackage(@PathVariable Long id) {
coursePackageService.submitPackage(id);
return Result.success();
}
@Operation(summary = "Review package (approve or reject)")
@PostMapping("/{id}/review")
public Result<Void> reviewPackage(
@PathVariable Long id,
@RequestBody java.util.Map<String, Object> body) {
boolean approved = Boolean.TRUE.equals(body.get("approved"));
String comment = (String) body.get("comment");
coursePackageService.reviewPackage(id, approved, comment);
return Result.success();
}
@Operation(summary = "Publish package")
@PostMapping("/{id}/publish")
public Result<Void> publishPackage(@PathVariable Long id) {
coursePackageService.publishPackage(id);
return Result.success();
}
@Operation(summary = "Take package offline")
@PostMapping("/{id}/offline")
public Result<Void> offlinePackage(@PathVariable Long id) {
coursePackageService.offlinePackage(id);
return Result.success();
}
}

View File

@ -51,4 +51,28 @@ public class CoursePackageService {
public void deletePackage(Long id) {
coursePackageMapper.deleteById(id);
}
public void submitPackage(Long id) {
CoursePackage pkg = getPackageById(id);
pkg.setStatus("pending");
coursePackageMapper.updateById(pkg);
}
public void reviewPackage(Long id, boolean approved, String comment) {
CoursePackage pkg = getPackageById(id);
pkg.setStatus(approved ? "published" : "rejected");
coursePackageMapper.updateById(pkg);
}
public void publishPackage(Long id) {
CoursePackage pkg = getPackageById(id);
pkg.setStatus("published");
coursePackageMapper.updateById(pkg);
}
public void offlinePackage(Long id) {
CoursePackage pkg = getPackageById(id);
pkg.setStatus("archived");
coursePackageMapper.updateById(pkg);
}
}