blob: 7603f9dcaf0a6bc2b75fa5c54b52e10547febb6e [file] [log] [blame]
22301102e0c7c6e2025-05-17 11:08:45 +08001package com.pt.controller;
2
2230110210198562025-05-17 16:27:12 +08003import com.pt.constant.Constants;
22301102e0c7c6e2025-05-17 11:08:45 +08004import com.pt.entity.User;
2230110210198562025-05-17 16:27:12 +08005import com.pt.utils.JWTUtils;
22301102e0c7c6e2025-05-17 11:08:45 +08006import org.springframework.beans.factory.annotation.Autowired;
7import org.springframework.http.ResponseEntity;
8import org.springframework.web.bind.annotation.*;
9import com.pt.service.UserService;
10
2230110210198562025-05-17 16:27:12 +080011import java.util.HashMap;
12import java.util.Map;
13
22301102e0c7c6e2025-05-17 11:08:45 +080014@RestController
15@RequestMapping("/api/user")
16@CrossOrigin(origins = "*")
17public class UserController {
18
19 @Autowired
20 private UserService userService;
21
22 @PostMapping("/register")
yyyang502ab1d2025-06-03 16:40:59 +080023 public ResponseEntity<?> registerUser(@RequestBody Map<String, String> request) {
24 String username = request.get("username");
25 String password = request.get("password");
26 String email = request.get("email");
27
28 if (username == null || password == null || email == null) {
29 return ResponseEntity.badRequest().body("Missing required fields");
30 }
31
22301102e0c7c6e2025-05-17 11:08:45 +080032 User user = userService.findByUsername(username);
33 if (user != null) {
34 return ResponseEntity.badRequest().body("User already exists");
35 } else {
36 User newUser = new User();
37
38 String uid = String.valueOf(System.currentTimeMillis());
39 newUser.setUid(uid);
40 newUser.setUsername(username);
41 newUser.setPassword(password);
42 newUser.setEmail(email);
43 userService.save(newUser);
2230110210198562025-05-17 16:27:12 +080044
45 Map<String, Object> ans = new HashMap<>();
22301102b1fd8fd2025-06-05 18:02:21 +080046 ans.put("result", "User registered successfully");
yyyang502ab1d2025-06-03 16:40:59 +080047 ans.put("data", newUser);
2230110210198562025-05-17 16:27:12 +080048
49 return ResponseEntity.ok().body(ans);
22301102e0c7c6e2025-05-17 11:08:45 +080050 }
51 }
52
53 @PostMapping("/login")
22301102b1fd8fd2025-06-05 18:02:21 +080054 public ResponseEntity<?> loginUser(@RequestParam("username") String username,
55 @RequestParam("password") String password) {
56
yyyang502ab1d2025-06-03 16:40:59 +080057
58 if (username == null || password == null) {
59 return ResponseEntity.badRequest().body("Missing username or password");
60 }
2230110210198562025-05-17 16:27:12 +080061
22301102e0c7c6e2025-05-17 11:08:45 +080062 User user = userService.findByUsernameAndPassword(username, password);
2230110210198562025-05-17 16:27:12 +080063 Map<String, Object> ans = new HashMap<>();
22301102e0c7c6e2025-05-17 11:08:45 +080064 if (user != null) {
yyyang502ab1d2025-06-03 16:40:59 +080065 String token = JWTUtils.generateToken(username, Constants.UserRole.USER, Constants.DEFAULT_EXPIRE_TIME);
22301102b1fd8fd2025-06-05 18:02:21 +080066 ans.put("result", "Login successful");
67 ans.put("data", token);
2230110210198562025-05-17 16:27:12 +080068 return ResponseEntity.ok().body(ans);
22301102e0c7c6e2025-05-17 11:08:45 +080069 } else {
22301102b1fd8fd2025-06-05 18:02:21 +080070 ans.put("result", "Invalid username or password");
2230110210198562025-05-17 16:27:12 +080071 return ResponseEntity.badRequest().body(ans);
22301102e0c7c6e2025-05-17 11:08:45 +080072 }
73 }
74
75 @PostMapping("/update/username")
2230110210198562025-05-17 16:27:12 +080076 public ResponseEntity<?> updateUsername(@RequestHeader("token") String token,
77 @RequestParam("username") String oldUsername,
22301102e0c7c6e2025-05-17 11:08:45 +080078 @RequestParam("newUsername") String newUsername) {
22301102b1fd8fd2025-06-05 18:02:21 +080079 Map<String, Object> ans = new HashMap<>();
2230110210198562025-05-17 16:27:12 +080080 if(!JWTUtils.checkToken(token, oldUsername, Constants.UserRole.USER)) {
22301102b1fd8fd2025-06-05 18:02:21 +080081 ans.put("result", "Invalid token");
82 return ResponseEntity.badRequest().body(ans);
2230110210198562025-05-17 16:27:12 +080083 }
84
22301102e0c7c6e2025-05-17 11:08:45 +080085 User user = userService.findByUsername(oldUsername);
86 if (user != null) {
87 user.setUsername(newUsername);
88 userService.save(user);
22301102b1fd8fd2025-06-05 18:02:21 +080089 ans.put("result", "Username updated successfully");
90 return ResponseEntity.ok(ans);
22301102e0c7c6e2025-05-17 11:08:45 +080091 } else {
22301102b1fd8fd2025-06-05 18:02:21 +080092 ans.put("result", "User not found");
93 return ResponseEntity.badRequest().body(ans);
22301102e0c7c6e2025-05-17 11:08:45 +080094 }
95 }
96
97 @PostMapping("/update/password")
2230110210198562025-05-17 16:27:12 +080098 public ResponseEntity<?> updatePassword(@RequestHeader("token") String token,
99 @RequestParam("username") String username,
22301102e0c7c6e2025-05-17 11:08:45 +0800100 @RequestParam("newPassword") String newPassword) {
22301102b1fd8fd2025-06-05 18:02:21 +0800101 Map<String, Object> ans = new HashMap<>();
2230110210198562025-05-17 16:27:12 +0800102 if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)) {
22301102b1fd8fd2025-06-05 18:02:21 +0800103 ans.put("result", "Invalid token");
104 return ResponseEntity.badRequest().body(ans);
2230110210198562025-05-17 16:27:12 +0800105 }
106
22301102e0c7c6e2025-05-17 11:08:45 +0800107 User user = userService.findByUsername(username);
108 if (user != null) {
109 user.setPassword(newPassword);
110 userService.save(user);
22301102b1fd8fd2025-06-05 18:02:21 +0800111 ans.put("result", "Password updated successfully");
112 return ResponseEntity.ok(ans);
22301102e0c7c6e2025-05-17 11:08:45 +0800113 } else {
22301102b1fd8fd2025-06-05 18:02:21 +0800114 ans.put("result", "Invalid username or password");
115 return ResponseEntity.badRequest().body(ans);
22301102e0c7c6e2025-05-17 11:08:45 +0800116 }
117 }
118
119 @PostMapping("/update/email")
2230110210198562025-05-17 16:27:12 +0800120 public ResponseEntity<?> updateEmail(@RequestHeader("token") String token,
121 @RequestParam("username") String username,
22301102e0c7c6e2025-05-17 11:08:45 +0800122 @RequestParam("newEmail") String newEmail) {
22301102b1fd8fd2025-06-05 18:02:21 +0800123
124 Map<String, Object> ans = new HashMap<>();
2230110210198562025-05-17 16:27:12 +0800125 if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)) {
22301102b1fd8fd2025-06-05 18:02:21 +0800126 ans.put("result", "Invalid token");
127 return ResponseEntity.badRequest().body(ans);
2230110210198562025-05-17 16:27:12 +0800128 }
129
22301102e0c7c6e2025-05-17 11:08:45 +0800130 User user = userService.findByUsername(username);
131 if (user != null) {
132 user.setEmail(newEmail);
133 userService.save(user);
22301102b1fd8fd2025-06-05 18:02:21 +0800134 ans.put("result", "Email updated successfully");
135 return ResponseEntity.ok(ans);
22301102e0c7c6e2025-05-17 11:08:45 +0800136 } else {
22301102b1fd8fd2025-06-05 18:02:21 +0800137 ans.put("result", "User not found");
138 return ResponseEntity.badRequest().body(ans);
22301102e0c7c6e2025-05-17 11:08:45 +0800139 }
140 }
22301102aa5adbc2025-05-18 17:51:55 +0800141
142 @DeleteMapping("/delete")
143 public ResponseEntity<?> deleteUser(@RequestHeader("token") String token,
144 @RequestParam("username") String username,
145 @RequestParam("targetUsername") String targetUsername
146 ) {
22301102b1fd8fd2025-06-05 18:02:21 +0800147 Map<String, Object> ans = new HashMap<>();
22301102aa5adbc2025-05-18 17:51:55 +0800148 if(!JWTUtils.checkToken(token, username, Constants.UserRole.ADMIN)) {
22301102b1fd8fd2025-06-05 18:02:21 +0800149 ans.put("result", "Invalid token");
150 return ResponseEntity.badRequest().body(ans);
22301102aa5adbc2025-05-18 17:51:55 +0800151 }
152
153 User user = userService.findByUsername(targetUsername);
154 if (user != null) {
155 userService.deleteById(user.getUid());
22301102b1fd8fd2025-06-05 18:02:21 +0800156 ans.put("result", "User deleted successfully");
157 return ResponseEntity.ok(ans);
22301102aa5adbc2025-05-18 17:51:55 +0800158 } else {
22301102b1fd8fd2025-06-05 18:02:21 +0800159 ans.put("result", "User not found");
160 return ResponseEntity.badRequest().body(ans);
22301102aa5adbc2025-05-18 17:51:55 +0800161 }
162 }
163
164 @GetMapping("/list")
165 public ResponseEntity<?> listUsers(@RequestHeader("token") String token,
166 @RequestParam("username") String username) {
167 if(!JWTUtils.checkToken(token, username, Constants.UserRole.ADMIN)) {
168 return ResponseEntity.badRequest().body("Invalid token");
169 }
170
171 Map<String, Object> ans = new HashMap<>();
172 ans.put("result", "User list retrieved successfully");
22301102b1fd8fd2025-06-05 18:02:21 +0800173 ans.put("data", Map.of(
174 "amount", userService.listAll().size(),
175 "users", userService.listAll()
176 ));
22301102aa5adbc2025-05-18 17:51:55 +0800177 return ResponseEntity.ok(ans);
178 }
179
180 @GetMapping("/get/info")
181 public ResponseEntity<?> getUserInfo(@RequestHeader("token") String token,
182 @RequestParam("username") String username) {
22301102b1fd8fd2025-06-05 18:02:21 +0800183 Map<String, Object> ans = new HashMap<>();
22301102aa5adbc2025-05-18 17:51:55 +0800184 if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)) {
22301102b1fd8fd2025-06-05 18:02:21 +0800185 ans.put("result", "Invalid token");
186 return ResponseEntity.badRequest().body(ans);
22301102aa5adbc2025-05-18 17:51:55 +0800187 }
188
189 User user = userService.findByUsername(username);
190 if (user != null) {
22301102aa5adbc2025-05-18 17:51:55 +0800191 ans.put("result", "User info retrieved successfully");
22301102b1fd8fd2025-06-05 18:02:21 +0800192 ans.put("data", user);
22301102aa5adbc2025-05-18 17:51:55 +0800193 return ResponseEntity.ok(ans);
194 } else {
22301102b1fd8fd2025-06-05 18:02:21 +0800195 ans.put("result", "User not found");
196 return ResponseEntity.badRequest().body(ans);
22301102aa5adbc2025-05-18 17:51:55 +0800197 }
198 }
22301102e0c7c6e2025-05-17 11:08:45 +0800199}