Bot 操作的后端 API 定义

This commit is contained in:
flykhan 2023-02-22 22:40:30 +08:00
parent bf098bf0d4
commit 0230d316fb
14 changed files with 401 additions and 0 deletions

View File

@ -0,0 +1,18 @@
package com.kob.backend.controller.user.bot;
import com.kob.backend.service.user.bot.AddService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
public class AddController {
@Autowired
private AddService addService;
@PostMapping("/user/bot/add/")
public Map<String,String> add(@RequestParam Map<String,String> data){
return addService.add(data);
}
}

View File

@ -0,0 +1,22 @@
package com.kob.backend.controller.user.bot;
import com.kob.backend.pojo.Bot;
import com.kob.backend.service.user.bot.GetListService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@RestController
public class GetListController {
@Autowired
private GetListService getListService;
@GetMapping("/user/bot/getlist/")
public List<Bot> getList(){
return getListService.getList();
}
}

View File

@ -0,0 +1,20 @@
package com.kob.backend.controller.user.bot;
import com.kob.backend.service.user.bot.RemoveService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
public class RemoveController {
@Autowired
private RemoveService removeService;
@PostMapping("/user/bot/remove/")
public Map<String,String> remove(@RequestParam Map<String,String> data){
return removeService.remove(data);
}
}

View File

@ -0,0 +1,20 @@
package com.kob.backend.controller.user.bot;
import com.kob.backend.service.user.bot.UpdateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
public class UpdateController {
@Autowired
private UpdateService updateService;
@PostMapping("/user/bot/update/")
public Map<String,String> update(@RequestParam Map<String,String> data){
return updateService.update(data);
}
}

View File

@ -0,0 +1,9 @@
package com.kob.backend.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.kob.backend.pojo.Bot;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface BotMapper extends BaseMapper<Bot> {
}

View File

@ -0,0 +1,34 @@
//用于将 Mysql Bot 转换为 class
package com.kob.backend.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Bot {
// 主键自增
@TableId(type = IdType.AUTO)
private Integer id;
// 注意在pojo中需要定义成userId在queryWrapper中的名称仍然为user_id
private Integer userId;
private String title;
private String description;
private String content;
private Integer rating;
// pojo中定义日期格式的注解@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createtime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date modifytime;
}

View File

