package com.gym.controller; import com.gym.model.User; import com.gym.service.UserService; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; @RestController @RequestMapping("/api/users") public class UserController { @Autowired private UserService userService; // 用户注册 @PostMapping("/register") public Map register(@RequestBody User user) { Map response = new HashMap<>(); try { User registeredUser = userService.register(user); response.put("code", 200); response.put("message", "注册成功"); response.put("data", registeredUser); } catch (Exception e) { response.put("code", 400); response.put("message", e.getMessage()); } return response; } // 用户登录 @PostMapping("/login") public Map login(@RequestBody Map loginData) { Map response = new HashMap<>(); try { String username = loginData.get("username"); String password = loginData.get("password"); // 验证参数 if (username == null || password == null) { response.put("code", 400); response.put("message", "用户名和密码不能为空"); return response; } // 调用服务层登录 Optional userOpt = userService.login(username, password); if (userOpt.isPresent()) { User user = userOpt.get(); // 创建返回数据(不包含敏感信息) Map userData = new HashMap<>(); userData.put("id", user.getId()); userData.put("username", user.getUsername()); userData.put("email", user.getEmail()); userData.put("role", user.getRole()); userData.put("realName", user.getRealName()); userData.put("points", user.getPoints()); userData.put("lastLogin", user.getLastLogin()); response.put("code", 200); response.put("message", "登录成功"); response.put("data", userData); } else { response.put("code", 401); response.put("message", "用户名或密码错误"); } } catch (Exception e) { response.put("code", 500); response.put("message", "登录失败: " + e.getMessage()); } return response; } // 获取所有用户 @GetMapping public Map getAllUsers() { Map response = new HashMap<>(); List users = userService.getAllUsers(); response.put("code", 200); response.put("message", "获取成功"); response.put("data", users); response.put("count", users.size()); return response; } // 根据角色获取用户 @GetMapping("/role/{role}") public Map getUsersByRole(@PathVariable String role) { Map response = new HashMap<>(); List users = userService.getUsersByRole(role); response.put("code", 200); response.put("message", "获取成功"); response.put("data", users); return response; } // 获取单个用户 @GetMapping("/{id}") public Map getUserById(@PathVariable Long id) { Map response = new HashMap<>(); return userService.getUserById(id) .map(user -> { response.put("code", 200); response.put("message", "获取成功"); response.put("data", user); return response; }) .orElseGet(() -> { response.put("code", 404); response.put("message", "用户不存在"); return response; }); } // 更新用户信息 @PutMapping("/{id}") public Map updateUser(@PathVariable Long id, @RequestBody User user) { Map response = new HashMap<>(); try { User updatedUser = userService.updateUser(id, user); response.put("code", 200); response.put("message", "更新成功"); response.put("data", updatedUser); } catch (Exception e) { response.put("code", 400); response.put("message", e.getMessage()); } return response; } // 检查用户名是否可用 @GetMapping("/check-username") public Map checkUsername(@RequestParam String username) { Map response = new HashMap<>(); boolean available = userService.isUsernameAvailable(username); response.put("code", 200); response.put("message", available ? "用户名可用" : "用户名已存在"); response.put("available", available); return response; } // 添加积分 @PostMapping("/{id}/add-points") public Map addPoints(@PathVariable Long id, @RequestBody Map data) { Map response = new HashMap<>(); try { Integer points = data.get("points"); User user = userService.addPoints(id, points); response.put("code", 200); response.put("message", "积分添加成功"); response.put("data", user); } catch (Exception e) { response.put("code", 400); response.put("message", e.getMessage()); } return response; } // 用户登出 @PostMapping("/logout") public Map logout(HttpServletRequest request) { Map response = new HashMap<>(); try { // 清除会话(如果使用session) HttpSession session = request.getSession(false); if (session != null) { session.invalidate(); } response.put("code", 200); response.put("message", "登出成功"); } catch (Exception e) { response.put("code", 500); response.put("message", "登出失败"); } return response; } }