You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wx-dump-4j/wx-dump-admin/src/main/java/com/xcs/wx/controller/ContactController.java

98 lines
7.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.xcs.wx.controller;
import com.xcs.wx.domain.dto.ContactDTO;
import com.xcs.wx.domain.vo.*;
import com.xcs.wx.service.ContactService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* ContactController类作为Spring MVC框架中的控制器用于处理与联系人相关的HTTP请求
* 并借助ContactService服务层来实现具体的业务逻辑最后将处理结果以合适的格式返回给客户端
* 由作者xcs在2023年12月22日14时16分创建。
*
* @author xcs
* @date 2023年12月22日 14时16分
**/
@RestController
// 该注解表明这个类是一个Spring RESTful风格的控制器意味着它主要用于处理HTTP请求并返回JSON、XML等格式的数据响应
// 而不是像传统的MVC模式那样返回视图模板如HTML页面
@RequiredArgsConstructor
// 使用Lombok的 @RequiredArgsConstructor 注解会为类中所有被标记为final且未初始化的字段生成构造函数
// 在这里就是为下面的contactService字段生成对应的构造函数注入使得Spring容器可以通过构造函数注入的方式将ContactService的实例注入进来简化了依赖注入的代码编写。
@RequestMapping("/api/contact")
// 用于定义该控制器所处理请求的基础路径,后续在这个控制器中定义的各个请求映射方法的路径都会基于这个基础路径进行拼接,
// 例如下面的 "/list"、"/all"、"/label"、"/export" 这些路径对应的完整请求路径就是 "/api/contact/list"、"/api/contact/all"、"/api/contact/label"、"/api/contact/export" 等。
public class ContactController {
private final ContactService contactService;
// 通过依赖注入的方式引入ContactService的实例ContactService是服务层的接口或者类它封装了与联系人相关的各种业务逻辑方法
// 例如查询联系人、获取所有联系人、查询联系人标签以及导出联系人等操作具体的业务实现细节在ContactService及其实现类中完成。
/**
* 查询联系人的方法用于处理获取联系人列表的HTTP GET请求接收一个ContactDTO对象作为请求参数
* 通过调用ContactService的相关方法查询联系人信息并将结果包装在ResponseVO中返回给客户端。
*
* @param contactDTO 请求参数它是一个数据传输对象DTO通常包含了用于筛选、分页等查询联系人的条件信息
* 比如可能包含查询关键字、页码、每页显示数量等字段,具体的字段内容取决于业务需求中对联系人查询条件的定义。
* @return ResponseVO<List<ContactVO>>返回一个ResponseVO包装类型其泛型是ContactVO的列表
* ResponseVO用于统一封装响应的状态码、提示消息以及实际的数据内容方便客户端统一解析和处理响应结果
* 这里的ContactVO是用于展示给客户端的联系人信息视图对象包含了联系人相关的部分关键属性例如联系人姓名、头像、联系方式等具体属性依业务定义
*/
@GetMapping("/list")
public ResponseVO<List<ContactVO>> list(ContactDTO contactDTO) {
// 调用ContactService的queryContact方法传入ContactDTO对象作为查询条件
// 该方法会依据传入的条件去数据库或者其他数据源中查找符合要求的联系人信息返回的结果包装在PageVO中
// PageVO通常用于分页相关的场景它包含了当前页的数据记录列表这里就是联系人信息列表、当前页码以及总记录数等信息。
PageVO<ContactVO> pageVO = contactService.queryContact(contactDTO);
// 使用ResponseVO的静态方法ok创建一个表示成功响应的ResponseVO对象
// 并将从PageVO中获取的联系人记录列表pageVO.getRecords()、当前页码pageVO.getCurrent()以及总记录数pageVO.getTotal())作为参数传入,
// 这样就把查询到的联系人列表信息以及分页相关信息一起封装进ResponseVO中返回给客户端了。
return ResponseVO.ok(pageVO.getRecords(), pageVO.getCurrent(), pageVO.getTotal());
}
/**
* 查询所有联系人的方法用于处理获取全部联系人信息的HTTP GET请求
* 该方法会调用ContactService的queryAllContact方法获取所有联系人信息并将结果包装在ResponseVO中返回给客户端。
*
* @return ResponseVO<List<AllContactVO>>返回一个ResponseVO包装类型其泛型为AllContactVO的列表
* AllContactVO同样是用于展示联系人信息的视图对象但可能与ContactVO在包含的属性等方面有所不同
* 具体取决于业务中对查询所有联系人时需要返回的信息的定义这里将通过服务层查询到的所有联系人信息封装在ResponseVO中返回给客户端。
*/
@GetMapping("/all")
public ResponseVO<List<AllContactVO>> all() {
return ResponseVO.ok(contactService.queryAllContact());
}
/**
* 查询联系人标签的方法用于处理获取联系人标签信息的HTTP GET请求
* 通过调用ContactService的queryContactLabel方法获取联系人标签信息并将结果包装在ResponseVO中返回给客户端。
*
* @return ResponseVO<List<ContactLabelVO>>返回一个ResponseVO包装类型其泛型为ContactLabelVO的列表
* ContactLabelVO是用于展示联系人标签信息的视图对象包含了标签的名称、相关联系人数量等属性具体依业务定义
* 这里把通过服务层查询到的联系人标签信息封装在ResponseVO中返回给客户端方便客户端展示和处理联系人标签相关内容。
*/
@GetMapping("/label")
public ResponseVO<List<ContactLabelVO>> label() {
return ResponseVO.ok(contactService.queryContactLabel());
}
/**
* 导出联系人的方法用于处理执行联系人导出操作的HTTP GET请求
* 通过调用ContactService的exportContact方法执行联系人导出的业务逻辑并将导出结果相关信息比如导出文件的路径、导出状态等此处假设以字符串形式表示包装在ResponseVO中返回给客户端。
*
* @return ResponseVO<String>返回一个ResponseVO包装类型其泛型为String
* 这里将服务层执行联系人导出操作后返回的相关结果信息封装在ResponseVO中返回给客户端
* 客户端可以依据返回的信息来判断联系人导出是否成功以及获取相关的导出结果内容(例如提示用户去哪里下载导出的联系人文件等)。
*/
@GetMapping("/export")
public ResponseVO<String> export() {
return ResponseVO.ok(contactService.exportContact());
}
}