package com.tcm.training.admin.live.controller; import com.tcm.training.admin.common.ApiResponse; import com.tcm.training.admin.common.PageResponse; import com.tcm.training.admin.live.dto.LiveCourseStatusRequest; import com.tcm.training.admin.live.dto.LiveCourseUpsertRequest; import com.tcm.training.admin.live.dto.LiveCoursePasswordRequest; import com.tcm.training.admin.live.dto.LiveCoursePasswordVerifyRequest; import com.tcm.training.admin.live.service.LiveCourseAppService; import com.tcm.training.admin.live.vo.LiveCourseDetailVO; import com.tcm.training.admin.live.vo.LiveCourseListItemVO; import com.tcm.training.admin.live.vo.LiveCourseStatusVO; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; @Validated @RestController @RequestMapping({"/api/v1", "/api"}) public class LiveCourseController { private final LiveCourseAppService liveCourseAppService; public LiveCourseController(LiveCourseAppService liveCourseAppService) { this.liveCourseAppService = liveCourseAppService; } @GetMapping("/live-courses") public ApiResponse> page(@RequestParam(required = false, defaultValue = "1") int page, @RequestParam(required = false, defaultValue = "10") int pageSize, @RequestParam(required = false) String keyword, @RequestParam(required = false) Long expertId, @RequestParam(required = false) Integer status, @RequestParam(required = false) Integer liveStatus) { return ApiResponse.ok(liveCourseAppService.page(page, pageSize, keyword, expertId, status, liveStatus)); } @PostMapping("/live-courses") public ApiResponse create(@Valid @RequestBody LiveCourseUpsertRequest req) { return ApiResponse.ok(liveCourseAppService.create(req)); } @GetMapping("/live-courses/{id}") public ApiResponse detail(@PathVariable("id") Long id) { return ApiResponse.ok(liveCourseAppService.detail(id)); } @PutMapping("/live-courses/{id}") public ApiResponse update(@PathVariable("id") Long id, @Valid @RequestBody LiveCourseUpsertRequest req) { return ApiResponse.ok(liveCourseAppService.update(id, req)); } @PatchMapping("/live-courses/{id}/status") public ApiResponse patchStatus(@PathVariable("id") Long id, @Valid @RequestBody LiveCourseStatusRequest req) { return ApiResponse.ok(liveCourseAppService.patchStatus(id, req)); } @PutMapping("/live-courses/{id}/password") public ApiResponse updatePassword(@PathVariable("id") Long id, @RequestBody LiveCoursePasswordRequest req) { liveCourseAppService.updatePassword(id, req); return ApiResponse.ok(null); } @PostMapping("/live-courses/password/verify") public ApiResponse verifyPassword(@Valid @RequestBody LiveCoursePasswordVerifyRequest req) { return ApiResponse.ok(liveCourseAppService.verifyPassword(req)); } @DeleteMapping("/live-courses/{id}") public ApiResponse delete(@PathVariable("id") Long id) { liveCourseAppService.delete(id); return ApiResponse.ok(null); } }