|
|
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请求,接收一个表示要切换到的用户ID(wxId)作为参数,
|
|
|
* 通过调用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("切换成功");
|
|
|
}
|
|
|
} |