| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325 |
- package com.njuzr.eaibackend.controller;
- import com.baomidou.mybatisplus.core.metadata.IPage;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.njuzr.eaibackend.dto.course.CourseDTO;
- import com.njuzr.eaibackend.dto.course.CourseQueryDTO;
- import com.njuzr.eaibackend.dto.course.CourseUpdateDTO;
- import com.njuzr.eaibackend.dto.course.EnrollDTO;
- import com.njuzr.eaibackend.exception.MyException;
- import com.njuzr.eaibackend.po.Course;
- import com.njuzr.eaibackend.po.MyUserDetails;
- import com.njuzr.eaibackend.po.User;
- import com.njuzr.eaibackend.service.CourseService;
- import com.njuzr.eaibackend.service.UserService;
- import com.njuzr.eaibackend.vo.CourseVO;
- import com.njuzr.eaibackend.vo.StudentCourseHomeworkVO;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.security.access.prepost.PreAuthorize;
- import org.springframework.security.core.annotation.AuthenticationPrincipal;
- import org.springframework.validation.annotation.Validated;
- import org.springframework.web.bind.annotation.*;
- /**
- * @author: Leonezhurui
- * @Date: 2024/3/5 - 16:34
- * @Package: EAI-Backend
- */
- @RestController
- @RequestMapping("/api/course")
- public class CourseController {
- private static final Logger log = LoggerFactory.getLogger(CourseController.class);
- private final CourseService courseService;
- @Autowired
- UserService userService;
- @Autowired
- public CourseController(CourseService courseService) {
- this.courseService = courseService;
- }
- /**
- * 创建课程
- * @param courseDTO
- * @return
- */
- @PreAuthorize("hasRole('TEACHER') or hasRole('ADMIN')")
- @PostMapping
- public MyResponse createCourse(@Validated @RequestBody CourseDTO courseDTO) {
- CourseVO courseVO = courseService.createCourse(courseDTO);
- return MyResponse.success(courseVO);
- }
- /**
- * 管理查询课程,内容查询
- * @param currentPage
- * @param pageSize
- * @param courseQueryDTO
- * @return
- */
- // TODO:权限修改
- // @PreAuthorize("hasRole('ADMIN')")
- // TODO: Get改为Post,因为有@RequestBody
- @PostMapping("/query")
- public MyResponse findCoursePage(
- @RequestParam(value = "page", defaultValue = "1") int currentPage,
- @RequestParam(value = "size", defaultValue = "10") int pageSize,
- @RequestBody CourseQueryDTO courseQueryDTO
- ) {
- log.info("查询课程控制器:{}, {}", currentPage, pageSize);
- Page<Course> page = new Page<>(currentPage, pageSize);
- IPage<CourseVO> courses = courseService.findCoursesPage(page, courseQueryDTO);
- return MyResponse.success(courses);
- }
- /**
- * 根据学生Id获取其所选的所有课程的信息
- * @param studentId
- * @return
- */
- @GetMapping("/byStudent")
- public MyResponse findCourseByStudentId(
- @AuthenticationPrincipal(expression = "id") Long studentId,
- @RequestParam(value = "page", defaultValue = "1") int currentPage,
- @RequestParam(value = "size", defaultValue = "10") int pageSize
- ) {
- Page<Course> page = new Page<>(currentPage, pageSize);
- CourseQueryDTO courseQueryDTO = new CourseQueryDTO();
- courseQueryDTO.setStudentId(studentId);
- return MyResponse.success(courseService.findCoursesPage(page, courseQueryDTO));
- }
- /**
- * 根据老师Id获取的其所创建的所有课程信息
- * @param teacherId
- * @return
- */
- @PreAuthorize("hasRole('TEACHER')")
- @GetMapping("/byTeacher")
- public MyResponse findByTeacherId(
- @AuthenticationPrincipal MyUserDetails user,
- @RequestParam(value = "page", defaultValue = "1") int currentPage,
- @RequestParam(value = "size", defaultValue = "10") int pageSize
- ) {
- Page<Course> page = new Page<>(currentPage, pageSize);
- CourseQueryDTO courseQueryDTO = new CourseQueryDTO();
- courseQueryDTO.setTeacherId(user.getId());
- if(user.getPid() != null) {
- courseQueryDTO.setTeacherPid(Long.parseLong(user.getPid()));
- }
- return MyResponse.success(courseService.findCoursesPage(page, courseQueryDTO));
- }
- /**
- * 根据课程Id,获取某个课程的详细信息
- * @param courseId
- * @param currentPage
- * @param pageSize
- * @return
- */
- @GetMapping("/{courseId}")
- public MyResponse findByCourseId(
- @PathVariable Long courseId,
- @RequestParam(value = "page", defaultValue = "1") int currentPage,
- @RequestParam(value = "size", defaultValue = "10") int pageSize
- ) {
- Page<Course> page = new Page<>(currentPage, pageSize);
- CourseQueryDTO courseQueryDTO = new CourseQueryDTO();
- courseQueryDTO.setCourseId(courseId);
- return MyResponse.success(courseService.findCoursesPage(page, courseQueryDTO));
- }
- @GetMapping("/byName")
- public MyResponse findByCourseName(
- @RequestParam String courseName,
- @RequestParam(value = "page", defaultValue = "1") int currentPage,
- @RequestParam(value = "size", defaultValue = "10") int pageSize
- ) {
- Page<Course> page = new Page<>(currentPage, pageSize);
- CourseQueryDTO courseQueryDTO = new CourseQueryDTO();
- courseQueryDTO.setCourseName(courseName);
- return MyResponse.success(courseService.findCoursesPage(page, courseQueryDTO));
- }
- @GetMapping("/byTime")
- public MyResponse findByCourseTime(
- @RequestParam String courseTime,
- @RequestParam(value = "page", defaultValue = "1") int currentPage,
- @RequestParam(value = "size", defaultValue = "10") int pageSize
- ) {
- Page<Course> page = new Page<>(currentPage, pageSize);
- CourseQueryDTO courseQueryDTO = new CourseQueryDTO();
- courseQueryDTO.setSemester(courseTime);
- return MyResponse.success(courseService.findCoursesPage(page, courseQueryDTO));
- }
- /**
- * 只有课程老师或管理员可以修改当前课程的信息
- * @param userId
- * @param courseId
- * @param updateDTO
- * @return
- */
- @PreAuthorize("hasRole('TEACHER') or hasRole('ADMIN')")
- @PutMapping
- public MyResponse updateCourse(
- @AuthenticationPrincipal(expression = "id") Long userId,
- @RequestParam Long courseId,
- @RequestBody CourseUpdateDTO updateDTO
- ) {
- return MyResponse.success(courseService.updateCourse(userId, courseId, updateDTO));
- }
- /**
- * 只有课程老师或管理员可以修改当前课程的信息
- * @param userPid
- * @param courseId
- * @param updateDTO
- * @return
- */
- @PreAuthorize("hasRole('TEACHER') or hasRole('ADMIN')")
- @PutMapping("/portal")
- public MyResponse updateCourseByPortal(
- @AuthenticationPrincipal(expression = "pid") Long userPid,
- @AuthenticationPrincipal(expression = "id") Long userId,
- @RequestParam Long courseId,
- @RequestBody CourseUpdateDTO updateDTO
- ) {
- return MyResponse.success(courseService.updateCourseByPortal(userId, userPid, courseId, updateDTO));
- }
- @PreAuthorize("hasRole('TEACHER') or hasRole('ADMIN')")
- @PutMapping("/enrollCode")
- public MyResponse updateEnrollCode(
- @AuthenticationPrincipal(expression = "id") Long userId,
- @RequestParam Long courseId,
- @RequestParam String enrollCode
- ) {
- CourseUpdateDTO updateDTO = new CourseUpdateDTO();
- updateDTO.setEnrollCode(enrollCode);
- return MyResponse.success(courseService.updateCourse(userId, courseId, updateDTO));
- }
- /**
- * 教师删除课程
- */
- @PreAuthorize("hasRole('TEACHER') or hasRole('ADMIN')")
- @DeleteMapping("/deleteCourse")
- public MyResponse deleteCourse(
- @AuthenticationPrincipal MyUserDetails user,
- @RequestParam Long courseId
- ) {
- courseService.deleteById(user, courseId);
- return MyResponse.success("删除课程成功");
- }
- /**
- * 教师删除课程
- */
- @PreAuthorize("hasRole('TEACHER') or hasRole('ADMIN')")
- @DeleteMapping("/deleteCourse/portal")
- public MyResponse deleteCourseByPortal(
- @AuthenticationPrincipal MyUserDetails user,
- @RequestParam Long courseId
- ) {
- courseService.deleteById(user, courseId);
- return MyResponse.success("删除课程成功");
- }
- /**
- * 选课,通过studentId和courseId,完成选课。其中studentId从Token中获取。
- * @param studentId
- * @param enrollDTO
- * @return
- */
- @PreAuthorize("hasRole('STUDENT')")
- @PostMapping("/enroll")
- public MyResponse enroll(
- @AuthenticationPrincipal(expression = "id") Long studentId,
- @RequestBody EnrollDTO enrollDTO
- ) {
- try {
- enrollDTO.setStudentId(studentId);
- courseService.enroll(enrollDTO);
- return MyResponse.success("选课成功");
- }
- catch (MyException e){
- return MyResponse.error(e.getErrCode(),e.getMessage());
- }
- }
- @GetMapping("/getEnrollments/byCourse")
- @PreAuthorize("hasRole('TEACHER')")
- public MyResponse getEnrollmentsByCourse(
- @RequestParam(value = "page", defaultValue = "1") int currentPage,
- @RequestParam(value = "size", defaultValue = "10") int pageSize,
- @AuthenticationPrincipal(expression = "id") Long teacherId,
- @RequestParam Long courseId
- ) {
- Page<User> page = new Page<>(currentPage, pageSize);
- return MyResponse.success(courseService.getEnrollmentsByCourse(page, teacherId, courseId));
- }
- @GetMapping("/getEnrollments/byStudent")
- public MyResponse getEnrollmentsByStudent(
- @RequestParam(value = "page", defaultValue = "1") int currentPage,
- @RequestParam(value = "size", defaultValue = "10") int pageSize,
- @RequestParam Long studentId
- ) {
- Page<Course> page = new Page<>(currentPage, pageSize);
- return MyResponse.success(courseService.getEnrollmentsByStudent(page, studentId));
- }
- @PreAuthorize("hasRole('TEACHER') or hasRole('ADMIN')")
- @GetMapping("/getEnrollCode")
- public MyResponse getEnrollCodeByCourseId(
- @AuthenticationPrincipal(expression = "id") Long userId,
- @RequestParam Long courseId) {
- return MyResponse.success(courseService.getEnrollCodeByCourseId(courseId));
- }
- /**
- * 学生退课
- */
- @PreAuthorize("hasRole('STUDENT')")
- @DeleteMapping("/dropCourse")
- public MyResponse dropCourse(
- @AuthenticationPrincipal(expression = "id") Long studentId,
- @RequestParam Long courseId
- ) {
- courseService.dropCourse(studentId, courseId);
- return MyResponse.success("退课成功");
- }
- @GetMapping("/student/assignments")
- public MyResponse getStudentCourseAssignments(
- @RequestParam Long studentId,
- @RequestParam Long courseId) {
- try {
- StudentCourseHomeworkVO result = courseService.getStudentCourseAssignments(studentId, courseId);
- return MyResponse.success(result);
- } catch (RuntimeException e) {
- return MyResponse.error(400, e.getMessage());
- } catch (Exception e) {
- log.error("查询学生课程作业失败", e);
- return MyResponse.error(500, "查询失败:" + e.getMessage());
- }
- }
- }
|