65 lines
2.8 KiB
Java
65 lines
2.8 KiB
Java
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<String,Object> 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();
|
|
}
|
|
}
|
|
|
|
|