@ -0,0 +1,78 @@
package com.kob.backend.service.impl.user.bot;
import com.kob.backend.mapper.BotMapper;
import com.kob.backend.pojo.Bot;
import com.kob.backend.pojo.User;
import com.kob.backend.service.impl.utils.UserDetailsImpl;
import com.kob.backend.service.user.bot.AddService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Service
public class AddServiceImpl implements AddService {
// 使用 @Autowired 注入接口,调用 BotMapper 来修改数据库
@Autowired
private BotMapper botMapper;
@Override
public Map<String, String> add(Map<String, String> data) {
// 取出 User
UsernamePasswordAuthenticationToken authenticationToken =
(UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
UserDetailsImpl loginUser = (UserDetailsImpl) authenticationToken.getPrincipal();
User user = loginUser.getUser();
String title = data.get("title");
String description = data.get("description");
String content = data.get("content");
Map<String, String> map = new HashMap<>();
if (title == null || title.length() == 0) {
map.put("error_message", "标题不能为空");
return map;
}
if (title.length() > 100) {
map.put("error_message", "标题长度不能大于100");
return map;
}
if (description == null || description.length() == 0) {
// 提供默认描述信息
description = "这个用户很懒,什么也没留下~";
}
if (description != null && description.length() > 300) {
map.put("error_message", "描述信息长度不能大于300");
return map;
}
if (content == null || content.length() == 0) {
map.put("error_message", "代码不能为空");
return map;
}
if (content.length() > 10000) {
map.put("error_message", "代码长度不能超过一万");
return map;
}
// 定义当前时间
Date now = new Date();
// 定义一个新 Bot ;创建时间和修改时间开始应该一样
Bot bot = new Bot(null, user.getId(), title, description, content, 1500, now, now);
// 将新建的 Bot 注入数据库中
botMapper.insert(bot);
map.put("error_message", "success");
return map;
}
}

View File

@ -0,0 +1,33 @@
package com.kob.backend.service.impl.user.bot;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.kob.backend.mapper.BotMapper;
import com.kob.backend.pojo.Bot;
import com.kob.backend.pojo.User;
import com.kob.backend.service.impl.utils.UserDetailsImpl;
import com.kob.backend.service.user.bot.GetListService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class GetListServiceImpl implements GetListService {
@Autowired
private BotMapper botMapper;
@Override
public List<Bot> getList() {
UsernamePasswordAuthenticationToken authenticationToken =
(UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
UserDetailsImpl loginUser = (UserDetailsImpl) authenticationToken.getPrincipal();
User user = loginUser.getUser();
QueryWrapper<Bot> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("user_id",user.getId());
return botMapper.selectList(queryWrapper);
}
}

View File

@ -0,0 +1,53 @@
package com.kob.backend.service.impl.user.bot;
import com.kob.backend.mapper.BotMapper;
import com.kob.backend.pojo.Bot;
import com.kob.backend.pojo.User;
import com.kob.backend.service.impl.utils.UserDetailsImpl;
import com.kob.backend.service.user.bot.RemoveService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
@Service
public class RemoveServiceImpl implements RemoveService {
@Autowired
private BotMapper botMapper;
@Override
public Map<String, String> remove(Map<String, String> data) {
// 先取出当前用户信息
UsernamePasswordAuthenticationToken authenticationToken =
(UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
UserDetailsImpl loginUser = (UserDetailsImpl) authenticationToken.getPrincipal();
User user = loginUser.getUser();
// 从用户输入参数判断要删除的 bot id
int bot_id = Integer.parseInt(data.get("bot_id"));
Bot bot = botMapper.selectById(bot_id);
// 定义返回值
Map<String, String> map = new HashMap<>();
// 如果 bot 不存在
if (bot == null) {
map.put("error_message", "Bot 不存在或已被删除");
return map;
}
// 如果 bot user_id 不等于 User id
if (!bot.getUserId().equals(user.getId())) {
map.put("error_message", "你无权删除别人的 bot");
return map;
}
// 判断成功后进行删除
botMapper.deleteById(bot_id);
map.put("error_message", "success");
return map;
}
}

View File

@ -0,0 +1,85 @@
package com.kob.backend.service.impl.user.bot;
import com.kob.backend.mapper.BotMapper;
import com.kob.backend.pojo.Bot;
import com.kob.backend.pojo.User;
import com.kob.backend.service.impl.utils.UserDetailsImpl;
import com.kob.backend.service.user.bot.UpdateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Service
public class UpdateServiceImpl implements UpdateService {
@Autowired
private BotMapper botMapper;
@Override
public Map<String, String> update(Map<String, String> data) {
// 先获取当前用户,用于判断更新对象是否有权限
UsernamePasswordAuthenticationToken authenticationToken =
(UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
UserDetailsImpl loginUser = (UserDetailsImpl) authenticationToken.getPrincipal();
User user = loginUser.getUser();
int bot_id = Integer.parseInt(data.get("bot_id"));
String title = data.get("title");
String description = data.get("description");
String content = data.get("content");
Map<String, String> map = new HashMap<>();
if (title == null || title.length() == 0) {
map.put("error_message", "标题不能为空");
return map;
}
if (title.length() > 100) {
map.put("error_message", "标题长度不能大于100");
return map;
}
if (description == null || description.length() == 0) {
// 提供默认描述信息
description = "这个用户很懒,什么也没留下~";
}
if (description != null && description.length() > 300) {
map.put("error_message", "描述信息长度不能大于300");
return map;
}
if (content == null || content.length() == 0) {
map.put("error_message", "代码不能为空");
return map;
}
if (content.length() > 10000) {
map.put("error_message", "代码长度不能超过一万");
return map;
}
Bot bot = botMapper.selectById(bot_id);
if(bot == null){
map.put("error_message","所查 bot 不存在或已被删除");
return map;
}
if(!bot.getUserId().equals(user.getId())){
map.put("error_message","你无权更改别人的 bot");
return map;
}
Date now = new Date();
Date createTime = bot.getCreatetime();
int rating = bot.getRating();
Bot newBot = new Bot(bot.getId(),user.getId(),title,description,content,rating,createTime,now);
botMapper.updateById(newBot);
map.put("error_message","success");
return map;
}
}

View File

@ -0,0 +1,7 @@
package com.kob.backend.service.user.bot;
import java.util.Map;
public interface AddService {
public Map<String,String> add(Map<String,String> data);
}

View File

@ -0,0 +1,9 @@
package com.kob.backend.service.user.bot;
import com.kob.backend.pojo.Bot;
import java.util.List;
public interface GetListService {
List<Bot> getList(); // getList() 不需要传参数
}

View File

@ -0,0 +1,6 @@
package com.kob.backend.service.user.bot;
import java.util.Map;
public interface RemoveService {
public Map<String,String> remove(Map<String,String> data);
}

View File

@ -0,0 +1,7 @@
package com.kob.backend.service.user.bot;
import java.util.Map;
public interface UpdateService {
Map<String,String> update(Map<String,String> data);
}