-
Notifications
You must be signed in to change notification settings - Fork 155
Expand file tree
/
Copy pathDocumentController.java
More file actions
161 lines (142 loc) · 6.67 KB
/
DocumentController.java
File metadata and controls
161 lines (142 loc) · 6.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
package com.jiaruiblog.api.controller;
import com.jiaruiblog.api.auth.Permission;
import com.jiaruiblog.api.intercepter.SensitiveFilter;
import com.jiaruiblog.application.service.DocumentService;
import com.jiaruiblog.application.service.IDocLogService;
import com.jiaruiblog.application.service.RedisService;
import com.jiaruiblog.application.service.impl.DocLogServiceImpl;
import com.jiaruiblog.application.service.impl.RedisServiceImpl;
import com.jiaruiblog.common.ApiResult;
import com.jiaruiblog.common.enums.FilterTypeEnum;
import com.jiaruiblog.common.enums.PermissionEnum;
import com.jiaruiblog.common.exception.BusinessException;
import com.jiaruiblog.common.exception.ErrorCode;
import com.jiaruiblog.domain.entity.dto.DocumentDTO;
import com.jiaruiblog.domain.entity.dto.RemoveObjectDTO;
import com.jiaruiblog.domain.entity.dto.SearchQuery;
import com.jiaruiblog.domain.entity.dto.document.UpdateInfoDTO;
import com.jiaruiblog.domain.entity.po.FileDocument;
import com.jiaruiblog.domain.entity.po.User;
import com.jiaruiblog.domain.entity.vo.DocWithCateVO;
import com.jiaruiblog.domain.entity.vo.PageVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.List;
/**
* 文档查询删除控制器
* @author luojiarui
**/
@Schema(description = "文档模块")
@RestController
@Slf4j
@CrossOrigin
@RequestMapping("/api/v1/document")
public class DocumentController {
@Resource
DocumentService documentService;
@Resource
RedisService redisService;
@Resource
IDocLogService docLogService;
@Operation(summary = "2.1 查询文档的分页列表页", description = "根据参数查询文档列表")
@PostMapping(value = "/list")
public ApiResult<Object> list(@RequestBody @Schema(description = "文档查询DTO") DocumentDTO documentDTO)
throws IOException {
String userId = documentDTO.getUserId();
if (StringUtils.hasText(documentDTO.getFilterWord())) {
String filterWord = documentDTO.getFilterWord();
// 敏感词汇判断
SensitiveFilter filter = SensitiveFilter.getInstance();
int n = filter.checkSensitiveWord(filterWord, 0, 1);
// 存在非法字符时仅记录日志,不影响搜索
if (n > 0) {
log.error("这个人输入了非法字符--> {},不知道他到底要查什么~", filterWord);
} else {
// 热门搜索词所有人都能看,记录到 ZSet
redisService.incrementScoreByUserId(filterWord, RedisServiceImpl.SEARCH_KEY);
// 用户搜索历史,只在用户已登录时记录
if (StringUtils.hasText(userId)) {
redisService.addSearchHistoryByUserId(userId, filterWord);
}
}
}
return ApiResult.success(documentService.list(documentDTO));
}
@Operation(summary = "2.2 查询文档的详细信息", description = "查询文档的详细信息")
@GetMapping(value = "/detail")
public ApiResult<Object> detail(
@RequestParam(value = "docId")
@Schema(description = "文档ID") String id) {
return ApiResult.success(documentService.detail(id));
}
@Operation(summary = "3.2 删除某个文档", description = "删除某个文档")
@DeleteMapping(value = "/auth/remove")
@Permission(value = PermissionEnum.ADMIN)
public ApiResult<Object> remove(
@RequestBody @Schema(description = "文档删除DTO") RemoveObjectDTO removeObjectDTO,
HttpServletRequest request) {
FileDocument fileDocument = documentService.queryById(removeObjectDTO.getId());
if (fileDocument == null) {
throw new BusinessException(ErrorCode.DOCUMENT_NOT_FOUND);
}
String username = (String) request.getAttribute("username");
String userId = (String) request.getAttribute("id");
User user = new User();
user.setUsername(username);
user.setId(userId);
docLogService.addLog(user, fileDocument, DocLogServiceImpl.Action.DELETE);
documentService.remove(fileDocument);
return ApiResult.success();
}
@Operation(summary = "3.2 管理员修改文档基本信息", description = "管理员修改某个文档信息")
@PutMapping(value="/auth/updateInfo")
@Permission(value = PermissionEnum.ADMIN)
public ApiResult<Object> updateInfo(@RequestBody @Schema(description = "文档更新信息DTO") UpdateInfoDTO updateInfoDTO) {
documentService.updateInfo(updateInfoDTO);
return ApiResult.success();
}
@Operation(summary = "2.3 指定分类时,查询文档的分页列表页", description = "根据参数查询文档列表")
@GetMapping(value = "/listWithCategory")
public ApiResult<PageVO<DocWithCateVO>> listWithCategory(
@ModelAttribute("documentDTO")
@Schema(description = "文档查询DTO", required = true) DocumentDTO documentDTO) {
FilterTypeEnum filterType = documentDTO.getType();
if (filterType.equals(FilterTypeEnum.CATEGORY) || filterType.equals(FilterTypeEnum.TAG)) {
return ApiResult.success(documentService.listWithCategory(documentDTO));
} else {
throw new BusinessException(ErrorCode.PARAMS_ERROR);
}
}
@GetMapping("/addKey")
public ApiResult<Object> addKey(@RequestParam("key") String key) {
redisService.addSearchHistoryByUserId("ljr", key);
log.info("added key: {}", key);
redisService.incrementScoreByUserId(key, RedisServiceImpl.SEARCH_KEY);
return ApiResult.success(key);
}
@GetMapping("/keyList")
public ApiResult<Object> keyList() {
List<String> keyList = redisService.getSearchHistoryByUserId("ljr");
return ApiResult.success(keyList);
}
@GetMapping("/hot")
public ApiResult<Object> hot() {
List<String> keyList = redisService.getHotList(null, RedisServiceImpl.SEARCH_KEY);
return ApiResult.success(keyList);
}
@Operation(summary = "文档搜索", description = "根据多条件搜索文档")
@PostMapping(value = "/searchList")
@Permission(value = PermissionEnum.USER)
public ApiResult<Object> search(
@RequestBody @Schema(description = "搜索参数") SearchQuery query,
HttpServletRequest request) {
String userId = (String) request.getAttribute("id");
return ApiResult.success(documentService.search(query, userId));
}
}