parent
e8b488e943
commit
0f003ac422
56 changed files with 1854 additions and 85 deletions
@ -0,0 +1,34 @@ |
|||||||
|
package com.teaching.backend.common; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* 通用返回类 |
||||||
|
* |
||||||
|
* @param <T> |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class BaseResponse<T> implements Serializable { |
||||||
|
|
||||||
|
private int code; |
||||||
|
|
||||||
|
private T data; |
||||||
|
|
||||||
|
private String message; |
||||||
|
|
||||||
|
public BaseResponse(int code, T data, String message) { |
||||||
|
this.code = code; |
||||||
|
this.data = data; |
||||||
|
this.message = message; |
||||||
|
} |
||||||
|
|
||||||
|
public BaseResponse(int code, T data) { |
||||||
|
this(code, data, ""); |
||||||
|
} |
||||||
|
|
||||||
|
public BaseResponse(ErrorCode errorCode) { |
||||||
|
this(errorCode.getCode(), null, errorCode.getMessage()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,43 @@ |
|||||||
|
package com.teaching.backend.common; |
||||||
|
|
||||||
|
/** |
||||||
|
* 自定义错误码 |
||||||
|
* |
||||||
|
* @author <a href="https://github.com/liyh">程序员鱼皮</a> |
||||||
|
* @from <a href="https://yh.icu">编程导航知识星球</a> |
||||||
|
*/ |
||||||
|
public enum ErrorCode { |
||||||
|
|
||||||
|
SUCCESS(0, "ok"), |
||||||
|
PARAMS_ERROR(40000, "请求参数错误"), |
||||||
|
NOT_LOGIN_ERROR(40100, "未登录"), |
||||||
|
NO_AUTH_ERROR(40101, "无权限"), |
||||||
|
NOT_FOUND_ERROR(40400, "请求数据不存在"), |
||||||
|
FORBIDDEN_ERROR(40300, "禁止访问"), |
||||||
|
SYSTEM_ERROR(50000, "系统内部异常"), |
||||||
|
OPERATION_ERROR(50001, "操作失败"); |
||||||
|
|
||||||
|
/** |
||||||
|
* 状态码 |
||||||
|
*/ |
||||||
|
private final int code; |
||||||
|
|
||||||
|
/** |
||||||
|
* 信息 |
||||||
|
*/ |
||||||
|
private final String message; |
||||||
|
|
||||||
|
ErrorCode(int code, String message) { |
||||||
|
this.code = code; |
||||||
|
this.message = message; |
||||||
|
} |
||||||
|
|
||||||
|
public int getCode() { |
||||||
|
return code; |
||||||
|
} |
||||||
|
|
||||||
|
public String getMessage() { |
||||||
|
return message; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,52 @@ |
|||||||
|
package com.teaching.backend.common; |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回工具类 |
||||||
|
* |
||||||
|
* @author <a href="https://github.com/liyh">程序员鱼皮</a> |
||||||
|
* @from <a href="https://yh.icu">编程导航知识星球</a> |
||||||
|
*/ |
||||||
|
public class ResultUtils { |
||||||
|
|
||||||
|
/** |
||||||
|
* 成功 |
||||||
|
* |
||||||
|
* @param data |
||||||
|
* @param <T> |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static <T> BaseResponse<T> success(T data) { |
||||||
|
return new BaseResponse<>(0, data, "ok"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 失败 |
||||||
|
* |
||||||
|
* @param errorCode |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static BaseResponse error(ErrorCode errorCode) { |
||||||
|
return new BaseResponse<>(errorCode); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 失败 |
||||||
|
* |
||||||
|
* @param code |
||||||
|
* @param message |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static BaseResponse error(int code, String message) { |
||||||
|
return new BaseResponse(code, null, message); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 失败 |
||||||
|
* |
||||||
|
* @param errorCode |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static BaseResponse error(ErrorCode errorCode, String message) { |
||||||
|
return new BaseResponse(errorCode.getCode(), null, message); |
||||||
|
} |
||||||
|
} |
@ -1,9 +0,0 @@ |
|||||||
package com.teaching.backend.common; |
|
||||||
|
|
||||||
/** |
|
||||||
* @Author:youhang |
|
||||||
* @Date:2024-05-30-18:20 |
|
||||||
* @Description: |
|
||||||
*/ |
|
||||||
public class test1 { |
|
||||||
} |
|
@ -0,0 +1,29 @@ |
|||||||
|
package com.teaching.backend.config; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.DbType; |
||||||
|
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; |
||||||
|
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; |
||||||
|
import org.mybatis.spring.annotation.MapperScan; |
||||||
|
import org.springframework.context.annotation.Bean; |
||||||
|
import org.springframework.context.annotation.Configuration; |
||||||
|
|
||||||
|
/** |
||||||
|
* MyBatis Plus 配置 |
||||||
|
*/ |
||||||
|
@Configuration |
||||||
|
@MapperScan("com.teaching.backend.mapper") |
||||||
|
public class MyBatisPlusConfig { |
||||||
|
|
||||||
|
/** |
||||||
|
* 拦截器配置 |
||||||
|
* |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@Bean |
||||||
|
public MybatisPlusInterceptor mybatisPlusInterceptor() { |
||||||
|
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); |
||||||
|
// 分页插件
|
||||||
|
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); |
||||||
|
return interceptor; |
||||||
|
} |
||||||
|
} |
@ -1,21 +0,0 @@ |
|||||||
package com.teaching.backend.controller; |
|
||||||
|
|
||||||
import org.springframework.stereotype.Controller; |
|
||||||
import org.springframework.web.bind.annotation.RequestMapping; |
|
||||||
import org.springframework.web.bind.annotation.RequestMethod; |
|
||||||
import org.springframework.web.bind.annotation.ResponseBody; |
|
||||||
|
|
||||||
/** |
|
||||||
* @Author:youhang |
|
||||||
* @Date:2024-05-30-18:15 |
|
||||||
* @Description: |
|
||||||
*/ |
|
||||||
@Controller |
|
||||||
public class UserController { |
|
||||||
|
|
||||||
@RequestMapping(value = "/1",method = RequestMethod.GET) |
|
||||||
@ResponseBody |
|
||||||
public String add(){ |
|
||||||
return "yh"; |
|
||||||
} |
|
||||||
} |
|
@ -0,0 +1,110 @@ |
|||||||
|
package com.teaching.backend.controller.favour; |
||||||
|
|
||||||
|
import com.teaching.backend.common.BaseResponse; |
||||||
|
import com.teaching.backend.common.ErrorCode; |
||||||
|
import com.teaching.backend.common.ResultUtils; |
||||||
|
import com.teaching.backend.exception.BusinessException; |
||||||
|
|
||||||
|
|
||||||
|
import com.teaching.backend.model.dto.favour.courseFavour.CourseFavourAddRequest; |
||||||
|
import com.teaching.backend.model.dto.favour.courseFavour.CourseFavourAllRequest; |
||||||
|
import com.teaching.backend.model.dto.favour.courseFavour.CourseFavourListRequest; |
||||||
|
import com.teaching.backend.service.favour.SeCourseFavourService; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.apache.commons.lang3.StringUtils; |
||||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
import javax.annotation.Resource; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author:youhang |
||||||
|
* @Date:2024-05-30-20:22 |
||||||
|
* @Description: |
||||||
|
*/ |
||||||
|
@RestController |
||||||
|
@RequestMapping("/course_favour") |
||||||
|
@Slf4j |
||||||
|
public class SeCourseFavourController { |
||||||
|
|
||||||
|
@Resource |
||||||
|
private SeCourseFavourService seCourseFavourService; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 点赞 |
||||||
|
* |
||||||
|
* @param courseFavourAddRequest |
||||||
|
* @return result 执行情况 |
||||||
|
*/ |
||||||
|
@PostMapping("/add") |
||||||
|
// todo 后期加上 HttpServletRequest request 在一个fitter里面进行鉴权操作
|
||||||
|
public BaseResponse<Boolean> doFavour(@RequestBody CourseFavourAddRequest courseFavourAddRequest) { |
||||||
|
System.out.println(courseFavourAddRequest); |
||||||
|
if (StringUtils.isAnyBlank(courseFavourAddRequest.getCourseId(), courseFavourAddRequest.getUserId())) { |
||||||
|
throw new BusinessException(ErrorCode.PARAMS_ERROR); |
||||||
|
} |
||||||
|
// todo 从数据库中校验是否存在courseid , userid
|
||||||
|
Boolean result = seCourseFavourService.doCourseFavour(courseFavourAddRequest.getCourseId(), courseFavourAddRequest.getUserId()); |
||||||
|
return ResultUtils.success(result); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 课程点赞总数 |
||||||
|
* |
||||||
|
* @param courseFavourAddRequest |
||||||
|
* @return result 课程点赞总数 |
||||||
|
*/ |
||||||
|
@PostMapping("/count") |
||||||
|
// todo 后期加上 HttpServletRequest request 在一个fitter里面进行鉴权操作
|
||||||
|
public BaseResponse<Long> favourCount(@RequestBody CourseFavourAddRequest courseFavourAddRequest) { |
||||||
|
if (StringUtils.isAnyBlank(courseFavourAddRequest.getCourseId())) { |
||||||
|
throw new BusinessException(ErrorCode.PARAMS_ERROR, "请求参数不能为空"); |
||||||
|
} |
||||||
|
// todo 从数据库中校验是否存在courseid
|
||||||
|
|
||||||
|
Long result = seCourseFavourService.favourCount(courseFavourAddRequest.getCourseId()); |
||||||
|
return ResultUtils.success(result); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程下资源和知识点点赞总数 |
||||||
|
* |
||||||
|
* @param courseFavourAllRequest |
||||||
|
* @return result 课程下资源和知识点点赞总数 |
||||||
|
*/ |
||||||
|
@PostMapping("/countAll") |
||||||
|
// todo 后期加上 HttpServletRequest request 在一个fitter里面进行鉴权操作
|
||||||
|
public BaseResponse<Long> courseCount(@RequestBody CourseFavourAllRequest courseFavourAllRequest) { |
||||||
|
if (StringUtils.isAnyBlank(courseFavourAllRequest.getCourseId())) { |
||||||
|
throw new BusinessException(ErrorCode.PARAMS_ERROR, "请求参数不能为空"); |
||||||
|
} |
||||||
|
// todo 从数据库中校验是否存在courseid
|
||||||
|
|
||||||
|
Long result = seCourseFavourService.courseCount(courseFavourAllRequest.getCourseId()); |
||||||
|
return ResultUtils.success(result); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 某个用户课程列表 |
||||||
|
* |
||||||
|
* @param courseFavourListRequest |
||||||
|
* @return result 某个用户课程列表 |
||||||
|
*/ |
||||||
|
@PostMapping("/countList") |
||||||
|
// todo 后期加上 HttpServletRequest request 在一个fitter里面进行鉴权操作
|
||||||
|
public BaseResponse<List<String>> courseList(@RequestBody CourseFavourListRequest courseFavourListRequest) { |
||||||
|
if (StringUtils.isAnyBlank(courseFavourListRequest.getUserId())) { |
||||||
|
throw new BusinessException(ErrorCode.PARAMS_ERROR, "请求参数-用户id不能为空"); |
||||||
|
} |
||||||
|
// todo 从数据库中校验是否存在userid
|
||||||
|
List<String> result = seCourseFavourService.courseList(courseFavourListRequest.getUserId()); |
||||||
|
return ResultUtils.success(result); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,50 @@ |
|||||||
|
package com.teaching.backend.controller.favour; |
||||||
|
|
||||||
|
import com.teaching.backend.common.BaseResponse; |
||||||
|
import com.teaching.backend.common.ErrorCode; |
||||||
|
import com.teaching.backend.common.ResultUtils; |
||||||
|
import com.teaching.backend.exception.BusinessException; |
||||||
|
|
||||||
|
import com.teaching.backend.model.dto.favour.knowFavour.KnowFavourAddRequest; |
||||||
|
import com.teaching.backend.service.favour.SeKnowFavourService; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.apache.commons.lang3.StringUtils; |
||||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
import javax.annotation.Resource; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author:youhang |
||||||
|
* @Date:2024-05-30-20:22 |
||||||
|
* @Description: |
||||||
|
*/ |
||||||
|
@RestController |
||||||
|
@RequestMapping("/know_favour") |
||||||
|
@Slf4j |
||||||
|
public class SeKnowFavourController { |
||||||
|
|
||||||
|
@Resource |
||||||
|
private SeKnowFavourService seKnowFavourService; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 点赞 |
||||||
|
* |
||||||
|
* @param knowFavourAddRequest |
||||||
|
* @return result 执行情况 |
||||||
|
*/ |
||||||
|
@PostMapping("/add") |
||||||
|
// todo 后期加上 HttpServletRequest request 在一个fitter里面进行鉴权操作
|
||||||
|
public BaseResponse<Boolean> doFavour(@RequestBody KnowFavourAddRequest knowFavourAddRequest) { |
||||||
|
if (StringUtils.isAnyBlank(knowFavourAddRequest.getCourseId(), knowFavourAddRequest.getKnowId(), knowFavourAddRequest.getUserId())) { |
||||||
|
throw new BusinessException(ErrorCode.PARAMS_ERROR); |
||||||
|
} |
||||||
|
// todo 从数据库中校验是否存在knowid , userid ,courseid
|
||||||
|
Boolean result = seKnowFavourService.doKnowFavour(knowFavourAddRequest.getCourseId(), knowFavourAddRequest.getKnowId(), knowFavourAddRequest.getUserId()); |
||||||
|
return ResultUtils.success(result); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,51 @@ |
|||||||
|
package com.teaching.backend.controller.favour; |
||||||
|
|
||||||
|
import com.teaching.backend.common.BaseResponse; |
||||||
|
import com.teaching.backend.common.ErrorCode; |
||||||
|
import com.teaching.backend.common.ResultUtils; |
||||||
|
import com.teaching.backend.exception.BusinessException; |
||||||
|
|
||||||
|
import com.teaching.backend.model.dto.favour.resourceFavour.ResourceFavourAddRequest; |
||||||
|
import com.teaching.backend.service.favour.SeResourceFavourService; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.apache.commons.lang3.StringUtils; |
||||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
import javax.annotation.Resource; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author:youhang |
||||||
|
* @Date:2024-05-30-20:22 |
||||||
|
* @Description: |
||||||
|
*/ |
||||||
|
@RestController |
||||||
|
@RequestMapping("/resource_favour") |
||||||
|
@Slf4j |
||||||
|
public class SeResourceFavourController { |
||||||
|
|
||||||
|
@Resource |
||||||
|
private SeResourceFavourService seResourceFavourService; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 收藏 |
||||||
|
* |
||||||
|
* @param resourceFavourAddRequest |
||||||
|
* @return result 执行情况 |
||||||
|
*/ |
||||||
|
@PostMapping("/add") |
||||||
|
// todo 后期加上 HttpServletRequest request 在一个fitter里面进行鉴权操作
|
||||||
|
public BaseResponse<Boolean> doFavour(@RequestBody ResourceFavourAddRequest resourceFavourAddRequest) { |
||||||
|
if (StringUtils.isAnyBlank(resourceFavourAddRequest.getCourseId(), resourceFavourAddRequest.getResourceId(), resourceFavourAddRequest.getUserId())) { |
||||||
|
throw new BusinessException(ErrorCode.PARAMS_ERROR); |
||||||
|
} |
||||||
|
// todo 从数据库中校验是否存在resourceid , userid ,courseid
|
||||||
|
Boolean result = seResourceFavourService.doResourceFavour(resourceFavourAddRequest.getCourseId(), resourceFavourAddRequest.getResourceId(), resourceFavourAddRequest.getUserId()); |
||||||
|
return ResultUtils.success(result); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,87 @@ |
|||||||
|
package com.teaching.backend.controller.thumb; |
||||||
|
|
||||||
|
import com.teaching.backend.common.BaseResponse; |
||||||
|
import com.teaching.backend.common.ErrorCode; |
||||||
|
import com.teaching.backend.common.ResultUtils; |
||||||
|
import com.teaching.backend.exception.BusinessException; |
||||||
|
import com.teaching.backend.model.dto.thumb.coursethumb.CourseThumbAddRequest; |
||||||
|
import com.teaching.backend.model.dto.thumb.coursethumb.CourseThumbAllRequest; |
||||||
|
import com.teaching.backend.service.thumb.SeCourseThumbService; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.apache.commons.lang3.StringUtils; |
||||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
import javax.annotation.Resource; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author:youhang |
||||||
|
* @Date:2024-05-30-20:22 |
||||||
|
* @Description: |
||||||
|
*/ |
||||||
|
@RestController |
||||||
|
@RequestMapping("/course_thumb") |
||||||
|
@Slf4j |
||||||
|
public class SeCourseThumbController { |
||||||
|
|
||||||
|
@Resource |
||||||
|
private SeCourseThumbService seCourseThumbService; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 点赞/取消点赞 |
||||||
|
* |
||||||
|
* @param courseThumbAddRequest |
||||||
|
* @return result 执行情况 |
||||||
|
*/ |
||||||
|
@PostMapping("/") |
||||||
|
// todo 后期加上 HttpServletRequest request 在一个fitter里面进行鉴权操作
|
||||||
|
public BaseResponse<Boolean> doThumb(@RequestBody CourseThumbAddRequest courseThumbAddRequest) { |
||||||
|
if (StringUtils.isAnyBlank(courseThumbAddRequest.getCourseId(), courseThumbAddRequest.getUserId())) { |
||||||
|
throw new BusinessException(ErrorCode.PARAMS_ERROR); |
||||||
|
} |
||||||
|
// todo 从数据库中校验是否存在courseid , userid 从课程表和用户表查询
|
||||||
|
Boolean result = seCourseThumbService.doCourseThumb(courseThumbAddRequest.getCourseId(), courseThumbAddRequest.getUserId()); |
||||||
|
return ResultUtils.success(result); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 课程点赞总数 |
||||||
|
* |
||||||
|
* @param courseThumbAddRequest |
||||||
|
* @return result 课程点赞总数 |
||||||
|
*/ |
||||||
|
@PostMapping("/count") |
||||||
|
// todo 后期加上 HttpServletRequest request 在一个fitter里面进行鉴权操作
|
||||||
|
public BaseResponse<Long> thumbCount(@RequestBody CourseThumbAddRequest courseThumbAddRequest) { |
||||||
|
if (StringUtils.isAnyBlank(courseThumbAddRequest.getCourseId())) { |
||||||
|
throw new BusinessException(ErrorCode.PARAMS_ERROR, "请求参数不能为空"); |
||||||
|
} |
||||||
|
// todo 从数据库中校验是否存在courseid
|
||||||
|
|
||||||
|
Long result = seCourseThumbService.thumbCount(courseThumbAddRequest.getCourseId()); |
||||||
|
return ResultUtils.success(result); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程下资源和知识点点赞总数 |
||||||
|
* |
||||||
|
* @param courseThumbAllRequest |
||||||
|
* @return result 课程下资源和知识点点赞总数 |
||||||
|
*/ |
||||||
|
@PostMapping("/countAll") |
||||||
|
// todo 后期加上 HttpServletRequest request 在一个fitter里面进行鉴权操作
|
||||||
|
public BaseResponse<Long> courseCount(@RequestBody CourseThumbAllRequest courseThumbAllRequest) { |
||||||
|
if (StringUtils.isAnyBlank(courseThumbAllRequest.getCourseId())) { |
||||||
|
throw new BusinessException(ErrorCode.PARAMS_ERROR, "请求参数不能为空"); |
||||||
|
} |
||||||
|
// todo 从数据库中校验是否存在courseid
|
||||||
|
|
||||||
|
Long result = seCourseThumbService.courseCount(courseThumbAllRequest.getCourseId()); |
||||||
|
return ResultUtils.success(result); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,49 @@ |
|||||||
|
package com.teaching.backend.controller.thumb; |
||||||
|
|
||||||
|
import com.teaching.backend.common.BaseResponse; |
||||||
|
import com.teaching.backend.common.ErrorCode; |
||||||
|
import com.teaching.backend.common.ResultUtils; |
||||||
|
import com.teaching.backend.exception.BusinessException; |
||||||
|
import com.teaching.backend.model.dto.thumb.knowthumb.KnowThumbAddRequest; |
||||||
|
import com.teaching.backend.service.thumb.SeKnowThumbService; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.apache.commons.lang3.StringUtils; |
||||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
import javax.annotation.Resource; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author:youhang |
||||||
|
* @Date:2024-05-30-20:22 |
||||||
|
* @Description: |
||||||
|
*/ |
||||||
|
@RestController |
||||||
|
@RequestMapping("/know_thumb") |
||||||
|
@Slf4j |
||||||
|
public class SeKnowThumbController { |
||||||
|
|
||||||
|
@Resource |
||||||
|
private SeKnowThumbService seKnowThumbService; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 点赞 |
||||||
|
* |
||||||
|
* @param knowThumbAddRequest |
||||||
|
* @return result 执行情况 |
||||||
|
*/ |
||||||
|
@PostMapping("/add") |
||||||
|
// todo 后期加上 HttpServletRequest request 在一个fitter里面进行鉴权操作
|
||||||
|
public BaseResponse<Boolean> doThumb(@RequestBody KnowThumbAddRequest knowThumbAddRequest) { |
||||||
|
if (StringUtils.isAnyBlank(knowThumbAddRequest.getCourseId(), knowThumbAddRequest.getKnowId(), knowThumbAddRequest.getUserId())) { |
||||||
|
throw new BusinessException(ErrorCode.PARAMS_ERROR); |
||||||
|
} |
||||||
|
// todo 从数据库中校验是否存在knowid , userid ,courseid
|
||||||
|
Boolean result = seKnowThumbService.doKnowThumb(knowThumbAddRequest.getCourseId(), knowThumbAddRequest.getKnowId(), knowThumbAddRequest.getUserId()); |
||||||
|
return ResultUtils.success(result); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,49 @@ |
|||||||
|
package com.teaching.backend.controller.thumb; |
||||||
|
|
||||||
|
import com.teaching.backend.common.BaseResponse; |
||||||
|
import com.teaching.backend.common.ErrorCode; |
||||||
|
import com.teaching.backend.common.ResultUtils; |
||||||
|
import com.teaching.backend.exception.BusinessException; |
||||||
|
import com.teaching.backend.model.dto.thumb.resourcethumb.ResourceThumbAddRequest; |
||||||
|
import com.teaching.backend.service.thumb.SeResourceThumbService; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.apache.commons.lang3.StringUtils; |
||||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
import javax.annotation.Resource; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author:youhang |
||||||
|
* @Date:2024-05-30-20:22 |
||||||
|
* @Description: |
||||||
|
*/ |
||||||
|
@RestController |
||||||
|
@RequestMapping("/resource_thumb") |
||||||
|
@Slf4j |
||||||
|
public class SeResourceThumbController { |
||||||
|
|
||||||
|
@Resource |
||||||
|
private SeResourceThumbService seResourceThumbService; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 点赞 |
||||||
|
* |
||||||
|
* @param resourceThumbAddRequest |
||||||
|
* @return result 执行情况 |
||||||
|
*/ |
||||||
|
@PostMapping("/add") |
||||||
|
// todo 后期加上 HttpServletRequest request 在一个fitter里面进行鉴权操作
|
||||||
|
public BaseResponse<Boolean> doThumb(@RequestBody ResourceThumbAddRequest resourceThumbAddRequest) { |
||||||
|
if (StringUtils.isAnyBlank(resourceThumbAddRequest.getCourseId(), resourceThumbAddRequest.getResourceId(), resourceThumbAddRequest.getUserId())) { |
||||||
|
throw new BusinessException(ErrorCode.PARAMS_ERROR); |
||||||
|
} |
||||||
|
// todo 从数据库中校验是否存在resourceid , userid ,courseid
|
||||||
|
Boolean result = seResourceThumbService.doResourceThumb(resourceThumbAddRequest.getCourseId(), resourceThumbAddRequest.getResourceId(), resourceThumbAddRequest.getUserId()); |
||||||
|
return ResultUtils.success(result); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,37 @@ |
|||||||
|
package com.teaching.backend.exception; |
||||||
|
|
||||||
|
|
||||||
|
import com.teaching.backend.common.ErrorCode; |
||||||
|
|
||||||
|
/** |
||||||
|
* 自定义异常类 |
||||||
|
* |
||||||
|
* @author <a href="https://github.com/liyh">程序员鱼皮</a> |
||||||
|
* @from <a href="https://yh.icu">编程导航知识星球</a> |
||||||
|
*/ |
||||||
|
public class BusinessException extends RuntimeException { |
||||||
|
|
||||||
|
/** |
||||||
|
* 错误码 |
||||||
|
*/ |
||||||
|
private final int code; |
||||||
|
|
||||||
|
public BusinessException(int code, String message) { |
||||||
|
super(message); |
||||||
|
this.code = code; |
||||||
|
} |
||||||
|
|
||||||
|
public BusinessException(ErrorCode errorCode) { |
||||||
|
super(errorCode.getMessage()); |
||||||
|
this.code = errorCode.getCode(); |
||||||
|
} |
||||||
|
|
||||||
|
public BusinessException(ErrorCode errorCode, String message) { |
||||||
|
super(message); |
||||||
|
this.code = errorCode.getCode(); |
||||||
|
} |
||||||
|
|
||||||
|
public int getCode() { |
||||||
|
return code; |
||||||
|
} |
||||||
|
} |
@ -1,9 +0,0 @@ |
|||||||
package com.teaching.backend.exception; |
|
||||||
|
|
||||||
/** |
|
||||||
* @Author:youhang |
|
||||||
* @Date:2024-05-30-18:20 |
|
||||||
* @Description: |
|
||||||
*/ |
|
||||||
public class test1 { |
|
||||||
} |
|
@ -0,0 +1,15 @@ |
|||||||
|
package com.teaching.backend.mapper.favour; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||||
|
import com.teaching.backend.model.entity.favour.SeCourseFavour; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程点赞数据库操作 |
||||||
|
*/ |
||||||
|
public interface SeCourseFavourMapper extends BaseMapper<SeCourseFavour> { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,16 @@ |
|||||||
|
package com.teaching.backend.mapper.favour; |
||||||
|
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||||
|
import com.teaching.backend.model.entity.favour.SeKnowFavour; |
||||||
|
|
||||||
|
/** |
||||||
|
* 知识点赞数据库操作 |
||||||
|
*/ |
||||||
|
public interface SeKnowFavourMapper extends BaseMapper<SeKnowFavour> { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,17 @@ |
|||||||
|
package com.teaching.backend.mapper.favour; |
||||||
|
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||||
|
import com.teaching.backend.model.entity.favour.SeResourceFavour; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 课程资源点赞数据库操作 |
||||||
|
*/ |
||||||
|
public interface SeResourceFavourMapper extends BaseMapper<SeResourceFavour> { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,9 +0,0 @@ |
|||||||
package com.teaching.backend.mapper; |
|
||||||
|
|
||||||
/** |
|
||||||
* @Author:youhang |
|
||||||
* @Date:2024-05-30-18:20 |
|
||||||
* @Description: |
|
||||||
*/ |
|
||||||
public class test1 { |
|
||||||
} |
|
@ -0,0 +1,15 @@ |
|||||||
|
package com.teaching.backend.mapper.thumb; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||||
|
import com.teaching.backend.model.entity.thumb.SeCourseThumb; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程点赞数据库操作 |
||||||
|
*/ |
||||||
|
public interface SeCourseThumbMapper extends BaseMapper<SeCourseThumb> { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,16 @@ |
|||||||
|
package com.teaching.backend.mapper.thumb; |
||||||
|
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||||
|
import com.teaching.backend.model.entity.thumb.SeKnowThumb; |
||||||
|
|
||||||
|
/** |
||||||
|
* 知识点赞数据库操作 |
||||||
|
*/ |
||||||
|
public interface SeKnowThumbMapper extends BaseMapper<SeKnowThumb> { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,17 @@ |
|||||||
|
package com.teaching.backend.mapper.thumb; |
||||||
|
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||||
|
import com.teaching.backend.model.entity.thumb.SeResourceThumb; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 课程资源点赞数据库操作 |
||||||
|
*/ |
||||||
|
public interface SeResourceThumbMapper extends BaseMapper<SeResourceThumb> { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,24 @@ |
|||||||
|
package com.teaching.backend.model.dto.favour.courseFavour; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程点赞请求 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class CourseFavourAddRequest implements Serializable { |
||||||
|
|
||||||
|
/** |
||||||
|
* 帖子 id |
||||||
|
*/ |
||||||
|
private String courseId; |
||||||
|
|
||||||
|
/** |
||||||
|
* user id |
||||||
|
*/ |
||||||
|
private String userId; |
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L; |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package com.teaching.backend.model.dto.favour.courseFavour; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程点赞请求 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class CourseFavourAllRequest implements Serializable { |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程 id |
||||||
|
*/ |
||||||
|
private String courseId; |
||||||
|
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L; |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package com.teaching.backend.model.dto.favour.courseFavour; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程点赞请求 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class CourseFavourListRequest implements Serializable { |
||||||
|
|
||||||
|
/** |
||||||
|
* 用户 id |
||||||
|
*/ |
||||||
|
private String userId; |
||||||
|
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L; |
||||||
|
} |
@ -0,0 +1,29 @@ |
|||||||
|
package com.teaching.backend.model.dto.favour.knowFavour; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* 知识点点赞请求 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class KnowFavourAddRequest implements Serializable { |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程 id |
||||||
|
*/ |
||||||
|
private String courseId; |
||||||
|
|
||||||
|
/** |
||||||
|
* 知识点 id |
||||||
|
*/ |
||||||
|
private String knowId; |
||||||
|
|
||||||
|
/** |
||||||
|
* user id |
||||||
|
*/ |
||||||
|
private String userId; |
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L; |
||||||
|
} |
@ -0,0 +1,29 @@ |
|||||||
|
package com.teaching.backend.model.dto.favour.resourceFavour; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* 资源点赞请求 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class ResourceFavourAddRequest implements Serializable { |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程 id |
||||||
|
*/ |
||||||
|
private String courseId; |
||||||
|
|
||||||
|
/** |
||||||
|
* 知识点 id |
||||||
|
*/ |
||||||
|
private String resourceId; |
||||||
|
|
||||||
|
/** |
||||||
|
* user id |
||||||
|
*/ |
||||||
|
private String userId; |
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L; |
||||||
|
} |
@ -1,9 +0,0 @@ |
|||||||
package com.teaching.backend.model.dto; |
|
||||||
|
|
||||||
/** |
|
||||||
* @Author:youhang |
|
||||||
* @Date:2024-05-30-18:20 |
|
||||||
* @Description: |
|
||||||
*/ |
|
||||||
public class test1 { |
|
||||||
} |
|
@ -0,0 +1,24 @@ |
|||||||
|
package com.teaching.backend.model.dto.thumb.coursethumb; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程点赞请求 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class CourseThumbAddRequest implements Serializable { |
||||||
|
|
||||||
|
/** |
||||||
|
* 帖子 id |
||||||
|
*/ |
||||||
|
private String courseId; |
||||||
|
|
||||||
|
/** |
||||||
|
* user id |
||||||
|
*/ |
||||||
|
private String userId; |
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L; |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package com.teaching.backend.model.dto.thumb.coursethumb; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程点赞请求 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class CourseThumbAllRequest implements Serializable { |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程 id |
||||||
|
*/ |
||||||
|
private String courseId; |
||||||
|
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L; |
||||||
|
} |
@ -0,0 +1,29 @@ |
|||||||
|
package com.teaching.backend.model.dto.thumb.knowthumb; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* 知识点点赞请求 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class KnowThumbAddRequest implements Serializable { |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程 id |
||||||
|
*/ |
||||||
|
private String courseId; |
||||||
|
|
||||||
|
/** |
||||||
|
* 知识点 id |
||||||
|
*/ |
||||||
|
private String knowId; |
||||||
|
|
||||||
|
/** |
||||||
|
* user id |
||||||
|
*/ |
||||||
|
private String userId; |
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L; |
||||||
|
} |
@ -0,0 +1,29 @@ |
|||||||
|
package com.teaching.backend.model.dto.thumb.resourcethumb; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* 资源点赞请求 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class ResourceThumbAddRequest implements Serializable { |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程 id |
||||||
|
*/ |
||||||
|
private String courseId; |
||||||
|
|
||||||
|
/** |
||||||
|
* 知识点 id |
||||||
|
*/ |
||||||
|
private String resourceId; |
||||||
|
|
||||||
|
/** |
||||||
|
* user id |
||||||
|
*/ |
||||||
|
private String userId; |
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L; |
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
package com.teaching.backend.model.entity.favour; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableField; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableId; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程点赞 |
||||||
|
*/ |
||||||
|
@TableName(value = "se_course_favour") |
||||||
|
@Data |
||||||
|
public class SeCourseFavour implements Serializable { |
||||||
|
/** |
||||||
|
* id |
||||||
|
*/ |
||||||
|
@TableId(type = IdType.ASSIGN_ID) |
||||||
|
private Long id; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程 id |
||||||
|
*/ |
||||||
|
private String courseId; |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建用户 id |
||||||
|
*/ |
||||||
|
private String userId; |
||||||
|
|
||||||
|
@TableField(exist = false) |
||||||
|
private static final long serialVersionUID = 1L; |
||||||
|
} |
@ -0,0 +1,40 @@ |
|||||||
|
package com.teaching.backend.model.entity.favour; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableField; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableId; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* 知识点点赞 |
||||||
|
*/ |
||||||
|
@TableName(value = "se_know_favour") |
||||||
|
@Data |
||||||
|
public class SeKnowFavour implements Serializable { |
||||||
|
/** |
||||||
|
* id |
||||||
|
*/ |
||||||
|
@TableId(type = IdType.ASSIGN_ID) |
||||||
|
private Long id; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程 id |
||||||
|
*/ |
||||||
|
private String courseId; |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建知识点 id |
||||||
|
*/ |
||||||
|
private String knowId; |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建用户 id |
||||||
|
*/ |
||||||
|
private String userId; |
||||||
|
|
||||||
|
@TableField(exist = false) |
||||||
|
private static final long serialVersionUID = 1L; |
||||||
|
} |
@ -0,0 +1,40 @@ |
|||||||
|
package com.teaching.backend.model.entity.favour; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableField; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableId; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* 资源点赞 |
||||||
|
*/ |
||||||
|
@TableName(value = "se_resource_favour") |
||||||
|
@Data |
||||||
|
public class SeResourceFavour implements Serializable { |
||||||
|
/** |
||||||
|
* id |
||||||
|
*/ |
||||||
|
@TableId(type = IdType.ASSIGN_ID) |
||||||
|
private Long id; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程 id |
||||||
|
*/ |
||||||
|
private String courseId; |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建知识点 id |
||||||
|
*/ |
||||||
|
private String resourceId; |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建用户 id |
||||||
|
*/ |
||||||
|
private String userId; |
||||||
|
|
||||||
|
@TableField(exist = false) |
||||||
|
private static final long serialVersionUID = 1L; |
||||||
|
} |
@ -1,9 +0,0 @@ |
|||||||
package com.teaching.backend.model.entity; |
|
||||||
|
|
||||||
/** |
|
||||||
* @Author:youhang |
|
||||||
* @Date:2024-05-30-18:20 |
|
||||||
* @Description: |
|
||||||
*/ |
|
||||||
public class test1 { |
|
||||||
} |
|
@ -0,0 +1,36 @@ |
|||||||
|
package com.teaching.backend.model.entity.thumb; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableField; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableId; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程点赞 |
||||||
|
*/ |
||||||
|
@TableName(value = "se_course_thumb") |
||||||
|
@Data |
||||||
|
public class SeCourseThumb implements Serializable { |
||||||
|
/** |
||||||
|
* id |
||||||
|
*/ |
||||||
|
@TableId(type = IdType.ASSIGN_ID) |
||||||
|
private Long id; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程 id |
||||||
|
*/ |
||||||
|
private String courseId; |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建用户 id |
||||||
|
*/ |
||||||
|
private String userId; |
||||||
|
|
||||||
|
@TableField(exist = false) |
||||||
|
private static final long serialVersionUID = 1L; |
||||||
|
} |
@ -0,0 +1,40 @@ |
|||||||
|
package com.teaching.backend.model.entity.thumb; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableField; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableId; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* 知识点点赞 |
||||||
|
*/ |
||||||
|
@TableName(value = "se_know_thumb") |
||||||
|
@Data |
||||||
|
public class SeKnowThumb implements Serializable { |
||||||
|
/** |
||||||
|
* id |
||||||
|
*/ |
||||||
|
@TableId(type = IdType.ASSIGN_ID) |
||||||
|
private Long id; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程 id |
||||||
|
*/ |
||||||
|
private String courseId; |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建知识点 id |
||||||
|
*/ |
||||||
|
private String knowId; |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建用户 id |
||||||
|
*/ |
||||||
|
private String userId; |
||||||
|
|
||||||
|
@TableField(exist = false) |
||||||
|
private static final long serialVersionUID = 1L; |
||||||
|
} |
@ -0,0 +1,40 @@ |
|||||||
|
package com.teaching.backend.model.entity.thumb; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableField; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableId; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* 资源点赞 |
||||||
|
*/ |
||||||
|
@TableName(value = "se_resource_thumb") |
||||||
|
@Data |
||||||
|
public class SeResourceThumb implements Serializable { |
||||||
|
/** |
||||||
|
* id |
||||||
|
*/ |
||||||
|
@TableId(type = IdType.ASSIGN_ID) |
||||||
|
private Long id; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程 id |
||||||
|
*/ |
||||||
|
private String courseId; |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建知识点 id |
||||||
|
*/ |
||||||
|
private String resourceId; |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建用户 id |
||||||
|
*/ |
||||||
|
private String userId; |
||||||
|
|
||||||
|
@TableField(exist = false) |
||||||
|
private static final long serialVersionUID = 1L; |
||||||
|
} |
@ -1,9 +0,0 @@ |
|||||||
package com.teaching.backend.model; |
|
||||||
|
|
||||||
/** |
|
||||||
* @Author:youhang |
|
||||||
* @Date:2024-05-30-18:20 |
|
||||||
* @Description: |
|
||||||
*/ |
|
||||||
public class test1 { |
|
||||||
} |
|
@ -0,0 +1,51 @@ |
|||||||
|
package com.teaching.backend.service.favour; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||||
|
import com.teaching.backend.model.entity.favour.SeCourseFavour; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author:youhang |
||||||
|
* @Date:2024-05-30-20:22 |
||||||
|
* @Description: |
||||||
|
*/ |
||||||
|
public interface SeCourseFavourService extends IService<SeCourseFavour> { |
||||||
|
|
||||||
|
/** |
||||||
|
* 收藏/取消收藏 |
||||||
|
* |
||||||
|
* @param courseId |
||||||
|
* @param userId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
boolean doCourseFavour(String courseId, String userId); |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 收藏总数 |
||||||
|
* |
||||||
|
* @param courseId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
long favourCount(String courseId); |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 课程下资源和知识点的收藏总数 |
||||||
|
* |
||||||
|
* @param courseId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
long courseCount(String courseId); |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 某个用户课程列表 |
||||||
|
* |
||||||
|
* @param userId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
List<String> courseList(String userId); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
package com.teaching.backend.service.favour; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||||
|
import com.teaching.backend.model.entity.favour.SeKnowFavour; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author:youhang |
||||||
|
* @Date:2024-05-30-20:22 |
||||||
|
* @Description: |
||||||
|
*/ |
||||||
|
public interface SeKnowFavourService extends IService<SeKnowFavour> { |
||||||
|
|
||||||
|
/** |
||||||
|
* 收藏 |
||||||
|
* |
||||||
|
* @param courseId |
||||||
|
* @param userId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
boolean doKnowFavour(String courseId, String resourceId, String userId); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
package com.teaching.backend.service.favour; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||||
|
import com.teaching.backend.model.entity.favour.SeResourceFavour; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author:youhang |
||||||
|
* @Date:2024-05-30-20:22 |
||||||
|
* @Description: |
||||||
|
*/ |
||||||
|
public interface SeResourceFavourService extends IService<SeResourceFavour> { |
||||||
|
|
||||||
|
/** |
||||||
|
* 收藏 |
||||||
|
* |
||||||
|
* @param courseId |
||||||
|
* @param userId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
boolean doResourceFavour(String courseId, String resourceId, String userId); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,123 @@ |
|||||||
|
package com.teaching.backend.service.impl.favour; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||||
|
import com.teaching.backend.common.ErrorCode; |
||||||
|
import com.teaching.backend.exception.BusinessException; |
||||||
|
import com.teaching.backend.mapper.favour.SeCourseFavourMapper; |
||||||
|
import com.teaching.backend.model.entity.favour.SeCourseFavour; |
||||||
|
import com.teaching.backend.model.entity.favour.SeKnowFavour; |
||||||
|
import com.teaching.backend.model.entity.favour.SeResourceFavour; |
||||||
|
|
||||||
|
import com.teaching.backend.service.favour.SeCourseFavourService; |
||||||
|
import com.teaching.backend.service.favour.SeKnowFavourService; |
||||||
|
import com.teaching.backend.service.favour.SeResourceFavourService; |
||||||
|
|
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import javax.annotation.Resource; |
||||||
|
import java.util.List; |
||||||
|
import java.util.concurrent.locks.Lock; |
||||||
|
import java.util.concurrent.locks.ReentrantLock; |
||||||
|
import java.util.stream.Collectors; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* @Author:youhang |
||||||
|
* @Date:2024-05-30-20:23 |
||||||
|
* @Description: |
||||||
|
*/ |
||||||
|
@Service |
||||||
|
public class SeCourseFavourServiceImpl extends ServiceImpl<SeCourseFavourMapper, SeCourseFavour> implements SeCourseFavourService { |
||||||
|
|
||||||
|
|
||||||
|
@Resource |
||||||
|
private SeResourceFavourService seResourceFavourService; |
||||||
|
|
||||||
|
@Resource |
||||||
|
SeKnowFavourService seKnowFavourService; |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean doCourseFavour(String courseId, String userId) { |
||||||
|
System.out.println("进入点赞" + courseId + userId); |
||||||
|
// todo 先查询数据库记录,该用户是否点赞
|
||||||
|
SeCourseFavour seCourseFavour = new SeCourseFavour(); |
||||||
|
seCourseFavour.setCourseId(courseId); |
||||||
|
seCourseFavour.setUserId(userId); |
||||||
|
QueryWrapper<SeCourseFavour> favourQueryWrapper = new QueryWrapper<>(seCourseFavour); |
||||||
|
SeCourseFavour oldSeCourseFavour = this.getOne(favourQueryWrapper); |
||||||
|
boolean result = false; |
||||||
|
//已点赞
|
||||||
|
if (oldSeCourseFavour != null) { |
||||||
|
// 取消点赞 删除记录
|
||||||
|
result = this.remove(favourQueryWrapper); |
||||||
|
if (result) { |
||||||
|
System.out.println("取消点赞成功"); |
||||||
|
return result; |
||||||
|
} else { |
||||||
|
throw new BusinessException(ErrorCode.SYSTEM_ERROR); |
||||||
|
} |
||||||
|
} else { |
||||||
|
// 每个用户串行点赞
|
||||||
|
// 锁必须要包裹住事务方法
|
||||||
|
Lock lock = new ReentrantLock(); |
||||||
|
lock.lock(); |
||||||
|
try { |
||||||
|
result = this.save(seCourseFavour); |
||||||
|
} catch (Exception e) { |
||||||
|
throw new BusinessException(ErrorCode.OPERATION_ERROR); |
||||||
|
} finally { |
||||||
|
lock.unlock(); |
||||||
|
System.out.println("点赞成功"); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public long favourCount(String courseId) { |
||||||
|
System.out.println("进入课程点赞统计" + courseId); |
||||||
|
QueryWrapper<SeCourseFavour> favourQueryWrapper = new QueryWrapper<>(); |
||||||
|
favourQueryWrapper.eq("course_id", courseId); |
||||||
|
long result = this.count(favourQueryWrapper); |
||||||
|
if (result == 0) { |
||||||
|
throw new BusinessException(ErrorCode.SYSTEM_ERROR, "查询参数不存在"); |
||||||
|
} else { |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public long courseCount(String courseId) { |
||||||
|
System.out.println("进入课程下资源和知识点的点赞统计" + courseId); |
||||||
|
QueryWrapper<SeResourceFavour> ResourceQueryWrapper = new QueryWrapper<>(); |
||||||
|
ResourceQueryWrapper.eq("course_id", courseId); |
||||||
|
long result1 = seResourceFavourService.count(ResourceQueryWrapper); |
||||||
|
QueryWrapper<SeKnowFavour> KnowQueryWrapper = new QueryWrapper<>(); |
||||||
|
KnowQueryWrapper.eq("course_id", courseId); |
||||||
|
long result2 = seKnowFavourService.count(KnowQueryWrapper); |
||||||
|
long result = result1 + result2; |
||||||
|
if (result == 0) { |
||||||
|
throw new BusinessException(ErrorCode.SYSTEM_ERROR, "查询参数不存在"); |
||||||
|
} else { |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 某个用户课程列表 |
||||||
|
* |
||||||
|
* @param userId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public List<String> courseList(String userId) { |
||||||
|
QueryWrapper<SeCourseFavour> courseQueryWrapper = new QueryWrapper<>(); |
||||||
|
courseQueryWrapper.eq("user_id", userId); |
||||||
|
List<String> list = this.list(courseQueryWrapper).stream().map(SeCourseFavour::getCourseId).collect(Collectors.toList()); |
||||||
|
return list; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,64 @@ |
|||||||
|
package com.teaching.backend.service.impl.favour; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||||
|
import com.teaching.backend.common.ErrorCode; |
||||||
|
import com.teaching.backend.exception.BusinessException; |
||||||
|
import com.teaching.backend.mapper.favour.SeKnowFavourMapper; |
||||||
|
import com.teaching.backend.model.entity.favour.SeKnowFavour; |
||||||
|
|
||||||
|
import com.teaching.backend.service.favour.SeKnowFavourService; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import java.util.concurrent.locks.Lock; |
||||||
|
import java.util.concurrent.locks.ReentrantLock; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* @Author:youhang |
||||||
|
* @Date:2024-05-30-20:23 |
||||||
|
* @Description: |
||||||
|
*/ |
||||||
|
@Service |
||||||
|
public class SeKnowFavourServiceImpl extends ServiceImpl<SeKnowFavourMapper, SeKnowFavour> implements SeKnowFavourService { |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean doKnowFavour(String courseId, String knowId, String userId) { |
||||||
|
System.out.println("进入知识点点赞" + knowId + userId); |
||||||
|
// 先查询数据库记录,该用户是否点赞
|
||||||
|
SeKnowFavour seKnowFavour = new SeKnowFavour(); |
||||||
|
seKnowFavour.setKnowId(knowId); |
||||||
|
seKnowFavour.setUserId(userId); |
||||||
|
seKnowFavour.setCourseId(courseId); |
||||||
|
QueryWrapper<SeKnowFavour> favourQueryWrapper = new QueryWrapper<>(seKnowFavour); |
||||||
|
SeKnowFavour oldSeKnowFavour = this.getOne(favourQueryWrapper); |
||||||
|
boolean result = false; |
||||||
|
//已点赞
|
||||||
|
if (oldSeKnowFavour != null) { |
||||||
|
// 取消点赞 删除记录
|
||||||
|
result = this.remove(favourQueryWrapper); |
||||||
|
if (result) { |
||||||
|
System.out.println("取消点赞成功"); |
||||||
|
return result; |
||||||
|
} else { |
||||||
|
throw new BusinessException(ErrorCode.SYSTEM_ERROR); |
||||||
|
} |
||||||
|
} else { |
||||||
|
// 每个用户串行点赞
|
||||||
|
// 锁必须要包裹住事务方法
|
||||||
|
Lock lock = new ReentrantLock(); |
||||||
|
lock.lock(); |
||||||
|
try { |
||||||
|
result = this.save(seKnowFavour); |
||||||
|
} catch (Exception e) { |
||||||
|
throw new BusinessException(ErrorCode.OPERATION_ERROR); |
||||||
|
} finally { |
||||||
|
lock.unlock(); |
||||||
|
System.out.println("点赞成功"); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,65 @@ |
|||||||
|
package com.teaching.backend.service.impl.favour; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||||
|
import com.teaching.backend.common.ErrorCode; |
||||||
|
import com.teaching.backend.exception.BusinessException; |
||||||
|
|
||||||
|
|
||||||
|
import com.teaching.backend.mapper.favour.SeResourceFavourMapper; |
||||||
|
import com.teaching.backend.model.entity.favour.SeResourceFavour; |
||||||
|
import com.teaching.backend.service.favour.SeResourceFavourService; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import java.util.concurrent.locks.Lock; |
||||||
|
import java.util.concurrent.locks.ReentrantLock; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* @Author:youhang |
||||||
|
* @Date:2024-05-30-20:23 |
||||||
|
* @Description: |
||||||
|
*/ |
||||||
|
@Service |
||||||
|
public class SeResourceFavourServiceImpl extends ServiceImpl<SeResourceFavourMapper, SeResourceFavour> implements SeResourceFavourService { |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean doResourceFavour(String courseId, String resourceId, String userId) { |
||||||
|
System.out.println("进入知识点点赞" + resourceId + userId); |
||||||
|
// 先查询数据库记录,该用户是否点赞
|
||||||
|
SeResourceFavour seResourceFavour = new SeResourceFavour(); |
||||||
|
seResourceFavour.setResourceId(resourceId); |
||||||
|
seResourceFavour.setUserId(userId); |
||||||
|
seResourceFavour.setCourseId(courseId); |
||||||
|
QueryWrapper<SeResourceFavour> thumbQueryWrapper = new QueryWrapper<>(seResourceFavour); |
||||||
|
SeResourceFavour oldSeResourceFavour = this.getOne(thumbQueryWrapper); |
||||||
|
boolean result = false; |
||||||
|
//已点赞
|
||||||
|
if (oldSeResourceFavour != null) { |
||||||
|
// 取消点赞 删除记录
|
||||||
|
result = this.remove(thumbQueryWrapper); |
||||||
|
if (result) { |
||||||
|
System.out.println("取消点赞成功"); |
||||||
|
return result; |
||||||
|
} else { |
||||||
|
throw new BusinessException(ErrorCode.SYSTEM_ERROR); |
||||||
|
} |
||||||
|
} else { |
||||||
|
// 每个用户串行点赞
|
||||||
|
// 锁必须要包裹住事务方法
|
||||||
|
Lock lock = new ReentrantLock(); |
||||||
|
lock.lock(); |
||||||
|
try { |
||||||
|
result = this.save(seResourceFavour); |
||||||
|
} catch (Exception e) { |
||||||
|
throw new BusinessException(ErrorCode.OPERATION_ERROR); |
||||||
|
} finally { |
||||||
|
lock.unlock(); |
||||||
|
System.out.println("点赞成功"); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,105 @@ |
|||||||
|
package com.teaching.backend.service.impl.thumb; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||||
|
import com.teaching.backend.common.ErrorCode; |
||||||
|
import com.teaching.backend.exception.BusinessException; |
||||||
|
import com.teaching.backend.mapper.thumb.SeCourseThumbMapper; |
||||||
|
import com.teaching.backend.model.entity.thumb.SeCourseThumb; |
||||||
|
import com.teaching.backend.model.entity.thumb.SeKnowThumb; |
||||||
|
import com.teaching.backend.model.entity.thumb.SeResourceThumb; |
||||||
|
import com.teaching.backend.service.thumb.SeCourseThumbService; |
||||||
|
import com.teaching.backend.service.thumb.SeKnowThumbService; |
||||||
|
import com.teaching.backend.service.thumb.SeResourceThumbService; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import javax.annotation.Resource; |
||||||
|
import java.util.concurrent.locks.Lock; |
||||||
|
import java.util.concurrent.locks.ReentrantLock; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* @Author:youhang |
||||||
|
* @Date:2024-05-30-20:23 |
||||||
|
* @Description: |
||||||
|
*/ |
||||||
|
@Service |
||||||
|
public class SeCourseThumbServiceImpl extends ServiceImpl<SeCourseThumbMapper, SeCourseThumb> implements SeCourseThumbService { |
||||||
|
|
||||||
|
|
||||||
|
@Resource |
||||||
|
private SeResourceThumbService seResourceThumbService; |
||||||
|
|
||||||
|
@Resource |
||||||
|
SeKnowThumbService seKnowThumbService; |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean doCourseThumb(String courseId, String userId) { |
||||||
|
System.out.println("进入点赞" + courseId + userId); |
||||||
|
// 先查询数据库记录,该用户是否点赞
|
||||||
|
SeCourseThumb seCourseThumb = new SeCourseThumb(); |
||||||
|
seCourseThumb.setCourseId(courseId); |
||||||
|
seCourseThumb.setUserId(userId); |
||||||
|
QueryWrapper<SeCourseThumb> thumbQueryWrapper = new QueryWrapper<>(seCourseThumb); |
||||||
|
SeCourseThumb oldSeCourseThumb = this.getOne(thumbQueryWrapper); |
||||||
|
boolean result = false; |
||||||
|
//已点赞
|
||||||
|
if (oldSeCourseThumb != null) { |
||||||
|
// 取消点赞 删除记录
|
||||||
|
result = this.remove(thumbQueryWrapper); |
||||||
|
if (result) { |
||||||
|
System.out.println("取消点赞成功"); |
||||||
|
return result; |
||||||
|
} else { |
||||||
|
throw new BusinessException(ErrorCode.SYSTEM_ERROR); |
||||||
|
} |
||||||
|
} else { |
||||||
|
// 每个用户串行点赞
|
||||||
|
// 锁必须要包裹住事务方法
|
||||||
|
Lock lock = new ReentrantLock(); |
||||||
|
lock.lock(); |
||||||
|
try { |
||||||
|
result = this.save(seCourseThumb); |
||||||
|
} catch (Exception e) { |
||||||
|
throw new BusinessException(ErrorCode.OPERATION_ERROR); |
||||||
|
} finally { |
||||||
|
lock.unlock(); |
||||||
|
System.out.println("点赞成功"); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public long thumbCount(String courseId) { |
||||||
|
System.out.println("进入课程点赞统计" + courseId); |
||||||
|
QueryWrapper<SeCourseThumb> thumbQueryWrapper = new QueryWrapper<>(); |
||||||
|
thumbQueryWrapper.eq("course_id", courseId); |
||||||
|
long result = this.count(thumbQueryWrapper); |
||||||
|
if (result == 0) { |
||||||
|
throw new BusinessException(ErrorCode.SYSTEM_ERROR, "查询参数不存在"); |
||||||
|
} else { |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public long courseCount(String courseId) { |
||||||
|
System.out.println("进入课程下资源和知识点的点赞统计" + courseId); |
||||||
|
QueryWrapper<SeResourceThumb> ResourceQueryWrapper = new QueryWrapper<>(); |
||||||
|
ResourceQueryWrapper.eq("course_id", courseId); |
||||||
|
long result1 = seResourceThumbService.count(ResourceQueryWrapper); |
||||||
|
QueryWrapper<SeKnowThumb> KnowQueryWrapper = new QueryWrapper<>(); |
||||||
|
KnowQueryWrapper.eq("course_id", courseId); |
||||||
|
long result2 = seKnowThumbService.count(KnowQueryWrapper); |
||||||
|
long result = result1 + result2; |
||||||
|
if (result == 0) { |
||||||
|
throw new BusinessException(ErrorCode.SYSTEM_ERROR, "查询参数不存在"); |
||||||
|
} else { |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,63 @@ |
|||||||
|
package com.teaching.backend.service.impl.thumb; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||||
|
import com.teaching.backend.common.ErrorCode; |
||||||
|
import com.teaching.backend.exception.BusinessException; |
||||||
|
import com.teaching.backend.mapper.thumb.SeKnowThumbMapper; |
||||||
|
import com.teaching.backend.model.entity.thumb.SeKnowThumb; |
||||||
|
import com.teaching.backend.service.thumb.SeKnowThumbService; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import java.util.concurrent.locks.Lock; |
||||||
|
import java.util.concurrent.locks.ReentrantLock; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* @Author:youhang |
||||||
|
* @Date:2024-05-30-20:23 |
||||||
|
* @Description: |
||||||
|
*/ |
||||||
|
@Service |
||||||
|
public class SeKnowThumbServiceImpl extends ServiceImpl<SeKnowThumbMapper, SeKnowThumb> implements SeKnowThumbService { |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean doKnowThumb(String courseId, String knowId, String userId) { |
||||||
|
System.out.println("进入知识点点赞" + knowId + userId); |
||||||
|
// 先查询数据库记录,该用户是否点赞
|
||||||
|
SeKnowThumb seKnowThumb = new SeKnowThumb(); |
||||||
|
seKnowThumb.setKnowId(knowId); |
||||||
|
seKnowThumb.setUserId(userId); |
||||||
|
seKnowThumb.setCourseId(courseId); |
||||||
|
QueryWrapper<SeKnowThumb> thumbQueryWrapper = new QueryWrapper<>(seKnowThumb); |
||||||
|
SeKnowThumb oldSeKnowThumb = this.getOne(thumbQueryWrapper); |
||||||
|
boolean result = false; |
||||||
|
//已点赞
|
||||||
|
if (oldSeKnowThumb != null) { |
||||||
|
// 取消点赞 删除记录
|
||||||
|
result = this.remove(thumbQueryWrapper); |
||||||
|
if (result) { |
||||||
|
System.out.println("取消点赞成功"); |
||||||
|
return result; |
||||||
|
} else { |
||||||
|
throw new BusinessException(ErrorCode.SYSTEM_ERROR); |
||||||
|
} |
||||||
|
} else { |
||||||
|
// 每个用户串行点赞
|
||||||
|
// 锁必须要包裹住事务方法
|
||||||
|
Lock lock = new ReentrantLock(); |
||||||
|
lock.lock(); |
||||||
|
try { |
||||||
|
result = this.save(seKnowThumb); |
||||||
|
} catch (Exception e) { |
||||||
|
throw new BusinessException(ErrorCode.OPERATION_ERROR); |
||||||
|
} finally { |
||||||
|
lock.unlock(); |
||||||
|
System.out.println("点赞成功"); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,63 @@ |
|||||||
|
package com.teaching.backend.service.impl.thumb; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||||
|
import com.teaching.backend.common.ErrorCode; |
||||||
|
import com.teaching.backend.exception.BusinessException; |
||||||
|
import com.teaching.backend.mapper.thumb.SeResourceThumbMapper; |
||||||
|
import com.teaching.backend.model.entity.thumb.SeResourceThumb; |
||||||
|
import com.teaching.backend.service.thumb.SeResourceThumbService; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import java.util.concurrent.locks.Lock; |
||||||
|
import java.util.concurrent.locks.ReentrantLock; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* @Author:youhang |
||||||
|
* @Date:2024-05-30-20:23 |
||||||
|
* @Description: |
||||||
|
*/ |
||||||
|
@Service |
||||||
|
public class SeResourceThumbServiceImpl extends ServiceImpl<SeResourceThumbMapper, SeResourceThumb> implements SeResourceThumbService { |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean doResourceThumb(String courseId, String resourceId, String userId) { |
||||||
|
System.out.println("进入知识点点赞" + resourceId + userId); |
||||||
|
// 先查询数据库记录,该用户是否点赞
|
||||||
|
SeResourceThumb seResourceThumb = new SeResourceThumb(); |
||||||
|
seResourceThumb.setResourceId(resourceId); |
||||||
|
seResourceThumb.setUserId(userId); |
||||||
|
seResourceThumb.setCourseId(courseId); |
||||||
|
QueryWrapper<SeResourceThumb> thumbQueryWrapper = new QueryWrapper<>(seResourceThumb); |
||||||
|
SeResourceThumb oldSeResourceThumb = this.getOne(thumbQueryWrapper); |
||||||
|
boolean result = false; |
||||||
|
//已点赞
|
||||||
|
if (oldSeResourceThumb != null) { |
||||||
|
// 取消点赞 删除记录
|
||||||
|
result = this.remove(thumbQueryWrapper); |
||||||
|
if (result) { |
||||||
|
System.out.println("取消点赞成功"); |
||||||
|
return result; |
||||||
|
} else { |
||||||
|
throw new BusinessException(ErrorCode.SYSTEM_ERROR); |
||||||
|
} |
||||||
|
} else { |
||||||
|
// 每个用户串行点赞
|
||||||
|
// 锁必须要包裹住事务方法
|
||||||
|
Lock lock = new ReentrantLock(); |
||||||
|
lock.lock(); |
||||||
|
try { |
||||||
|
result = this.save(seResourceThumb); |
||||||
|
} catch (Exception e) { |
||||||
|
throw new BusinessException(ErrorCode.OPERATION_ERROR); |
||||||
|
} finally { |
||||||
|
lock.unlock(); |
||||||
|
System.out.println("点赞成功"); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -1,9 +0,0 @@ |
|||||||
package com.teaching.backend.service; |
|
||||||
|
|
||||||
/** |
|
||||||
* @Author:youhang |
|
||||||
* @Date:2024-05-30-18:20 |
|
||||||
* @Description: |
|
||||||
*/ |
|
||||||
public class test1 { |
|
||||||
} |
|
@ -0,0 +1,40 @@ |
|||||||
|
package com.teaching.backend.service.thumb; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||||
|
import com.teaching.backend.model.entity.thumb.SeCourseThumb; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author:youhang |
||||||
|
* @Date:2024-05-30-20:22 |
||||||
|
* @Description: |
||||||
|
*/ |
||||||
|
public interface SeCourseThumbService extends IService<SeCourseThumb> { |
||||||
|
|
||||||
|
/** |
||||||
|
* 点赞 |
||||||
|
* |
||||||
|
* @param courseId |
||||||
|
* @param userId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
boolean doCourseThumb(String courseId, String userId); |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 点赞总数 |
||||||
|
* |
||||||
|
* @param courseId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
long thumbCount(String courseId); |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 课程下资源和知识点的点赞总数 |
||||||
|
* |
||||||
|
* @param courseId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
long courseCount(String courseId); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
package com.teaching.backend.service.thumb; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||||
|
import com.teaching.backend.model.entity.thumb.SeKnowThumb; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author:youhang |
||||||
|
* @Date:2024-05-30-20:22 |
||||||
|
* @Description: |
||||||
|
*/ |
||||||
|
public interface SeKnowThumbService extends IService<SeKnowThumb> { |
||||||
|
|
||||||
|
/** |
||||||
|
* 点赞 |
||||||
|
* |
||||||
|
* @param courseId |
||||||
|
* @param userId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
boolean doKnowThumb(String courseId, String resourceId, String userId); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
package com.teaching.backend.service.thumb; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||||
|
import com.teaching.backend.model.entity.thumb.SeResourceThumb; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author:youhang |
||||||
|
* @Date:2024-05-30-20:22 |
||||||
|
* @Description: |
||||||
|
*/ |
||||||
|
public interface SeResourceThumbService extends IService<SeResourceThumb> { |
||||||
|
|
||||||
|
/** |
||||||
|
* 点赞 |
||||||
|
* |
||||||
|
* @param courseId |
||||||
|
* @param userId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
boolean doResourceThumb(String courseId, String resourceId, String userId); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,18 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<!DOCTYPE mapper |
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" |
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||||
|
<mapper namespace="com.teaching.backend.mapper.thumb.SeCourseThumbMapper"> |
||||||
|
|
||||||
|
<resultMap id="BaseResultMap" type="com.teaching.backend.model.entity.thumb.SeCourseThumb"> |
||||||
|
<id property="id" column="id" jdbcType="BIGINT"/> |
||||||
|
<result property="courseId" column="course_id" jdbcType="BIGINT"/> |
||||||
|
<result property="userId" column="user_id" jdbcType="BIGINT"/> |
||||||
|
</resultMap> |
||||||
|
|
||||||
|
<sql id="Base_Column_List"> |
||||||
|
id |
||||||
|
,courseId, |
||||||
|
userId |
||||||
|
</sql> |
||||||
|
</mapper> |
Loading…
Reference in new issue