diff --git a/src/main/java/hhn/labsw/bugageocaching/controller/Controller.java b/src/main/java/hhn/labsw/bugageocaching/controller/Controller.java index 2c6dc5b..0a61704 100644 --- a/src/main/java/hhn/labsw/bugageocaching/controller/Controller.java +++ b/src/main/java/hhn/labsw/bugageocaching/controller/Controller.java @@ -48,6 +48,9 @@ public class Controller { @Autowired User_InfoRepository user_infoRepository; + @Autowired + TeamInviteRepository teamInviteRepository; + @PostConstruct public void init() { fetchPublicKey(); @@ -543,7 +546,7 @@ public class Controller { user_infoRepository.save(user_info); - return ResponseEntity.status(200).body(team); + return ResponseEntity.status(200).body(new Gson().toJson(team)); } @CrossOrigin(origins = "*", allowedHeaders = "*") // only for dev purpose @@ -606,6 +609,172 @@ public class Controller { return ResponseEntity.status(200).body("Ok"); } + @CrossOrigin(origins = "http://localhost:8081") // only for dev purpose + @RequestMapping("/api/sendTeamInvite") + @ResponseBody + public ResponseEntity sendTeamInvite(@RequestParam String token, + @RequestParam String invitedUserEmail) { + // verify user + ResponseEntity verifyToken = VerificationUtil.verifyToken(token); + + if (verifyToken.getStatusCodeValue() != 200) { + return verifyToken; + } + + //get User + Claims claims = (Claims) verifyToken.getBody(); + + ResponseEntity getUser = FinderUtil.findUserFromClaim(claims); + + if (getUser.getStatusCodeValue() != 200) { + return getUser; + } + + User user = (User) getUser.getBody(); + + // get InvitedUser + + User invitedUser = userRepository.findByEmail(invitedUserEmail); + + if (invitedUser == null) { + return ResponseEntity.status(404).body("There isnt any user with that email"); + } + //---------------------- + + + //Get User_Info + User_Info user_info = user_infoRepository.findUser_InfoByUser(user); + //---------------------- + if (user_info.getTeam() == null) { + return ResponseEntity.status(400).body("You aren´t in any team"); + } + + //Get team + ResponseEntity getTeam = FinderUtil.findTeamById(String.valueOf(user_info.getTeam().getId())); + + if (getTeam.getStatusCodeValue() != 200) { + return getTeam; + } + + Team team = (Team) getTeam.getBody(); + + if (teamInviteRepository.findByUserAndTeam(invitedUser, team) != null) { + return ResponseEntity.status(400).body("The user is already invited to this team"); + } + + TeamInvite teamInvite = new TeamInvite(); + teamInvite.setUser(invitedUser); + teamInvite.setTeam(team); + + teamInviteRepository.save(teamInvite); + + return ResponseEntity.status(200).body("OK"); + } + + @CrossOrigin(origins = "http://localhost:8081") // only for dev purpose + @RequestMapping("/api/getMyTeamInvites") + @ResponseBody + public ResponseEntity getMyTeamInvites(@RequestParam String token) { + // verify user + ResponseEntity verifyToken = VerificationUtil.verifyToken(token); + + if (verifyToken.getStatusCodeValue() != 200) { + return verifyToken; + } + + //get User + Claims claims = (Claims) verifyToken.getBody(); + + ResponseEntity getUser = FinderUtil.findUserFromClaim(claims); + + if (getUser.getStatusCodeValue() != 200) { + return getUser; + } + + User user = (User) getUser.getBody(); + + List teamInvitesList = new ArrayList<>(); + + for (TeamInvite teamInvite : teamInviteRepository.findAll()) { + if (teamInvite.getUser() == user) { + teamInvitesList.add(teamInvite); + } + } + + return ResponseEntity.status(200).body(new Gson().toJson(teamInvitesList)); + } + + @CrossOrigin(origins = "http://localhost:8081") // only for dev purpose + @RequestMapping("/api/deleteTeamInvite") + @ResponseBody + public ResponseEntity deleteTeamInvite(@RequestParam String token, + @RequestParam String teamInviteID) { + // verify user + ResponseEntity verifyToken = VerificationUtil.verifyToken(token); + + if (verifyToken.getStatusCodeValue() != 200) { + return verifyToken; + } + + // get teaminvite + ResponseEntity getTeamInvite = FinderUtil.findTeamInviteByID(teamInviteID); + + if (getTeamInvite.getStatusCodeValue() != 200) { + return getTeamInvite; + } + + TeamInvite teamInvite = (TeamInvite) getTeamInvite.getBody(); + + teamInviteRepository.delete(teamInvite); + + return ResponseEntity.status(200).body("OK"); + } + + @CrossOrigin(origins = "http://localhost:8081") // only for dev purpose + @RequestMapping("/api/setTeamStatus") + @ResponseBody + public ResponseEntity setTeamStatus(@RequestParam String token, + @RequestParam String teamStatus) { + // verify user + ResponseEntity verifyToken = VerificationUtil.verifyToken(token); + + if (verifyToken.getStatusCodeValue() != 200) { + return verifyToken; + } + + //get User + Claims claims = (Claims) verifyToken.getBody(); + + ResponseEntity getUser = FinderUtil.findUserFromClaim(claims); + + if (getUser.getStatusCodeValue() != 200) { + return getUser; + } + + User user = (User) getUser.getBody(); + + //Get User_Info + User_Info user_info = user_infoRepository.findUser_InfoByUser(user); + //---------------------- + if (user_info.getTeam() == null) { + return ResponseEntity.status(400).body("You aren´t in any team"); + } + + //Get team + ResponseEntity getTeam = FinderUtil.findTeamById(String.valueOf(user_info.getTeam().getId())); + + if (getTeam.getStatusCodeValue() != 200) { + return getTeam; + } + + Team team = (Team) getTeam.getBody(); + team.setTeamStatus(teamStatus); + + teamRepository.save(team); + + return ResponseEntity.status(200).body(new Gson().toJson(teamStatus)); + } + @CrossOrigin(origins = "*", allowedHeaders = "*") // only for dev purpose @RequestMapping("/api/getCurrentStation") @ResponseBody diff --git a/src/main/java/hhn/labsw/bugageocaching/repositories/UserRepository.java b/src/main/java/hhn/labsw/bugageocaching/repositories/UserRepository.java index 8d1bab7..d8784ec 100644 --- a/src/main/java/hhn/labsw/bugageocaching/repositories/UserRepository.java +++ b/src/main/java/hhn/labsw/bugageocaching/repositories/UserRepository.java @@ -7,7 +7,7 @@ import org.springframework.data.repository.CrudRepository; import java.util.List; public interface UserRepository extends CrudRepository { - User findByUsername(String username); + User findByEmail(String email); @Query(value = "SELECT DISTINCT u.id AS ID, SUBSTRING_INDEX(u.email, '@', 1) AS Name, ui.ranking_points_sum AS Ranglistenpunkte\n" + "FROM user u,\n" + diff --git a/src/main/java/hhn/labsw/bugageocaching/util/FinderUtil.java b/src/main/java/hhn/labsw/bugageocaching/util/FinderUtil.java index 06fce97..83b8765 100644 --- a/src/main/java/hhn/labsw/bugageocaching/util/FinderUtil.java +++ b/src/main/java/hhn/labsw/bugageocaching/util/FinderUtil.java @@ -32,6 +32,8 @@ public class FinderUtil { static User_InfoRepository user_infoRepository; + static TeamInviteRepository teamInviteRepository; + @Autowired public void setCacheRepository(CacheRepository cacheRepository) { @@ -73,6 +75,11 @@ public class FinderUtil { FinderUtil.user_infoRepository = user_infoRepository; } + @Autowired + public void setTeamInviteRepository(TeamInviteRepository teamInviteRepository) { + FinderUtil.teamInviteRepository = teamInviteRepository; + } + public static ResponseEntity findCacheById(String cacheID) { @@ -105,16 +112,6 @@ public class FinderUtil { return ResponseEntity.status(404).body("The user has not started this cache yet"); } - public static ResponseEntity findUserByUsername(String username) { - - User user = userRepository.findByUsername(username); - if (user != null) { - return ResponseEntity.status(200).body(user); - } - - return ResponseEntity.status(404).body("Couldnt find user with username " + username); - } - public static ResponseEntity findCacheAccesDefinitionById(String cacheAccesDefinitionID) { Optional cacheAccesDefinitionOptional = cacheAccesDefinitionRepository.findById(Integer.valueOf(cacheAccesDefinitionID)); if (cacheAccesDefinitionOptional.isPresent()) { @@ -153,4 +150,13 @@ public class FinderUtil { } } + public static ResponseEntity findTeamInviteByID(String teamInviteID) { + Optional teamInviteOptional = teamInviteRepository.findById(Integer.valueOf(teamInviteID)); + if (teamInviteOptional.isPresent()) { + return ResponseEntity.status(200).body(teamInviteOptional.get()); + } else { + return ResponseEntity.status(404).body("Couldnt find User_Info " + teamInviteID); + } + } + }