diff --git a/src/main/java/xyz/subho/clone/twitter/controller/UserController.java b/src/main/java/xyz/subho/clone/twitter/controller/UserController.java index fbac08d..f9014c0 100644 --- a/src/main/java/xyz/subho/clone/twitter/controller/UserController.java +++ b/src/main/java/xyz/subho/clone/twitter/controller/UserController.java @@ -18,12 +18,19 @@ package xyz.subho.clone.twitter.controller; +import java.util.List; +import java.util.UUID; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import xyz.subho.clone.twitter.model.UserResponse; @@ -46,18 +53,49 @@ ResponseEntity getUserByUserIdOrUserName( UserResponse userResponse; - if (utility.isUUID(userNameOrUserId)) { - var uuid = utility.converStringToUUID(userNameOrUserId); - userResponse = new UserResponse(userService.getUserByUserId(uuid)); - return new ResponseEntity<>(userResponse, HttpStatus.OK); - } else { - var username = - userNameOrUserId.startsWith("@") ? userNameOrUserId.substring(1) : userNameOrUserId; + if (userNameOrUserId.startsWith("@")) { + var username = userNameOrUserId.substring(1); userResponse = new UserResponse(userService.getUserByUserName(username)); return new ResponseEntity<>(userResponse, HttpStatus.OK); } + var userId = utility.converStringToUUID(userNameOrUserId); + userResponse = new UserResponse(userService.getUserByUserId(userId)); + return new ResponseEntity<>(userResponse, HttpStatus.OK); + } + + @PostMapping + ResponseEntity createUser(@RequestBody UserResponse userResponse) { + UserResponse createdUser = new UserResponse(userService.addUser(userResponse)); + return new ResponseEntity<>(createdUser, HttpStatus.OK); } - // ResponseEntity makeNewUser () + @PatchMapping + ResponseEntity updateUser(@RequestBody UserResponse userResponse) { + UserResponse updatedUser = new UserResponse(userService.editUser(userResponse)); + return new ResponseEntity<>(updatedUser, HttpStatus.OK); + } + + @PutMapping("/{userId}/follow") + ResponseEntity addFollower(@PathVariable UUID userId) { + userService.addFollower(userId); + return new ResponseEntity<>(HttpStatus.OK); + } + @DeleteMapping("/{userId}/follow") + ResponseEntity removeFollower(@PathVariable("userId") UUID userId) { + userService.removeFollower(userId); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/{userId}/followers") + ResponseEntity> getFollowers(@PathVariable("userId") UUID userId) { + List followers = userService.getFollowers(userId); + return new ResponseEntity<>(followers, HttpStatus.OK); + } + + @GetMapping("/{userId}/followings") + ResponseEntity> getFollowings(@PathVariable("userId") UUID userId) { + List followings = userService.getFollowings(userId); + return new ResponseEntity<>(followings, HttpStatus.OK); + } } diff --git a/src/main/java/xyz/subho/clone/twitter/service/UserService.java b/src/main/java/xyz/subho/clone/twitter/service/UserService.java index 71be3a4..2d97653 100644 --- a/src/main/java/xyz/subho/clone/twitter/service/UserService.java +++ b/src/main/java/xyz/subho/clone/twitter/service/UserService.java @@ -18,12 +18,26 @@ package xyz.subho.clone.twitter.service; +import java.util.List; import java.util.UUID; import xyz.subho.clone.twitter.entity.User; +import xyz.subho.clone.twitter.model.UserResponse; public interface UserService { public User getUserByUserName(String username); public User getUserByUserId(UUID userId); + + public User addUser(UserResponse user); + + public User editUser(UserResponse user); + + public boolean addFollower(UUID followerId); + + public boolean removeFollower(UUID followerId); + + public List getFollowers(UUID userId); + + public List getFollowings(UUID userId); }