blob: 3978831d6ec440fcbbc546c064e388cd12ec6ae3 [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<>();
yyyang502ab1d2025-06-03 16:40:59 +080046 ans.put("success", true);
47 ans.put("message", "User registered successfully");
48 ans.put("data", newUser);
2230110210198562025-05-17 16:27:12 +080049
50 return ResponseEntity.ok().body(ans);
22301102e0c7c6e2025-05-17 11:08:45 +080051 }
52 }
53
54 @PostMapping("/login")
yyyang502ab1d2025-06-03 16:40:59 +080055 public ResponseEntity<?> loginUser(@RequestBody Map<String, String> request) {
56 String username = request.get("username");
57 String password = request.get("password");
58
59 if (username == null || password == null) {
60 return ResponseEntity.badRequest().body("Missing username or password");
61 }
2230110210198562025-05-17 16:27:12 +080062
22301102e0c7c6e2025-05-17 11:08:45 +080063 User user = userService.findByUsernameAndPassword(username, password);
2230110210198562025-05-17 16:27:12 +080064 Map<String, Object> ans = new HashMap<>();
22301102e0c7c6e2025-05-17 11:08:45 +080065 if (user != null) {
yyyang502ab1d2025-06-03 16:40:59 +080066 String token = JWTUtils.generateToken(username, Constants.UserRole.USER, Constants.DEFAULT_EXPIRE_TIME);
67 ans.put("success", true);
68 ans.put("message", "Login successful");
69 ans.put("data", Map.of(
70 "token", token,
71 "user", user
72 ));
2230110210198562025-05-17 16:27:12 +080073 return ResponseEntity.ok().body(ans);
22301102e0c7c6e2025-05-17 11:08:45 +080074 } else {
yyyang502ab1d2025-06-03 16:40:59 +080075 ans.put("success", false);
76 ans.put("message", "Invalid username or password");
2230110210198562025-05-17 16:27:12 +080077 return ResponseEntity.badRequest().body(ans);
22301102e0c7c6e2025-05-17 11:08:45 +080078 }
79 }
80
81 @PostMapping("/update/username")
2230110210198562025-05-17 16:27:12 +080082 public ResponseEntity<?> updateUsername(@RequestHeader("token") String token,
83 @RequestParam("username") String oldUsername,
22301102e0c7c6e2025-05-17 11:08:45 +080084 @RequestParam("newUsername") String newUsername) {
2230110210198562025-05-17 16:27:12 +080085 if(!JWTUtils.checkToken(token, oldUsername, Constants.UserRole.USER)) {
86 return ResponseEntity.badRequest().body("Invalid token");
87 }
88
22301102e0c7c6e2025-05-17 11:08:45 +080089 User user = userService.findByUsername(oldUsername);
90 if (user != null) {
91 user.setUsername(newUsername);
92 userService.save(user);
93 return ResponseEntity.ok("Username updated successfully");
94 } else {
95 return ResponseEntity.badRequest().body("User not found");
96 }
97 }
98
99 @PostMapping("/update/password")
2230110210198562025-05-17 16:27:12 +0800100 public ResponseEntity<?> updatePassword(@RequestHeader("token") String token,
101 @RequestParam("username") String username,
22301102e0c7c6e2025-05-17 11:08:45 +0800102 @RequestParam("newPassword") String newPassword) {
2230110210198562025-05-17 16:27:12 +0800103 if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)) {
104 return ResponseEntity.badRequest().body("Invalid token");
105 }
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);
111 return ResponseEntity.ok("Password updated successfully");
112 } else {
113 return ResponseEntity.badRequest().body("Invalid username or password");
114 }
115 }
116
117 @PostMapping("/update/email")
2230110210198562025-05-17 16:27:12 +0800118 public ResponseEntity<?> updateEmail(@RequestHeader("token") String token,
119 @RequestParam("username") String username,
22301102e0c7c6e2025-05-17 11:08:45 +0800120 @RequestParam("newEmail") String newEmail) {
2230110210198562025-05-17 16:27:12 +0800121 if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)) {
122 return ResponseEntity.badRequest().body("Invalid token");
123 }
124
22301102e0c7c6e2025-05-17 11:08:45 +0800125 User user = userService.findByUsername(username);
126 if (user != null) {
127 user.setEmail(newEmail);
128 userService.save(user);
129 return ResponseEntity.ok("Email updated successfully");
130 } else {
131 return ResponseEntity.badRequest().body("User not found");
132 }
133 }
22301102aa5adbc2025-05-18 17:51:55 +0800134
135 @DeleteMapping("/delete")
136 public ResponseEntity<?> deleteUser(@RequestHeader("token") String token,
137 @RequestParam("username") String username,
138 @RequestParam("targetUsername") String targetUsername
139 ) {
140 if(!JWTUtils.checkToken(token, username, Constants.UserRole.ADMIN)) {
141 return ResponseEntity.badRequest().body("Invalid token");
142 }
143
144 User user = userService.findByUsername(targetUsername);
145 if (user != null) {
146 userService.deleteById(user.getUid());
147 return ResponseEntity.ok("User deleted successfully");
148 } else {
149 return ResponseEntity.badRequest().body("User not found");
150 }
151 }
152
153 @GetMapping("/list")
154 public ResponseEntity<?> listUsers(@RequestHeader("token") String token,
155 @RequestParam("username") String username) {
156 if(!JWTUtils.checkToken(token, username, Constants.UserRole.ADMIN)) {
157 return ResponseEntity.badRequest().body("Invalid token");
158 }
159
160 Map<String, Object> ans = new HashMap<>();
161 ans.put("result", "User list retrieved successfully");
162 ans.put("amount", userService.listAll().size());
163 ans.put("users", userService.listAll());
164 return ResponseEntity.ok(ans);
165 }
166
167 @GetMapping("/get/info")
168 public ResponseEntity<?> getUserInfo(@RequestHeader("token") String token,
169 @RequestParam("username") String username) {
170 if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)) {
171 return ResponseEntity.badRequest().body("Invalid token");
172 }
173
174 User user = userService.findByUsername(username);
175 if (user != null) {
176 Map<String, Object> ans = new HashMap<>();
177 ans.put("result", "User info retrieved successfully");
178 ans.put("user", user);
179 return ResponseEntity.ok(ans);
180 } else {
181 return ResponseEntity.badRequest().body("User not found");
182 }
183 }
22301102e0c7c6e2025-05-17 11:08:45 +0800184}