package com.example.demo.user; import com.example.demo.auth.JwtService; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.Map; @RestController @RequestMapping("/api/user") public class UserController { private final UserService userService; private final JwtService jwtService; public UserController(UserService userService, JwtService jwtService) { this.userService = userService; this.jwtService = jwtService; } private Long ensureUserId(String authorization) { Map claims = jwtService.parseClaims(authorization); Object uid = claims.get("userId"); if (uid == null) throw new IllegalArgumentException("未登录"); return ((Number) uid).longValue(); } @GetMapping("/me") public ResponseEntity me(@RequestHeader(name = "Authorization", required = false) String authorization, @RequestHeader(name = "X-User-Id", required = false) Long userIdHeader) { Long userId = userIdHeader != null ? userIdHeader : ensureUserId(authorization); var body = userService.getProfile(userId); return ResponseEntity.ok(body == null ? java.util.Map.of() : body); } @PutMapping("/me") public ResponseEntity update(@RequestHeader(name = "Authorization", required = false) String authorization, @RequestHeader(name = "X-User-Id", required = false) Long userIdHeader, @RequestBody UserService.UpdateProfileRequest req) { Long userId = userIdHeader != null ? userIdHeader : ensureUserId(authorization); userService.updateProfile(userId, req); return ResponseEntity.ok().build(); } @PutMapping("/me/password") public ResponseEntity changePassword(@RequestHeader(name = "Authorization", required = false) String authorization, @RequestHeader(name = "X-User-Id", required = false) Long userIdHeader, @RequestBody UserService.ChangePasswordRequest req) { Long userId = userIdHeader != null ? userIdHeader : ensureUserId(authorization); userService.changePassword(userId, req); return ResponseEntity.ok().build(); } @PutMapping("/me/phone") public ResponseEntity changePhone(@RequestHeader(name = "Authorization", required = false) String authorization, @RequestHeader(name = "X-User-Id", required = false) Long userIdHeader, @RequestBody UserService.ChangePhoneRequest req) { Long userId = userIdHeader != null ? userIdHeader : ensureUserId(authorization); userService.changePhone(userId, req); return ResponseEntity.ok().build(); } }