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/UserController.java

127 lines
8.4 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.vo.UserInfoVO;
import com.xcs.wx.domain.vo.UserVO;
import com.xcs.wx.domain.vo.ResponseVO;
import com.xcs.wx.domain.vo.WeChatConfigVO;
import com.xcs.wx.service.UserService;
import com.xcs.wx.service.WeChatService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* UserController类作为Spring MVC框架下的控制器主要负责处理与用户相关的各类HTTP请求
* 通过调用UserService和WeChatService服务层提供的不同方法实现诸如查询微信配置信息、获取用户各类信息以及切换用户等业务逻辑
* 并将处理结果以合适的格式使用ResponseVO进行封装返回给客户端由作者xcs在2024年6月15日16时05分49秒创建。
*
* @author xcs
* @date 2024年6月15日16:05:49
*/
@RestController
// 该注解表明这个类是一个Spring RESTful风格的控制器意味着它主要用于处理HTTP请求并返回JSON、XML等格式的数据响应
// 而不是像传统的MVC模式那样返回视图页面如HTML页面适用于构建前后端分离项目中的接口层方便与前端进行数据交互。
@RequiredArgsConstructor
// 使用Lombok的 @RequiredArgsConstructor 注解会为类中所有被标记为final且未初始化的字段生成构造函数
// 在这里就是为下面的userService和weChatService字段生成对应的构造函数注入使得Spring容器能够通过构造函数注入的方式将UserService和WeChatService的实例注入进来简化了依赖注入的代码编写。
@RequestMapping("/api/user")
// 用于定义该控制器所处理请求的基础路径,后续在此控制器内定义的各个请求映射方法对应的完整请求路径都基于这个基础路径进行拼接,
// 例如下面的 "/readWeChatConfig"、"/userInfo" 等路径对应的完整请求路径就是 "/api/user/readWeChatConfig"、"/api/user/userInfo" 等,
// 以此来清晰地划分和组织不同功能接口的访问路径,明确各接口是用于用户相关操作的。
public class UserController {
private final UserService userService;
private final WeChatService weChatService;
// 通过依赖注入的方式引入UserService和WeChatService的实例
// UserService是服务层的接口或类它封装了与用户自身信息相关的各种业务逻辑方法如获取用户头像、昵称、查询所有用户以及切换用户等操作
// WeChatService则是封装了与微信相关配置信息查询等业务逻辑的服务层接口或类具体的业务实现细节在它们各自的实现类中完成。
/**
* readWeChatConfig方法用于处理查询微信信息的HTTP GET请求
* 通过调用WeChatService的readWeChatConfig方法获取微信配置相关信息并将查询结果包装在ResponseVO中返回给客户端。
*
* @return ResponseVO<List<WeChatConfigVO>>返回一个ResponseVO包装类型其泛型为WeChatConfigVO的列表
* ResponseVO用于统一封装响应的状态码、提示消息以及实际的数据内容方便客户端统一解析和处理响应结果
* WeChatConfigVO是用于展示微信配置信息的视图对象包含了诸如微信的一些功能开关设置、版本相关配置、服务器连接配置等属性具体依业务定义
* 这里将通过服务层查询到的微信配置信息列表封装在ResponseVO中返回给客户端方便客户端展示微信配置情况或者进行相关的配置处理操作。
*/
@GetMapping("/readWeChatConfig")
public ResponseVO<List<WeChatConfigVO>> readWeChatConfig() {
return ResponseVO.ok(weChatService.readWeChatConfig());
}
/**
* userInfo方法用于处理获取用户头像等用户详细信息的HTTP GET请求
* 通过调用UserService的userInfo方法获取用户详细信息并将查询结果以UserInfoVO对象形式包装在ResponseVO中返回给客户端。
*
* @return ResponseVO<UserInfoVO>返回一个ResponseVO包装类型其泛型为UserInfoVO
* UserInfoVO是用于展示用户详细信息的视图对象包含了用户头像、昵称、性别、地区等多方面的个人信息具体依业务定义
* 这里将通过服务层获取到的用户详细信息封装在ResponseVO中返回给客户端方便客户端展示用户的完整信息给用户查看或者进行其他相关操作。
*/
@GetMapping("/userInfo")
public ResponseVO<UserInfoVO> userInfo() {
return ResponseVO.ok(userService.userInfo());
}
/**
* avatar方法用于处理获取用户头像的HTTP GET请求
* 通过调用UserService的avatar方法获取用户头像相关信息此处假设以字符串形式返回比如头像的存储路径或者网络地址等具体取决于业务实现
* 并将查询结果包装在ResponseVO中返回给客户端。
*
* @return ResponseVO<String>返回一个ResponseVO包装类型其泛型为String
* 这里将服务层执行获取用户头像操作后返回的相关结果信息以字符串形式封装在ResponseVO中返回给客户端
* 客户端可以依据返回的信息来获取用户头像(比如展示头像图片等)。
*/
@GetMapping("/avatar")
public ResponseVO<String> avatar() {
return ResponseVO.ok(userService.avatar());
}
/**
* nickname方法用于处理获取用户昵称的HTTP GET请求
* 通过调用UserService的nickname方法获取用户昵称信息并将查询结果包装在ResponseVO中返回给客户端。
*
* @return ResponseVO<String>返回一个ResponseVO包装类型其泛型为String
* 这里将服务层获取到的用户昵称信息封装在ResponseVO中返回给客户端方便客户端展示用户的昵称给用户查看或者进行其他相关操作。
*/
@GetMapping("/nickname")
public ResponseVO<String> nickname() {
return ResponseVO.ok(userService.nickname());
}
/**
* users方法用于处理获取所有用户信息的HTTP GET请求
* 通过调用UserService的users方法获取所有用户相关信息并将查询结果以用户信息视图对象列表形式包装在ResponseVO中返回给客户端。
*
* @return ResponseVO<List<UserVO>>返回一个ResponseVO包装类型其泛型为UserVO的列表
* UserVO是用于展示用户基本信息的视图对象包含了诸如用户名、用户ID等基本属性具体依业务定义
* 这里将通过服务层查询到的所有用户信息列表封装在ResponseVO中返回给客户端方便客户端展示用户列表等相关操作比如展示用户选择界面等
*/
@GetMapping("/users")
public ResponseVO<List<UserVO>> users() {
return ResponseVO.ok(userService.users());
}
/**
* switchUser方法用于处理切换用户的HTTP PUT请求接收一个表示要切换到的用户IDwxId作为参数
* 通过调用UserService的switchUser方法执行用户切换的业务逻辑成功切换后返回一个表示成功的ResponseVO对象给客户端。
*
* @param wxId wxId作为请求参数用于明确指定要切换到的目标用户的唯一标识如用户在系统中的ID等客户端传递具体的用户ID
* 服务层会根据这个ID去执行切换用户的相关操作比如更新当前登录用户的状态、加载目标用户的相关配置和数据等。
* @return ResponseVO<String>返回一个ResponseVO包装类型其泛型为String
* 这里返回一个表示成功的提示信息(固定为 "切换成功"封装在ResponseVO中返回给客户端告知客户端用户切换操作已顺利完成
* 客户端可以依据此信息进行相应的界面更新等后续操作。
*/
@PutMapping("/switchUser")
public ResponseVO<String> switchUser(String wxId) {
userService.switchUser(wxId);
return ResponseVO.ok("切换成功");
}
}