blob: f72e7db7932d782d055c51cfc17a1236fa9a4dcb [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")
23 public ResponseEntity<?> registerUser(@RequestParam("username") String username,
24 @RequestParam("password") String password,
25 @RequestParam("email") String email) {
26 User user = userService.findByUsername(username);
27 if (user != null) {
28 return ResponseEntity.badRequest().body("User already exists");
29 } else {
30 User newUser = new User();
31
32 String uid = String.valueOf(System.currentTimeMillis());
33 newUser.setUid(uid);
34 newUser.setUsername(username);
35 newUser.setPassword(password);
36 newUser.setEmail(email);
37 userService.save(newUser);
2230110210198562025-05-17 16:27:12 +080038
39 Map<String, Object> ans = new HashMap<>();
40 ans.put("result", "User registered successfully");
41
42 return ResponseEntity.ok().body(ans);
22301102e0c7c6e2025-05-17 11:08:45 +080043 }
44 }
45
46 @PostMapping("/login")
47 public ResponseEntity<?> loginUser(@RequestParam("username") String username,
48 @RequestParam("password") String password) {
2230110210198562025-05-17 16:27:12 +080049
22301102e0c7c6e2025-05-17 11:08:45 +080050 User user = userService.findByUsernameAndPassword(username, password);
2230110210198562025-05-17 16:27:12 +080051 Map<String, Object> ans = new HashMap<>();
22301102e0c7c6e2025-05-17 11:08:45 +080052 if (user != null) {
2230110210198562025-05-17 16:27:12 +080053 ans.put("result", "Login successful");
54 ans.put("token", JWTUtils.generateToken(username, Constants.UserRole.USER, Constants.DEFAULT_EXPIRE_TIME));
55 return ResponseEntity.ok().body(ans);
22301102e0c7c6e2025-05-17 11:08:45 +080056 } else {
2230110210198562025-05-17 16:27:12 +080057 ans.put("result", "Invalid username or password");
58 return ResponseEntity.badRequest().body(ans);
22301102e0c7c6e2025-05-17 11:08:45 +080059 }
60 }
61
62 @PostMapping("/update/username")
2230110210198562025-05-17 16:27:12 +080063 public ResponseEntity<?> updateUsername(@RequestHeader("token") String token,
64 @RequestParam("username") String oldUsername,
22301102e0c7c6e2025-05-17 11:08:45 +080065 @RequestParam("newUsername") String newUsername) {
2230110210198562025-05-17 16:27:12 +080066 if(!JWTUtils.checkToken(token, oldUsername, Constants.UserRole.USER)) {
67 return ResponseEntity.badRequest().body("Invalid token");
68 }
69
22301102e0c7c6e2025-05-17 11:08:45 +080070 User user = userService.findByUsername(oldUsername);
71 if (user != null) {
72 user.setUsername(newUsername);
73 userService.save(user);
74 return ResponseEntity.ok("Username updated successfully");
75 } else {
76 return ResponseEntity.badRequest().body("User not found");
77 }
78 }
79
80 @PostMapping("/update/password")
2230110210198562025-05-17 16:27:12 +080081 public ResponseEntity<?> updatePassword(@RequestHeader("token") String token,
82 @RequestParam("username") String username,
22301102e0c7c6e2025-05-17 11:08:45 +080083 @RequestParam("newPassword") String newPassword) {
2230110210198562025-05-17 16:27:12 +080084 if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)) {
85 return ResponseEntity.badRequest().body("Invalid token");
86 }
87
22301102e0c7c6e2025-05-17 11:08:45 +080088 User user = userService.findByUsername(username);
89 if (user != null) {
90 user.setPassword(newPassword);
91 userService.save(user);
92 return ResponseEntity.ok("Password updated successfully");
93 } else {
94 return ResponseEntity.badRequest().body("Invalid username or password");
95 }
96 }
97
98 @PostMapping("/update/email")
2230110210198562025-05-17 16:27:12 +080099 public ResponseEntity<?> updateEmail(@RequestHeader("token") String token,
100 @RequestParam("username") String username,
22301102e0c7c6e2025-05-17 11:08:45 +0800101 @RequestParam("newEmail") String newEmail) {
2230110210198562025-05-17 16:27:12 +0800102 if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)) {
103 return ResponseEntity.badRequest().body("Invalid token");
104 }
105
22301102e0c7c6e2025-05-17 11:08:45 +0800106 User user = userService.findByUsername(username);
107 if (user != null) {
108 user.setEmail(newEmail);
109 userService.save(user);
110 return ResponseEntity.ok("Email updated successfully");
111 } else {
112 return ResponseEntity.badRequest().body("User not found");
113 }
114 }
22301102aa5adbc2025-05-18 17:51:55 +0800115
116 @DeleteMapping("/delete")
117 public ResponseEntity<?> deleteUser(@RequestHeader("token") String token,
118 @RequestParam("username") String username,
119 @RequestParam("targetUsername") String targetUsername
120 ) {
121 if(!JWTUtils.checkToken(token, username, Constants.UserRole.ADMIN)) {
122 return ResponseEntity.badRequest().body("Invalid token");
123 }
124
125 User user = userService.findByUsername(targetUsername);
126 if (user != null) {
127 userService.deleteById(user.getUid());
128 return ResponseEntity.ok("User deleted successfully");
129 } else {
130 return ResponseEntity.badRequest().body("User not found");
131 }
132 }
133
134 @GetMapping("/list")
135 public ResponseEntity<?> listUsers(@RequestHeader("token") String token,
136 @RequestParam("username") String username) {
137 if(!JWTUtils.checkToken(token, username, Constants.UserRole.ADMIN)) {
138 return ResponseEntity.badRequest().body("Invalid token");
139 }
140
141 Map<String, Object> ans = new HashMap<>();
142 ans.put("result", "User list retrieved successfully");
143 ans.put("amount", userService.listAll().size());
144 ans.put("users", userService.listAll());
145 return ResponseEntity.ok(ans);
146 }
147
148 @GetMapping("/get/info")
149 public ResponseEntity<?> getUserInfo(@RequestHeader("token") String token,
150 @RequestParam("username") String username) {
151 if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)) {
152 return ResponseEntity.badRequest().body("Invalid token");
153 }
154
155 User user = userService.findByUsername(username);
156 if (user != null) {
157 Map<String, Object> ans = new HashMap<>();
158 ans.put("result", "User info retrieved successfully");
159 ans.put("user", user);
160 return ResponseEntity.ok(ans);
161 } else {
162 return ResponseEntity.badRequest().body("User not found");
163 }
164 }
22301102e0c7c6e2025-05-17 11:08:45 +0800165}