diff --git a/src/main/java/xyz/playedu/api/controller/backend/CourseHourController.java b/src/main/java/xyz/playedu/api/controller/backend/CourseHourController.java index 44868ae..6887f6d 100644 --- a/src/main/java/xyz/playedu/api/controller/backend/CourseHourController.java +++ b/src/main/java/xyz/playedu/api/controller/backend/CourseHourController.java @@ -2,6 +2,7 @@ package xyz.playedu.api.controller.backend; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import xyz.playedu.api.PlayEduBCtx; @@ -13,6 +14,7 @@ import xyz.playedu.api.event.CourseHourCreatedEvent; import xyz.playedu.api.event.CourseHourDestroyEvent; import xyz.playedu.api.exception.NotFoundException; import xyz.playedu.api.middleware.BackendPermissionMiddleware; +import xyz.playedu.api.request.backend.CourseHourMultiRequest; import xyz.playedu.api.request.backend.CourseHourRequest; import xyz.playedu.api.request.backend.CourseHourSortRequest; import xyz.playedu.api.service.CourseChapterService; @@ -79,6 +81,39 @@ public class CourseHourController { return JsonResponse.success(); } + @BackendPermissionMiddleware(slug = BPermissionConstant.COURSE) + @PostMapping("/create-batch") + @Transactional + public JsonResponse storeMulti(@PathVariable(name = "courseId") Integer courseId, @RequestBody @Validated CourseHourMultiRequest req) { + if (req.getHours().size() == 0) { + return JsonResponse.error("参数为空"); + } + + List hours = new ArrayList<>(); + Date now = new Date(); + + for (CourseHourMultiRequest.CourseHourItem item : req.getHours()) { + hours.add(new CourseHour() {{ + setCourseId(courseId); + setChapterId(item.getChapterId()); + setSort(item.getSort()); + setType(item.getType()); + setRid(item.getRid()); + setTitle(item.getTitle()); + setDuration(item.getDuration()); + setCreatedAt(now); + }}); + } + + hourService.saveBatch(hours); + + // 只需要发布一次event就可以了 + CourseHour firstHour = hours.get(0); + ctx.publishEvent(new CourseHourCreatedEvent(this, PlayEduBCtx.getAdminUserID(), firstHour.getCourseId(), firstHour.getChapterId(), firstHour.getId())); + + return JsonResponse.success(); + } + @BackendPermissionMiddleware(slug = BPermissionConstant.COURSE) @GetMapping("/{id}") public JsonResponse edit(@PathVariable(name = "courseId") Integer courseId, @PathVariable(name = "id") Integer id) throws NotFoundException { diff --git a/src/main/java/xyz/playedu/api/request/backend/CourseHourMultiRequest.java b/src/main/java/xyz/playedu/api/request/backend/CourseHourMultiRequest.java new file mode 100644 index 0000000..74fffac --- /dev/null +++ b/src/main/java/xyz/playedu/api/request/backend/CourseHourMultiRequest.java @@ -0,0 +1,26 @@ +package xyz.playedu.api.request.backend; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.List; + +/** + * @Author 杭州白书科技有限公司 + * @create 2023/3/21 16:33 + */ +@Data +public class CourseHourMultiRequest { + @Data + public class CourseHourItem { + private Integer chapterId; + private String title; + private Integer duration; + private Integer sort; + private String type; + private Integer rid; + } + + @NotNull(message = "hours参数不存在") + private List hours; +}