diff --git a/src/main/java/com/pt/controller/UserController.java b/src/main/java/com/pt/controller/UserController.java
index f72e7db..3978831 100644
--- a/src/main/java/com/pt/controller/UserController.java
+++ b/src/main/java/com/pt/controller/UserController.java
@@ -20,9 +20,15 @@
     private UserService userService;
 
     @PostMapping("/register")
-    public ResponseEntity<?> registerUser(@RequestParam("username") String username,
-                                          @RequestParam("password") String password,
-                                          @RequestParam("email") String email) {
+    public ResponseEntity<?> registerUser(@RequestBody Map<String, String> request) {
+        String username = request.get("username");
+        String password = request.get("password");
+        String email = request.get("email");
+
+        if (username == null || password == null || email == null) {
+            return ResponseEntity.badRequest().body("Missing required fields");
+        }
+
         User user = userService.findByUsername(username);
         if (user != null) {
             return ResponseEntity.badRequest().body("User already exists");
@@ -37,24 +43,37 @@
             userService.save(newUser);
 
             Map<String, Object> ans = new HashMap<>();
-            ans.put("result", "User registered successfully");
+            ans.put("success", true);
+            ans.put("message", "User registered successfully");
+            ans.put("data", newUser);
 
             return ResponseEntity.ok().body(ans);
         }
     }
 
     @PostMapping("/login")
-    public ResponseEntity<?> loginUser(@RequestParam("username") String username,
-                                       @RequestParam("password") String password) {
+    public ResponseEntity<?> loginUser(@RequestBody Map<String, String> request) {
+        String username = request.get("username");
+        String password = request.get("password");
+
+        if (username == null || password == null) {
+            return ResponseEntity.badRequest().body("Missing username or password");
+        }
 
         User user = userService.findByUsernameAndPassword(username, password);
         Map<String, Object> ans = new HashMap<>();
         if (user != null) {
-            ans.put("result", "Login successful");
-            ans.put("token", JWTUtils.generateToken(username, Constants.UserRole.USER, Constants.DEFAULT_EXPIRE_TIME));
+            String token = JWTUtils.generateToken(username, Constants.UserRole.USER, Constants.DEFAULT_EXPIRE_TIME);
+            ans.put("success", true);
+            ans.put("message", "Login successful");
+            ans.put("data", Map.of(
+                "token", token,
+                "user", user
+            ));
             return ResponseEntity.ok().body(ans);
         } else {
-            ans.put("result", "Invalid username or password");
+            ans.put("success", false);
+            ans.put("message", "Invalid username or password");
             return ResponseEntity.badRequest().body(ans);
         }
     }
