diff --git a/src/main/java/com/guwan/backend/constant/SecurityConstants.java b/src/main/java/com/guwan/backend/constant/SecurityConstants.java index a37aedd..31c57fb 100644 --- a/src/main/java/com/guwan/backend/constant/SecurityConstants.java +++ b/src/main/java/com/guwan/backend/constant/SecurityConstants.java @@ -17,7 +17,6 @@ public class SecurityConstants { "/bs/user/register", "/bs/user/getEmailCode", "/bs/user/getPhoneCode", - "/bs/user/verifyFace", "/challenge", diff --git a/src/main/java/com/guwan/backend/controller/CategotyController.java b/src/main/java/com/guwan/backend/controller/CategotyController.java new file mode 100644 index 0000000..7c4a9d9 --- /dev/null +++ b/src/main/java/com/guwan/backend/controller/CategotyController.java @@ -0,0 +1,30 @@ +package com.guwan.backend.controller; + +import com.guwan.backend.common.Result; + + +import com.guwan.backend.service.BSCategoryService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +@Slf4j +@RestController +@RequestMapping("/category") +@RequiredArgsConstructor +public class CategotyController { + + private final BSCategoryService categoryService; + + @GetMapping("/getAll") + public Result getAllCategory() { + try { + return Result.success(categoryService.list()); + } catch (Exception e) { + log.error("Failed to get categories", e); + return Result.error("Failed to get categories"); + } + } + +} diff --git a/src/main/java/com/guwan/backend/controller/CommonController.java b/src/main/java/com/guwan/backend/controller/CommonController.java index a63db01..5f9bbc0 100644 --- a/src/main/java/com/guwan/backend/controller/CommonController.java +++ b/src/main/java/com/guwan/backend/controller/CommonController.java @@ -55,26 +55,17 @@ import java.util.regex.Pattern; public class CommonController { private final MinioUtil minioUtil; - private final VoiceServiceClient voiceServiceClient; private final SimpleTTSClient simpleTTSClient; - private final MinioClient minioClient; - - - - //private final BookContentService bookContentService; - private final MongodbUserService mongodbUserService; - private final EveryReadDetailOfMongodbService everyReadDetailOfMongodbService; private final QwenChatModel qwenChatModel; private final QwenStreamingChatModel qwenStreamingChatModel; - private final TestDateRepository testDateRepository; - private final TestDateDao testDateDao; + @PostMapping("/uploadFile") public Result uploadFile(String bucketName, MultipartFile file){ return Result.success(minioUtil.getUrl(minioUtil.getFileUrl diff --git a/src/main/java/com/guwan/backend/controller/CourseController.java b/src/main/java/com/guwan/backend/controller/CourseController.java index 809b724..010f4c1 100644 --- a/src/main/java/com/guwan/backend/controller/CourseController.java +++ b/src/main/java/com/guwan/backend/controller/CourseController.java @@ -5,16 +5,22 @@ package com.guwan.backend.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.guwan.backend.common.Result; +import com.guwan.backend.common.SearchResult; import com.guwan.backend.pojo.dto.BSCategory; import com.guwan.backend.pojo.entity.Course; +import com.guwan.backend.pojo.entity.Teacher; +import com.guwan.backend.pojo.response.CourseByAdminVO; import com.guwan.backend.pojo.response.courseDetail.CourseDetailVO; import com.guwan.backend.service.BSCategoryService; import com.guwan.backend.service.CourseService; +import com.guwan.backend.service.TeacherService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; import org.springframework.web.bind.annotation.*; +import java.util.List; import java.util.stream.Collectors; /** @@ -36,12 +42,10 @@ public class CourseController { private final BSCategoryService categoryService; + private final TeacherService teacherService; + /** * 分页查询 - * - * @param courses 筛选条件 - * @param pageRequest 分页对象 - * @return 查询结果 */ @GetMapping("/queryByPage") public Result queryByPage(@RequestParam("page") Integer pageNumber, @@ -57,7 +61,7 @@ public class CourseController { .peek(course -> { course.setCategoryName(categoryService.list() .stream() - .collect(Collectors.toMap(BSCategory::getId, BSCategory::getName)) + .collect(Collectors.toMap(BSCategory::getId, BSCategory::getChineseName)) .get(course.getCategoryId())); // 赋值类别名称 }) .toList()); @@ -120,5 +124,40 @@ public class CourseController { return Result.success(this.courseService.removeById(id)); } + + @GetMapping("/listByAdmin") + public SearchResult listByAdmin(@RequestParam("page") Integer pageNumber, + @RequestParam("size") Integer size, + @RequestParam(required = false) String courseName) { + Page page = new Page<>(pageNumber, size); + + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + + Page resultPage = this.courseService.page(page, lambdaQueryWrapper); + + List courseByAdminVOS = resultPage.getRecords().stream().map( + course -> { + + CourseByAdminVO courseByAdminVO = new CourseByAdminVO(); + + course.setCategoryName(categoryService.list() + .stream() + .collect(Collectors.toMap(BSCategory::getId, BSCategory::getChineseName)) + .get(course.getCategoryId())); // 赋值类别名称 + + BeanUtils.copyProperties(course, courseByAdminVO); + + courseByAdminVO.setTeacherName(teacherService.list() + .stream() + .collect(Collectors.toMap(Teacher::getId, Teacher::getName)) + .get(course.getTeacherId()));//赋值教师名称 + + return courseByAdminVO; + } + ).toList(); + + return SearchResult.success(courseByAdminVOS, resultPage.getTotal()); + } + } diff --git a/src/main/java/com/guwan/backend/controller/CourseLevelController.java b/src/main/java/com/guwan/backend/controller/CourseLevelController.java new file mode 100644 index 0000000..1a2d5bd --- /dev/null +++ b/src/main/java/com/guwan/backend/controller/CourseLevelController.java @@ -0,0 +1,29 @@ +package com.guwan.backend.controller; + +import com.guwan.backend.common.Result; +import com.guwan.backend.pojo.entity.CourseLevel; +import com.guwan.backend.service.CourseLevelService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; +import java.util.List; + +@Slf4j +@RestController +@RequestMapping("/course/level") +@RequiredArgsConstructor +public class CourseLevelController { + /** + * 服务对象 + */ + + private final CourseLevelService courseLevelService; + + @GetMapping("/getAll") + public Result getAll() { + List courseLevelslist = courseLevelService.list(); + return Result.success(courseLevelslist); + } + +} + diff --git a/src/main/java/com/guwan/backend/controller/CourseTypeController.java b/src/main/java/com/guwan/backend/controller/CourseTypeController.java new file mode 100644 index 0000000..6940875 --- /dev/null +++ b/src/main/java/com/guwan/backend/controller/CourseTypeController.java @@ -0,0 +1,41 @@ +package com.guwan.backend.controller; + + +import com.guwan.backend.common.Result; +import com.guwan.backend.pojo.entity.CourseLevel; +import com.guwan.backend.pojo.entity.CourseType; +import com.guwan.backend.service.CourseLevelService; +import com.guwan.backend.service.CourseTypeService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 课程表(Courses)表控制层 + * + * @author Guwan + * @since 2025-03-13 22:47:31 + */ +@Slf4j +@RestController +@RequestMapping("/course/type") +@RequiredArgsConstructor +public class CourseTypeController { + /** + * 服务对象 + */ + + private final CourseTypeService courseTypeService; + + @GetMapping("/getAll") + public Result getAll() { + List courseLevelslist = courseTypeService.list(); + return Result.success(courseLevelslist); + } + +} + diff --git a/src/main/java/com/guwan/backend/controller/TeacherController.java b/src/main/java/com/guwan/backend/controller/TeacherController.java new file mode 100644 index 0000000..07f9a2b --- /dev/null +++ b/src/main/java/com/guwan/backend/controller/TeacherController.java @@ -0,0 +1,30 @@ +package com.guwan.backend.controller; + + +import com.guwan.backend.common.Result; +import com.guwan.backend.pojo.entity.Teacher; +import com.guwan.backend.service.TeacherService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@Slf4j +@RestController +@RequestMapping("/teacher") +@RequiredArgsConstructor +public class TeacherController { + + private final TeacherService teacherService; + + @GetMapping("/getAll") + public Result getAll() { + List courseLevelslist = teacherService.list(); + return Result.success(courseLevelslist); + } + +} + diff --git a/src/main/java/com/guwan/backend/controller/TestCase.java b/src/main/java/com/guwan/backend/controller/TestCase.java deleted file mode 100644 index 4886d89..0000000 --- a/src/main/java/com/guwan/backend/controller/TestCase.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.guwan.backend.controller; - -// 测试用例类 -class TestCase { - String input; // 输入数据 - String expectedOutput; // 预期输出 - int timeoutSeconds = 2;// 超时时间 - - public TestCase(String input, String expectedOutput) { - this.input = input; - this.expectedOutput = expectedOutput; - } -} \ No newline at end of file diff --git a/src/main/java/com/guwan/backend/factory/SectionVOFactory.java b/src/main/java/com/guwan/backend/factory/SectionVOFactory.java index 19d8563..889a781 100644 --- a/src/main/java/com/guwan/backend/factory/SectionVOFactory.java +++ b/src/main/java/com/guwan/backend/factory/SectionVOFactory.java @@ -5,6 +5,7 @@ import com.guwan.backend.mapper.SlideMapper; import com.guwan.backend.pojo.entity.Section; import com.guwan.backend.pojo.entity.Slide; import com.guwan.backend.pojo.response.courseDetail.*; +import com.guwan.backend.util.KKviewUrlUtil; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Component; @@ -52,6 +53,8 @@ public class SectionVOFactory { .collect(Collectors.toList()); ppt.setSlides(slideVOS); + ppt.setDownUrl(section.getUrl()); + ppt.setPreViewUrl(KKviewUrlUtil.toKKViewUrl(section.getUrl())); return ppt; default: throw new IllegalArgumentException("Unsupported type: " + section.getType()); diff --git a/src/main/java/com/guwan/backend/mapper/CourseLevelMapper.java b/src/main/java/com/guwan/backend/mapper/CourseLevelMapper.java new file mode 100644 index 0000000..345ddf8 --- /dev/null +++ b/src/main/java/com/guwan/backend/mapper/CourseLevelMapper.java @@ -0,0 +1,18 @@ +package com.guwan.backend.mapper; + +import com.guwan.backend.pojo.entity.CourseLevel; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author 12455 +* @description 针对表【course_level】的数据库操作Mapper +* @createDate 2025-05-11 13:56:43 +* @Entity com.guwan.backend.pojo.entity.CourseLevel +*/ +public interface CourseLevelMapper extends BaseMapper { + +} + + + + diff --git a/src/main/java/com/guwan/backend/mapper/CourseTypeMapper.java b/src/main/java/com/guwan/backend/mapper/CourseTypeMapper.java new file mode 100644 index 0000000..10affc7 --- /dev/null +++ b/src/main/java/com/guwan/backend/mapper/CourseTypeMapper.java @@ -0,0 +1,18 @@ +package com.guwan.backend.mapper; + +import com.guwan.backend.pojo.entity.CourseType; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author 12455 +* @description 针对表【course_type】的数据库操作Mapper +* @createDate 2025-05-11 14:43:17 +* @Entity com.guwan.backend.pojo.entity.CourseType +*/ +public interface CourseTypeMapper extends BaseMapper { + +} + + + + diff --git a/src/main/java/com/guwan/backend/pojo/dto/BSCategory.java b/src/main/java/com/guwan/backend/pojo/dto/BSCategory.java index 750af14..6f1edb5 100644 --- a/src/main/java/com/guwan/backend/pojo/dto/BSCategory.java +++ b/src/main/java/com/guwan/backend/pojo/dto/BSCategory.java @@ -23,7 +23,9 @@ public class BSCategory implements Serializable { /** * 种类名称 */ - private String name; + private String chineseName; + + private String englishName; @TableField(exist = false) private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/guwan/backend/pojo/entity/Course.java b/src/main/java/com/guwan/backend/pojo/entity/Course.java index f5cebb4..6cb24ba 100644 --- a/src/main/java/com/guwan/backend/pojo/entity/Course.java +++ b/src/main/java/com/guwan/backend/pojo/entity/Course.java @@ -37,6 +37,10 @@ public class Course implements Serializable { */ private String categoryId; + private String levelId; + + private String typeId; + /** * 分类名称 */ diff --git a/src/main/java/com/guwan/backend/pojo/entity/CourseLevel.java b/src/main/java/com/guwan/backend/pojo/entity/CourseLevel.java new file mode 100644 index 0000000..a0a833f --- /dev/null +++ b/src/main/java/com/guwan/backend/pojo/entity/CourseLevel.java @@ -0,0 +1,27 @@ +package com.guwan.backend.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * + * @TableName course_level + */ +@TableName(value ="course_level") +@Data +public class CourseLevel { + /** + * 课程级别id + */ + private String id; + + /** + * 难度中文名 + */ + private String chineseName; + + /** + * 难度英文名 + */ + private String englishName; +} \ No newline at end of file diff --git a/src/main/java/com/guwan/backend/pojo/entity/CourseType.java b/src/main/java/com/guwan/backend/pojo/entity/CourseType.java new file mode 100644 index 0000000..2a242d6 --- /dev/null +++ b/src/main/java/com/guwan/backend/pojo/entity/CourseType.java @@ -0,0 +1,29 @@ +package com.guwan.backend.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * + * @TableName course_type + */ +@TableName(value ="course_type") +@Data +public class CourseType { + /** + * 课程类别(例:全部、入门等) + */ + @TableId + private String id; + + /** + * + */ + private String chineseName; + + /** + * + */ + private String englishName; +} \ No newline at end of file diff --git a/src/main/java/com/guwan/backend/pojo/response/CourseByAdminVO.java b/src/main/java/com/guwan/backend/pojo/response/CourseByAdminVO.java new file mode 100644 index 0000000..29200fe --- /dev/null +++ b/src/main/java/com/guwan/backend/pojo/response/CourseByAdminVO.java @@ -0,0 +1,21 @@ +package com.guwan.backend.pojo.response; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class CourseByAdminVO { + private String id; + private String title; + private String categoryName; + private BigDecimal price; + private String teacherName; + private BigDecimal rating; + private Date createdAt; +} diff --git a/src/main/java/com/guwan/backend/pojo/response/courseDetail/CourseDetailVO.java b/src/main/java/com/guwan/backend/pojo/response/courseDetail/CourseDetailVO.java index 8ef7ac1..b97d9b5 100644 --- a/src/main/java/com/guwan/backend/pojo/response/courseDetail/CourseDetailVO.java +++ b/src/main/java/com/guwan/backend/pojo/response/courseDetail/CourseDetailVO.java @@ -24,6 +24,10 @@ public class CourseDetailVO { private String teacherAvatar; + private String levelName; + + private String typeName; + private Double price; private Double rating; diff --git a/src/main/java/com/guwan/backend/pojo/response/courseDetail/PptSectionVO.java b/src/main/java/com/guwan/backend/pojo/response/courseDetail/PptSectionVO.java index 72c928d..9ab7a5e 100644 --- a/src/main/java/com/guwan/backend/pojo/response/courseDetail/PptSectionVO.java +++ b/src/main/java/com/guwan/backend/pojo/response/courseDetail/PptSectionVO.java @@ -10,6 +10,8 @@ import java.util.List; @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) public class PptSectionVO extends BaseSectionVO { + private String downUrl; + private String preViewUrl; private List slides; } diff --git a/src/main/java/com/guwan/backend/service/CourseLevelService.java b/src/main/java/com/guwan/backend/service/CourseLevelService.java new file mode 100644 index 0000000..7ec7202 --- /dev/null +++ b/src/main/java/com/guwan/backend/service/CourseLevelService.java @@ -0,0 +1,13 @@ +package com.guwan.backend.service; + +import com.guwan.backend.pojo.entity.CourseLevel; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author 12455 +* @description 针对表【course_level】的数据库操作Service +* @createDate 2025-05-11 13:56:43 +*/ +public interface CourseLevelService extends IService { + +} diff --git a/src/main/java/com/guwan/backend/service/CourseTypeService.java b/src/main/java/com/guwan/backend/service/CourseTypeService.java new file mode 100644 index 0000000..cc92988 --- /dev/null +++ b/src/main/java/com/guwan/backend/service/CourseTypeService.java @@ -0,0 +1,13 @@ +package com.guwan.backend.service; + +import com.guwan.backend.pojo.entity.CourseType; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author 12455 +* @description 针对表【course_type】的数据库操作Service +* @createDate 2025-05-11 14:43:17 +*/ +public interface CourseTypeService extends IService { + +} diff --git a/src/main/java/com/guwan/backend/service/impl/CourseLevelServiceImpl.java b/src/main/java/com/guwan/backend/service/impl/CourseLevelServiceImpl.java new file mode 100644 index 0000000..f622b5a --- /dev/null +++ b/src/main/java/com/guwan/backend/service/impl/CourseLevelServiceImpl.java @@ -0,0 +1,22 @@ +package com.guwan.backend.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.guwan.backend.mapper.CourseLevelMapper; +import com.guwan.backend.pojo.entity.CourseLevel; +import com.guwan.backend.service.CourseLevelService; +import org.springframework.stereotype.Service; + +/** +* @author 12455 +* @description 针对表【course_level】的数据库操作Service实现 +* @createDate 2025-05-11 13:56:43 +*/ +@Service +public class CourseLevelServiceImpl extends ServiceImpl + implements CourseLevelService { + +} + + + + diff --git a/src/main/java/com/guwan/backend/service/impl/CourseServiceImpl.java b/src/main/java/com/guwan/backend/service/impl/CourseServiceImpl.java index efd2278..9345b7f 100644 --- a/src/main/java/com/guwan/backend/service/impl/CourseServiceImpl.java +++ b/src/main/java/com/guwan/backend/service/impl/CourseServiceImpl.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.guwan.backend.factory.SectionVOFactory; import com.guwan.backend.mapper.*; +import com.guwan.backend.mapper.CourseTypeMapper; import com.guwan.backend.pojo.entity.*; import com.guwan.backend.pojo.response.courseDetail.BaseSectionVO; import com.guwan.backend.pojo.response.courseDetail.ChapterVO; @@ -44,6 +45,10 @@ public class CourseServiceImpl extends ServiceImpl private final UserMapper userMapper; + private final CourseLevelMapper courseLevelMapper; + + private final CourseTypeMapper courseTypeMapper; + private static final Map courseStudentCounts = new ConcurrentHashMap<>(); @Override @@ -61,6 +66,8 @@ public class CourseServiceImpl extends ServiceImpl CourseDetailVO courseDetailVO = new CourseDetailVO(); courseDetailVO.setTitle(course.getTitle()); courseDetailVO.setDescription(course.getDescription()); + courseDetailVO.setLevelName(courseLevelMapper.selectById(course.getLevelId()).getChineseName()); + courseDetailVO.setTypeName(courseTypeMapper.selectById(course.getTypeId()).getChineseName()); // Course(id=1, title=黑马程序员匠心之作|C++教程从0到1入门编程, description=null, categoryId=2, categoryName=null, teacherId=1, coverImg=http://localhost:9000/photo/cover/c315f738-71aa-4329-8c7c-9092284c33c3.png, price=0.00, coursrTeacherId=null, rating=0.0, ratingCount=null, studentCount=0, videoCount=null, documentCount=null, totalDuration=null, createdAt=null, updatedAt=null) var teacherId = course.getTeacherId(); diff --git a/src/main/java/com/guwan/backend/service/impl/CourseTypeServiceImpl.java b/src/main/java/com/guwan/backend/service/impl/CourseTypeServiceImpl.java new file mode 100644 index 0000000..7de2ce5 --- /dev/null +++ b/src/main/java/com/guwan/backend/service/impl/CourseTypeServiceImpl.java @@ -0,0 +1,23 @@ +package com.guwan.backend.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.guwan.backend.mapper.CourseTypeMapper; +import com.guwan.backend.pojo.entity.CourseType; + +import com.guwan.backend.service.CourseTypeService; +import org.springframework.stereotype.Service; + +/** +* @author 12455 +* @description 针对表【course_type】的数据库操作Service实现 +* @createDate 2025-05-11 14:43:17 +*/ +@Service +public class CourseTypeServiceImpl extends ServiceImpl + implements CourseTypeService { + +} + + + + diff --git a/src/main/resources/mapper/BSCategoryMapper.xml b/src/main/resources/mapper/BSCategoryMapper.xml deleted file mode 100644 index 5d3090e..0000000 --- a/src/main/resources/mapper/BSCategoryMapper.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - id,name - - diff --git a/src/main/resources/mapper/CourseLevelMapper.xml b/src/main/resources/mapper/CourseLevelMapper.xml new file mode 100644 index 0000000..815f591 --- /dev/null +++ b/src/main/resources/mapper/CourseLevelMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + id,chinese_name,english_name + + diff --git a/src/main/resources/mapper/CourseTypeMapper.xml b/src/main/resources/mapper/CourseTypeMapper.xml new file mode 100644 index 0000000..3f034a5 --- /dev/null +++ b/src/main/resources/mapper/CourseTypeMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + id,chinese_name,english_name + +