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.service.LiveRecordAppService; import com.tcm.training.admin.live.vo.LiveQuizItemVO; import com.tcm.training.admin.live.vo.LiveReserveItemVO; import com.tcm.training.admin.live.vo.LiveReservePageVO; import com.tcm.training.admin.live.vo.LiveWatchItemVO; import com.tcm.training.admin.live.vo.LiveWatchPageVO; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.time.LocalDateTime; @Validated @RestController @RequestMapping({"/api/v1", "/api"}) public class LiveRecordController { private final LiveRecordAppService liveRecordAppService; public LiveRecordController(LiveRecordAppService liveRecordAppService) { this.liveRecordAppService = liveRecordAppService; } @GetMapping("/live-courses/{courseId}/sessions/{sessionId}/reserves") public ApiResponse> reserves(@PathVariable("courseId") Long courseId, @PathVariable("sessionId") Long sessionId, @RequestParam(required = false, defaultValue = "1") int page, @RequestParam(required = false, defaultValue = "10") int pageSize, @RequestParam(required = false) String keyword, @RequestParam(required = false) Integer isCancel) { return ApiResponse.ok(liveRecordAppService.pageReserves(courseId, sessionId, page, pageSize, keyword, isCancel)); } @GetMapping("/live-records/reserves") public ApiResponse globalReserves(@RequestParam(required = false, defaultValue = "1") int page, @RequestParam(required = false, defaultValue = "10") int pageSize, @RequestParam(required = false) Long courseId, @RequestParam(required = false) Long sessionId, @RequestParam(required = false) String phone, @RequestParam(required = false) String courseName, @RequestParam(required = false) Integer liveStatus, @RequestParam(required = false) Integer hasWatched, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime reserveFrom, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime reserveTo) { return ApiResponse.ok(liveRecordAppService.pageGlobalReserves( page, pageSize, courseId, sessionId, phone, courseName, liveStatus, hasWatched, reserveFrom, reserveTo )); } @GetMapping("/live-records/reserves/export") public void exportReserves(HttpServletResponse response, @RequestParam(required = false) Long courseId, @RequestParam(required = false) Long sessionId, @RequestParam(required = false) String phone, @RequestParam(required = false) String courseName, @RequestParam(required = false) Integer liveStatus, @RequestParam(required = false) Integer hasWatched, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime reserveFrom, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime reserveTo) throws IOException { liveRecordAppService.exportGlobalReserves(response, courseId, sessionId, phone, courseName, liveStatus, hasWatched, reserveFrom, reserveTo); } @GetMapping("/live-courses/{courseId}/sessions/{sessionId}/watch-records") public ApiResponse> watchRecords(@PathVariable("courseId") Long courseId, @PathVariable("sessionId") Long sessionId, @RequestParam(required = false, defaultValue = "1") int page, @RequestParam(required = false, defaultValue = "10") int pageSize, @RequestParam(required = false) String keyword, @RequestParam(required = false) Integer isCompleted, @RequestParam(required = false) Integer isEffective) { return ApiResponse.ok(liveRecordAppService.pageWatchRecords(courseId, sessionId, page, pageSize, keyword, isCompleted, isEffective)); } @GetMapping("/live-records/watch-records") public ApiResponse globalWatchRecords(@RequestParam(required = false, defaultValue = "1") int page, @RequestParam(required = false, defaultValue = "10") int pageSize, @RequestParam(required = false) Long courseId, @RequestParam(required = false) Long sessionId, @RequestParam(required = false) String regionCode, @RequestParam(required = false) String clinicName, @RequestParam(required = false) String phone, @RequestParam(required = false) String courseName, @RequestParam(required = false) Integer hasReserve, @RequestParam(required = false) Integer isCompleted, @RequestParam(required = false) Integer isEffective, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime watchFrom, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime watchTo) { return ApiResponse.ok(liveRecordAppService.pageGlobalWatchRecords( page, pageSize, courseId, sessionId, regionCode, clinicName, phone, courseName, hasReserve, isCompleted, isEffective, watchFrom, watchTo )); } @GetMapping("/live-records/watch-records/export") public void exportWatchRecords(HttpServletResponse response, @RequestParam(required = false) Long courseId, @RequestParam(required = false) Long sessionId, @RequestParam(required = false) String regionCode, @RequestParam(required = false) String clinicName, @RequestParam(required = false) String phone, @RequestParam(required = false) String courseName, @RequestParam(required = false) Integer hasReserve, @RequestParam(required = false) Integer isCompleted, @RequestParam(required = false) Integer isEffective, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime watchFrom, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime watchTo) throws IOException { liveRecordAppService.exportGlobalWatchRecords(response, courseId, sessionId, regionCode, clinicName, phone, courseName, hasReserve, isCompleted, isEffective, watchFrom, watchTo); } @GetMapping("/live-courses/{courseId}/sessions/{sessionId}/quiz-records") public ApiResponse> quizRecords(@PathVariable("courseId") Long courseId, @PathVariable("sessionId") Long sessionId, @RequestParam(required = false, defaultValue = "1") int page, @RequestParam(required = false, defaultValue = "10") int pageSize, @RequestParam(required = false) String keyword, @RequestParam(required = false) Integer isCorrect) { return ApiResponse.ok(liveRecordAppService.pageQuizRecords(courseId, sessionId, page, pageSize, keyword, isCorrect)); } }