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.LiveSessionUpsertRequest; import com.tcm.training.admin.live.service.LiveSessionAppService; import com.tcm.training.admin.live.vo.LivePushNotificationVO; import com.tcm.training.admin.live.vo.LiveSessionStatusVO; import com.tcm.training.admin.live.vo.LiveSessionVO; 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 LiveSessionController { private final LiveSessionAppService liveSessionAppService; public LiveSessionController(LiveSessionAppService liveSessionAppService) { this.liveSessionAppService = liveSessionAppService; } @GetMapping("/live-courses/{courseId}/sessions") public ApiResponse> page(@PathVariable("courseId") Long courseId, @RequestParam(required = false, defaultValue = "1") int page, @RequestParam(required = false, defaultValue = "10") int pageSize, @RequestParam(required = false) String startTimeFrom, @RequestParam(required = false) String startTimeTo, @RequestParam(required = false) Integer liveStatus) { return ApiResponse.ok(liveSessionAppService.pageSessions(courseId, page, pageSize, startTimeFrom, startTimeTo, liveStatus)); } @PostMapping("/live-courses/{courseId}/sessions") public ApiResponse create(@PathVariable("courseId") Long courseId, @Valid @RequestBody LiveSessionUpsertRequest req) { return ApiResponse.ok(liveSessionAppService.createSession(courseId, req)); } @PutMapping("/live-courses/{courseId}/sessions/{sessionId}") public ApiResponse update(@PathVariable("courseId") Long courseId, @PathVariable("sessionId") Long sessionId, @Valid @RequestBody LiveSessionUpsertRequest req) { return ApiResponse.ok(liveSessionAppService.updateSession(courseId, sessionId, req)); } @PostMapping("/live-courses/{courseId}/sessions/{sessionId}/copy") public ApiResponse copy(@PathVariable("courseId") Long courseId, @PathVariable("sessionId") Long sessionId) { return ApiResponse.ok(liveSessionAppService.copySession(courseId, sessionId)); } @DeleteMapping("/live-courses/{courseId}/sessions/{sessionId}") public ApiResponse delete(@PathVariable("courseId") Long courseId, @PathVariable("sessionId") Long sessionId) { liveSessionAppService.deleteSession(courseId, sessionId); return ApiResponse.ok(null); } @PatchMapping("/live-courses/{courseId}/sessions/{sessionId}/start") public ApiResponse start(@PathVariable("courseId") Long courseId, @PathVariable("sessionId") Long sessionId) { return ApiResponse.ok(liveSessionAppService.start(courseId, sessionId)); } @PatchMapping("/live-courses/{courseId}/sessions/{sessionId}/end") public ApiResponse end(@PathVariable("courseId") Long courseId, @PathVariable("sessionId") Long sessionId) { return ApiResponse.ok(liveSessionAppService.end(courseId, sessionId)); } @PostMapping("/live-courses/{courseId}/sessions/{sessionId}/push-notification") public ApiResponse pushNotification(@PathVariable("courseId") Long courseId, @PathVariable("sessionId") Long sessionId) { return ApiResponse.ok(liveSessionAppService.pushNotification(courseId, sessionId)); } }