diff --git a/server/src/main/java/edu/sjsu/moth/server/controller/InboxController.java b/server/src/main/java/edu/sjsu/moth/server/controller/InboxController.java index 720eccf5..e611de4c 100644 --- a/server/src/main/java/edu/sjsu/moth/server/controller/InboxController.java +++ b/server/src/main/java/edu/sjsu/moth/server/controller/InboxController.java @@ -6,12 +6,14 @@ import com.fasterxml.jackson.databind.JsonNode; import edu.sjsu.moth.server.db.Followers; import edu.sjsu.moth.server.db.FollowersRepository; +import edu.sjsu.moth.server.db.AccountRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import reactor.core.publisher.Mono; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.ArrayList; + import java.util.Collections; import java.util.List; @@ -21,6 +23,8 @@ public class InboxController { @Autowired FollowersRepository followersRepository; + @Autowired + AccountRepository accountRepository; //required to map payload from JSON to a Java Object for data access @@ -42,11 +46,19 @@ public Mono usersInbox(@PathVariable String id, @RequestBody JsonNode in public Mono followerHandler(String id, JsonNode inboxNode, String requestType) { String follower = inboxNode.get("actor").asText(); if (requestType.equals("Follow")) { + // check id + if (accountRepository.findItemByAcct(id)==null) { + return Mono.error(new RuntimeException("Error: Account to follow doesn't exist.")); + } // find id, grab arraylist, append - return followersRepository.findItemById(id).flatMap(followedUser -> { - followedUser.getFollowers().add(follower); - return followersRepository.save(followedUser).thenReturn("done"); - }); + else { + return followersRepository.findItemById(id) + .switchIfEmpty(Mono.just(new Followers(id, new ArrayList<>()))) + .flatMap(followedUser -> { + followedUser.getFollowers().add(follower); + return followersRepository.save(followedUser).thenReturn("done"); + }); + } } if (requestType.equals("Undo")) { // find id, grab arraylist, remove