Files
happy-life-star/backend-single/src/main/java/com/emotion/controller/UserController.java
T

153 lines
4.7 KiB
Java

package com.emotion.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.emotion.common.BasePageRequest;
import com.emotion.common.PageResult;
import com.emotion.common.Result;
import com.emotion.dto.request.UserCreateRequest;
import com.emotion.dto.request.UserUpdateRequest;
import com.emotion.dto.response.UserResponse;
import com.emotion.entity.User;
import com.emotion.service.UserService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.stream.Collectors;
/**
* 用户控制器
*
* @author emotion-museum
* @date 2025-07-22
*/
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
/**
* 分页查询用户
*/
@GetMapping("/page")
public Result<PageResult<UserResponse>> getPage(@Validated BasePageRequest request) {
IPage<User> page = userService.getPage(request);
List<UserResponse> userResponses = page.getRecords().stream()
.map(this::convertToResponse)
.collect(Collectors.toList());
PageResult<UserResponse> pageResult = new PageResult<>();
pageResult.setCurrent(page.getCurrent());
pageResult.setSize(page.getSize());
pageResult.setTotal(page.getTotal());
pageResult.setPages(page.getPages());
pageResult.setRecords(userResponses);
return Result.success(pageResult);
}
/**
* 根据ID获取用户信息
*/
@GetMapping("/{id}")
public Result<UserResponse> getById(@PathVariable String id) {
User user = userService.getById(id);
if (user == null) {
return Result.notFound("用户不存在");
}
return Result.success(convertToResponse(user));
}
/**
* 创建用户
*/
@PostMapping
public Result<UserResponse> create(@Valid @RequestBody UserCreateRequest request) {
User user = userService.createUser(
request.getAccount(),
request.getUsername(),
request.getPassword(),
request.getEmail(),
request.getPhone()
);
return Result.success(convertToResponse(user));
}
/**
* 更新用户
*/
@PutMapping("/{id}")
public Result<UserResponse> update(@PathVariable String id, @Valid @RequestBody UserUpdateRequest request) {
User user = new User();
BeanUtils.copyProperties(request, user);
user.setId(id);
boolean updated = userService.updateById(user);
if (!updated) {
return Result.error("更新失败");
}
User updatedUser = userService.getById(id);
return Result.success(convertToResponse(updatedUser));
}
/**
* 删除用户
*/
@DeleteMapping("/{id}")
public Result<Void> delete(@PathVariable String id) {
boolean deleted = userService.removeById(id);
if (!deleted) {
return Result.error("删除失败");
}
return Result.success();
}
/**
* 根据账号查询用户
*/
@GetMapping("/account/{account}")
public Result<UserResponse> getByAccount(@PathVariable String account) {
User user = userService.getByAccount(account);
if (user == null) {
return Result.notFound("用户不存在");
}
return Result.success(convertToResponse(user));
}
/**
* 统计用户数量
*/
@GetMapping("/count/status/{status}")
public Result<Long> countByStatus(@PathVariable Integer status) {
Long count = userService.countByStatus(status);
return Result.success(count);
}
/**
* 转换为响应对象
*/
private UserResponse convertToResponse(User user) {
UserResponse response = new UserResponse();
BeanUtils.copyProperties(user, response);
response.setId(user.getId());
if (user.getCreateTime() != null) {
response.setCreateTime(user.getCreateTime().format(DATE_TIME_FORMATTER));
}
if (user.getUpdateTime() != null) {
response.setUpdateTime(user.getUpdateTime().format(DATE_TIME_FORMATTER));
}
if (user.getLastActiveTime() != null) {
response.setLastActiveTime(user.getLastActiveTime().format(DATE_TIME_FORMATTER));
}
return response;
}
}