package com.example.ldap.controller; import com.example.ldap.dto.ApiResponse; import com.example.ldap.entity.User; import com.example.ldap.service.UserService; import jakarta.validation.Valid; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; @RestController @RequestMapping("/api/users") @CrossOrigin(origins = "*") public class UserController { private static final Logger logger = LoggerFactory.getLogger(UserController.class); @Autowired private UserService userService; /** * 获取所有用户 */ @GetMapping public ResponseEntity>> getAllUsers() { logger.info("API: 获取所有用户"); List users = userService.getAllUsers(); return ResponseEntity.ok(ApiResponse.success("获取用户列表成功", users)); } /** * 根据用户名获取用户 */ @GetMapping("/{username}") public ResponseEntity> getUserByUsername(@PathVariable String username) { logger.info("API: 获取用户 {}", username); User user = userService.findByUsername(username); if (user == null) { return ResponseEntity.ok(ApiResponse.error("用户不存在")); } return ResponseEntity.ok(ApiResponse.success("获取用户成功", user)); } /** * 创建新用户 */ @PostMapping public ResponseEntity> createUser(@Valid @RequestBody User user) { logger.info("API: 创建用户 {}", user.getUsername()); User createdUser = userService.createUser(user); return ResponseEntity.ok(ApiResponse.success("用户创建成功", createdUser)); } /** * 更新用户信息 */ @PutMapping("/{username}") public ResponseEntity> updateUser( @PathVariable String username, @RequestBody User user) { logger.info("API: 更新用户 {}", username); User updatedUser = userService.updateUser(username, user); return ResponseEntity.ok(ApiResponse.success("用户更新成功", updatedUser)); } /** * 更新用户密码 */ @PutMapping("/{username}/password") public ResponseEntity> updatePassword( @PathVariable String username, @RequestBody Map passwordData) { logger.info("API: 更新用户密码 {}", username); String newPassword = passwordData.get("newPassword"); if (newPassword == null || newPassword.trim().isEmpty()) { return ResponseEntity.badRequest() .body(ApiResponse.error("新密码不能为空")); } userService.updatePassword(username, newPassword); return ResponseEntity.ok(ApiResponse.success("密码更新成功")); } /** * 删除用户 */ @DeleteMapping("/{username}") public ResponseEntity> deleteUser(@PathVariable String username) { logger.info("API: 删除用户 {}", username); userService.deleteUser(username); return ResponseEntity.ok(ApiResponse.success("用户删除成功")); } /** * 搜索用户 */ @GetMapping("/search") public ResponseEntity>> searchUsers( @RequestParam(required = false) String keyword) { logger.info("API: 搜索用户 {}", keyword); List users = userService.searchUsers(keyword); return ResponseEntity.ok(ApiResponse.success("搜索完成", users)); } /** * 验证用户密码 */ @PostMapping("/{username}/validate") public ResponseEntity> validatePassword( @PathVariable String username, @RequestBody Map passwordData) { logger.info("API: 验证用户密码 {}", username); String password = passwordData.get("password"); if (password == null) { return ResponseEntity.badRequest() .body(ApiResponse.error("密码不能为空")); } boolean isValid = userService.validatePassword(username, password); return ResponseEntity.ok(ApiResponse.success("验证完成", isValid)); } /** * 批量创建用户 */ @PostMapping("/batch") public ResponseEntity>> createUsers(@Valid @RequestBody List users) { logger.info("API: 批量创建用户,数量: {}", users.size()); List createdUsers = users.stream() .map(userService::createUser) .toList(); return ResponseEntity.ok(ApiResponse.success("批量创建用户成功", createdUsers)); } /** * 获取用户统计信息 */ @GetMapping("/statistics") public ResponseEntity>> getUserStatistics() { logger.info("API: 获取用户统计信息"); List allUsers = userService.getAllUsers(); Map stats = Map.of( "totalUsers", allUsers.size(), "usersWithEmail", allUsers.stream() .mapToLong(u -> u.getEmail() != null && !u.getEmail().isEmpty() ? 1 : 0) .sum(), "usersWithPhone", allUsers.stream() .mapToLong(u -> u.getPhoneNumber() != null && !u.getPhoneNumber().isEmpty() ? 1 : 0) .sum() ); return ResponseEntity.ok(ApiResponse.success("获取统计信息成功", stats)); } }