feat: 添加笔记本
This commit is contained in:
parent
717c3509b4
commit
f964e37531
@ -2,8 +2,11 @@ package asia.yulinling.workflow.controller;
|
|||||||
|
|
||||||
import asia.yulinling.workflow.constant.Status;
|
import asia.yulinling.workflow.constant.Status;
|
||||||
import asia.yulinling.workflow.dto.request.NotebookRequest;
|
import asia.yulinling.workflow.dto.request.NotebookRequest;
|
||||||
|
import asia.yulinling.workflow.dto.request.PageParam;
|
||||||
|
import asia.yulinling.workflow.dto.response.PageResult;
|
||||||
import asia.yulinling.workflow.model.ApiResponse;
|
import asia.yulinling.workflow.model.ApiResponse;
|
||||||
import asia.yulinling.workflow.model.entity.Notebook;
|
import asia.yulinling.workflow.model.entity.Notebook;
|
||||||
|
import asia.yulinling.workflow.model.vo.NotebookVO;
|
||||||
import asia.yulinling.workflow.service.NotebookService;
|
import asia.yulinling.workflow.service.NotebookService;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@ -27,18 +30,20 @@ public class NotebookController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/notebooks")
|
@GetMapping("/notebooks")
|
||||||
public void notebooksGet() {
|
public ApiResponse<PageResult<NotebookVO>> notebooksGet(@Valid PageParam pageParam) {
|
||||||
|
PageResult<NotebookVO> notebookList = notebookService.getNotebookList(pageParam);
|
||||||
|
return ApiResponse.ofStatus(Status.SUCCESS, notebookList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/notebooks/{id}")
|
@GetMapping("/notebooks/{id}")
|
||||||
public void notebooksGet(@PathVariable String id) {
|
public void notebooksGet(@PathVariable Long id) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@PutMapping("/notebooks/{id}")
|
@PutMapping("/notebooks/{id}")
|
||||||
public void notebooksPut(@PathVariable String id) {
|
public void notebooksPut(@PathVariable Long id) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping("/notebooks/{id}")
|
@DeleteMapping("/notebooks/{id}")
|
||||||
public void notebooksDelete(@PathVariable String id) {
|
public void notebooksDelete(@PathVariable Long id) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,41 @@
|
|||||||
|
package asia.yulinling.workflow.exception;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 业务异常
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author YLL
|
||||||
|
* @since 2025/7/31
|
||||||
|
*/
|
||||||
|
public class ServiceException extends RuntimeException {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 错误提示
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private String detailMessage;
|
||||||
|
|
||||||
|
public ServiceException() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServiceException(String message) {
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServiceException setDetailMessage(String detailMessage) {
|
||||||
|
this.detailMessage = detailMessage;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServiceException setMessage(String message) {
|
||||||
|
this.message = message;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,6 +1,7 @@
|
|||||||
package asia.yulinling.workflow.exception.handler;
|
package asia.yulinling.workflow.exception.handler;
|
||||||
|
|
||||||
import asia.yulinling.workflow.exception.PageException;
|
import asia.yulinling.workflow.exception.PageException;
|
||||||
|
import asia.yulinling.workflow.exception.ServiceException;
|
||||||
import asia.yulinling.workflow.model.ApiResponse;
|
import asia.yulinling.workflow.model.ApiResponse;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.web.bind.annotation.ControllerAdvice;
|
import org.springframework.web.bind.annotation.ControllerAdvice;
|
||||||
@ -34,6 +35,19 @@ public class GlobalExceptionHandler {
|
|||||||
return ApiResponse.of(500, e.getMessage(), null);
|
return ApiResponse.of(500, e.getMessage(), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统一 ServiceException 异常处理
|
||||||
|
*
|
||||||
|
* @param e ServiceException
|
||||||
|
* @return 统一返回 json 格式
|
||||||
|
*/
|
||||||
|
@ExceptionHandler(ServiceException.class)
|
||||||
|
@ResponseBody
|
||||||
|
public ApiResponse<?> catchErrorHandler(ServiceException e) {
|
||||||
|
log.error("service error:{}", e.getMessage());
|
||||||
|
return ApiResponse.of(500, e.getMessage(), null);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 统一 页面 异常处理
|
* 统一 页面 异常处理
|
||||||
*
|
*
|
||||||
|
|||||||
@ -42,13 +42,13 @@ public class Notebook {
|
|||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
@TableField("created_at")
|
@TableField("created_at")
|
||||||
Date createTime;
|
Date createdTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新时间
|
* 更新时间
|
||||||
*/
|
*/
|
||||||
@TableField("update_at")
|
@TableField("updated_at")
|
||||||
Date updateTime;
|
Date updatedTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 笔记本内的笔记数量
|
* 笔记本内的笔记数量
|
||||||
|
|||||||
@ -0,0 +1,56 @@
|
|||||||
|
package asia.yulinling.workflow.model.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 笔记本VO
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author YLL
|
||||||
|
* @since 2025/8/3
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class NotebookVO {
|
||||||
|
/**
|
||||||
|
* 主键
|
||||||
|
*/
|
||||||
|
Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户id,外键
|
||||||
|
*/
|
||||||
|
Long userId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 笔记本名称
|
||||||
|
*/
|
||||||
|
String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 笔记本颜色标识
|
||||||
|
*/
|
||||||
|
String color;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 笔记本图标标识
|
||||||
|
*/
|
||||||
|
String icon;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
Date createdTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新时间
|
||||||
|
*/
|
||||||
|
Date updatedTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 笔记本内的笔记数量
|
||||||
|
*/
|
||||||
|
Integer notesCount;
|
||||||
|
}
|
||||||
@ -1,6 +1,9 @@
|
|||||||
package asia.yulinling.workflow.service;
|
package asia.yulinling.workflow.service;
|
||||||
|
|
||||||
|
import asia.yulinling.workflow.dto.request.PageParam;
|
||||||
|
import asia.yulinling.workflow.dto.response.PageResult;
|
||||||
import asia.yulinling.workflow.model.entity.Notebook;
|
import asia.yulinling.workflow.model.entity.Notebook;
|
||||||
|
import asia.yulinling.workflow.model.vo.NotebookVO;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -12,34 +15,53 @@ public interface NotebookService {
|
|||||||
*
|
*
|
||||||
* @param notebook 笔记本
|
* @param notebook 笔记本
|
||||||
*/
|
*/
|
||||||
void addNotebook(Notebook notebook);
|
int addNotebook(Notebook notebook);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除笔记本
|
* 删除笔记本
|
||||||
*
|
*
|
||||||
* @param id 笔记本id
|
* @param notebookId 笔记本id
|
||||||
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
void deleteNotebook(Long id);
|
int deleteNotebookById(Long notebookId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新笔记本
|
* 更新笔记本
|
||||||
*
|
*
|
||||||
* @param notebook 笔记本
|
* @param notebook 笔记本
|
||||||
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
void updateNotebook(Notebook notebook);
|
int updateNotebook(Notebook notebook);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取笔记本内容
|
* 获取笔记本内容
|
||||||
*
|
*
|
||||||
* @param id 笔记本id
|
* @param notebookId 笔记本id
|
||||||
* @return 笔记本
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
Notebook getNotebook(Long id);
|
Notebook getNotebook(Long notebookId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取笔记本列表
|
* 获取笔记本列表
|
||||||
*
|
*
|
||||||
|
* @param pageParam 分页参数
|
||||||
* @return 笔记本列表
|
* @return 笔记本列表
|
||||||
*/
|
*/
|
||||||
List<Notebook> getNotebookList();
|
PageResult<NotebookVO> getNotebookList(PageParam pageParam);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取指定用户的笔记本列表
|
||||||
|
*
|
||||||
|
* @param userId 用户id
|
||||||
|
* @return 笔记本列表
|
||||||
|
*/
|
||||||
|
List<Notebook> getNotebookListByUserId(Long userId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检测笔记本Id存在
|
||||||
|
*
|
||||||
|
* @param notebookId 笔记本id
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
boolean checkNotebookIdExist(Long notebookId);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,6 +18,8 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
@Transactional
|
@Transactional
|
||||||
public interface UserService {
|
public interface UserService {
|
||||||
|
|
||||||
|
boolean checkUserIdExist(Long userId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取用户列表分页
|
* 获取用户列表分页
|
||||||
*
|
*
|
||||||
|
|||||||
@ -1,44 +1,114 @@
|
|||||||
package asia.yulinling.workflow.service.impl;
|
package asia.yulinling.workflow.service.impl;
|
||||||
|
|
||||||
|
import asia.yulinling.workflow.dto.request.PageParam;
|
||||||
|
import asia.yulinling.workflow.dto.response.PageResult;
|
||||||
|
import asia.yulinling.workflow.exception.ServiceException;
|
||||||
import asia.yulinling.workflow.mapper.NotebookMapper;
|
import asia.yulinling.workflow.mapper.NotebookMapper;
|
||||||
import asia.yulinling.workflow.model.entity.Notebook;
|
import asia.yulinling.workflow.model.entity.Notebook;
|
||||||
|
import asia.yulinling.workflow.model.vo.NotebookVO;
|
||||||
import asia.yulinling.workflow.service.NotebookService;
|
import asia.yulinling.workflow.service.NotebookService;
|
||||||
|
import asia.yulinling.workflow.service.UserService;
|
||||||
|
import asia.yulinling.workflow.utils.PageUtil;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class NotebookServiceImpl implements NotebookService {
|
public class NotebookServiceImpl implements NotebookService {
|
||||||
private final NotebookMapper notebookMapper;
|
private final NotebookMapper notebookMapper;
|
||||||
|
private final UserService userService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addNotebook(Notebook notebook) {
|
public int addNotebook(Notebook notebook) {
|
||||||
if (notebook == null) {
|
|
||||||
return;
|
if (!userService.checkUserIdExist(notebook.getUserId())) {
|
||||||
|
throw new ServiceException("用户不存在");
|
||||||
}
|
}
|
||||||
|
|
||||||
notebookMapper.insert(notebook);
|
return notebookMapper.insert(notebook);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deleteNotebook(Long id) {
|
public int deleteNotebookById(Long notebookId) {
|
||||||
|
if (!userService.checkUserIdExist(notebookId)) {
|
||||||
|
throw new ServiceException("笔记本不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
return notebookMapper.deleteById(notebookId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateNotebook(Notebook notebook) {
|
public int updateNotebook(Notebook notebook) {
|
||||||
|
if (!userService.checkUserIdExist(notebook.getUserId())) {
|
||||||
|
throw new ServiceException("笔记本不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
return notebookMapper.updateById(notebook);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Notebook getNotebook(Long id) {
|
public Notebook getNotebook(Long notebookId) {
|
||||||
return null;
|
if (!userService.checkUserIdExist(notebookId)) {
|
||||||
|
throw new ServiceException("笔记本不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
return notebookMapper.selectById(notebookId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取笔记本列表
|
||||||
|
*
|
||||||
|
* @param pageParam 分页参数
|
||||||
|
* @return 笔记本列表
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<Notebook> getNotebookList() {
|
public PageResult<NotebookVO> getNotebookList(PageParam pageParam) {
|
||||||
return List.of();
|
|
||||||
|
|
||||||
|
Page<Notebook> page = new Page<>(pageParam.getPageNum(), pageParam.getPageSize());
|
||||||
|
Page<Notebook> notebookPage = notebookMapper.selectPage(page, null);
|
||||||
|
|
||||||
|
List<NotebookVO> notebookVOList = new ArrayList<>();
|
||||||
|
for (Notebook notebook : notebookPage.getRecords()) {
|
||||||
|
NotebookVO notebookVO = new NotebookVO();
|
||||||
|
BeanUtils.copyProperties(notebook, notebookVO);
|
||||||
|
notebookVOList.add(notebookVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
return PageUtil.buildPageResult(notebookPage, notebookVOList);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取指定用户的笔记本列表
|
||||||
|
*
|
||||||
|
* @param userId 用户id
|
||||||
|
* @return 笔记本列表
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<Notebook> getNotebookListByUserId(Long userId) {
|
||||||
|
if (!userService.checkUserIdExist(userId)) {
|
||||||
|
throw new ServiceException("用户不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
return notebookMapper.selectList(new LambdaQueryWrapper<Notebook>().eq(Notebook::getUserId, userId));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检测笔记本Id存在
|
||||||
|
*
|
||||||
|
* @param notebookId 笔记本id
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean checkNotebookIdExist(Long notebookId) {
|
||||||
|
return notebookMapper.exists(new LambdaQueryWrapper<Notebook>().eq(Notebook::getId, notebookId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -47,6 +47,17 @@ public class UserServiceImpl implements UserService {
|
|||||||
private final RoleUserMapper roleUserMapper;
|
private final RoleUserMapper roleUserMapper;
|
||||||
private final RoleMapper roleMapper;
|
private final RoleMapper roleMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验用户id存在
|
||||||
|
*
|
||||||
|
* @param userId 用户id
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean checkUserIdExist(Long userId) {
|
||||||
|
return userMapper.exists(new LambdaQueryWrapper<User>().eq(User::getId, userId));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取用户列表分页
|
* 获取用户列表分页
|
||||||
*
|
*
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user