package fr.ippon.tatami.web.rest; import com.yammer.metrics.annotation.Timed; import fr.ippon.tatami.domain.User; import fr.ippon.tatami.service.FriendshipService; import fr.ippon.tatami.service.MailService; import fr.ippon.tatami.service.UserService; import fr.ippon.tatami.service.dto.UserDTO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import javax.inject.Inject; import javax.servlet.http.HttpServletResponse; import java.util.Collection; /** * REST controller for managing friendships. * * @author Julien Dubois */ @Controller public class FriendshipController { private final Logger log = LoggerFactory.getLogger(UserController.class); @Inject private FriendshipService friendshipService; @Inject private UserService userService; @Inject private MailService mailService; @RequestMapping(value = "/rest/users/{username}/friends", method = RequestMethod.GET, produces = "application/json") @Timed @ResponseBody public Collection<UserDTO> getFriends(@PathVariable String username, HttpServletResponse response) { User user = userService.getUserByUsername(username); if (user == null) { response.setStatus(HttpServletResponse.SC_NOT_FOUND); return null; } Collection<User> friends = friendshipService.getFriendsForUser(username); return userService.buildUserDTOList(friends); } @RequestMapping(value = "/rest/users/{username}/followers", method = RequestMethod.GET, produces = "application/json") @Timed @ResponseBody public Collection<UserDTO> getFollowers(@PathVariable String username, HttpServletResponse response) { User user = userService.getUserByUsername(username); if (user == null) { response.setStatus(HttpServletResponse.SC_NOT_FOUND); return null; } Collection<User> friends = friendshipService.getFollowersForUser(username); return userService.buildUserDTOList(friends); } /** * Added an "action" parameter to specify which type of PATCH we should do (Activate / Follow ). */ @RequestMapping(value = "/rest/users/{username}", method = RequestMethod.PATCH) @Timed @ResponseBody public UserDTO updateFriend(@RequestBody fr.ippon.tatami.web.rest.dto.UserActionStatus action, @PathVariable("username") String username) { if ( action.getFriendShip() != null && action.getFriendShip() ) { if ( action.getFriend() ) { friendshipService.followUser(username); } else { friendshipService.unfollowUser(username); } } else if ( action.getActivate() != null && action.getActivate()) { this.log.debug("REST request to desactivate Profile : {}", username); userService.desactivateUser(username); // User user = userService.getUserByUsername(username); // mailService.sendDeactivatedEmail(user.getLogin()); } return userService.buildUserDTO(userService.getUserByUsername(username)); } /** * WARNING! This is the old API, only used by the admin console * <p/> * POST /friendships/create -> follow user */ @RequestMapping(value = "/rest/friendships/create", method = RequestMethod.POST, consumes = "application/json") @ResponseBody @Timed @Deprecated public boolean followUser(@RequestBody User user, HttpServletResponse response) { log.debug("REST request to follow username : {}", user.getUsername()); boolean success = friendshipService.followUser(user.getUsername()); if (!success) { response.setStatus(HttpServletResponse.SC_NOT_FOUND); } return success; } /** * WARNING! This is the old API, only used by the admin console * <p/> * POST /friendships/destroy -> unfollow user */ @RequestMapping(value = "/rest/friendships/destroy", method = RequestMethod.POST, consumes = "application/json") @ResponseBody @Timed @Deprecated public boolean unfollowUser(@RequestBody User user, HttpServletResponse response) { log.debug("REST request to unfollow username : {}", user.getUsername()); boolean success = friendshipService.unfollowUser(user.getUsername()); if (!success) { response.setStatus(HttpServletResponse.SC_NOT_FOUND); } return success; } /** * WARNING! This is the old API, only used by the admin console * <p/> * GET /friendships -> is the user a friend ? */ @RequestMapping(value = "/rest/friendships", method = RequestMethod.GET, produces = "application/json") @ResponseBody @Timed @Deprecated public Boolean followUser(@RequestParam("screen_name") String username) { if (log.isDebugEnabled()) { log.debug("REST request to get friendship status : " + username); } return friendshipService.isFollowing(username); } }