diff --git a/labswp_2019_sose_geocaching_frontend/frontend/src/pages/ranking.vue b/labswp_2019_sose_geocaching_frontend/frontend/src/pages/ranking.vue index 211979f..63857cd 100644 --- a/labswp_2019_sose_geocaching_frontend/frontend/src/pages/ranking.vue +++ b/labswp_2019_sose_geocaching_frontend/frontend/src/pages/ranking.vue @@ -44,6 +44,7 @@ type="text" label="Username eingeben" unelevated color="negative" + v-model="deleteUser" > @@ -53,6 +54,7 @@ label="Punkte des Nutzer zurücksetzen" color="negative" class="full-width" + @click="resetPoints()" />
@@ -102,7 +104,8 @@ tab: 'solo', rankinglist: [], teamRankinglist: [], - username: null + username: null, + deleteUser: null } }, created: function () { @@ -183,7 +186,25 @@ // lastSum = ranking.rankingPointsSum; // } }, - resetPoints(username){ + resetPoints(){ + if(this.deleteUser != null){ + let username = this.deleteUser; + let token = JSON.parse(localStorage.getItem('userToken')).token; + + this.$axios.put('/api/resetSingleUser',null, {params: {token, username}}) + .then((response) => { + console.log("Rankinglist: "); + console.log(response.data); + this.fetchRankinglist(); + }).catch((error) => { + }) + } else { + this.$store.commit('dialog/NEW_MESSAGE_DIALOG', { + message: "Zum zurücksetzen der Punkte eines Nutzers gib bitte einen Usernamen ein", + title: "Fehlender Username", + color: "negative" + }); + } }, } diff --git a/src/main/java/hhn/labsw/bugageocaching/controller/Controller.java b/src/main/java/hhn/labsw/bugageocaching/controller/Controller.java index f752dc4..bbf0e1b 100644 --- a/src/main/java/hhn/labsw/bugageocaching/controller/Controller.java +++ b/src/main/java/hhn/labsw/bugageocaching/controller/Controller.java @@ -1284,6 +1284,62 @@ public class Controller { } + @ApiOperation(value = "Resets the points of a single User ") + @ApiResponses(value = { + @ApiResponse(code = 404, message = "Database error"), + @ApiResponse(code = 401, message = "JWT Token expired"), + @ApiResponse(code = 400, message = "Something went wrong at verification") + }) + @CrossOrigin(origins = "*", allowedHeaders = "*") // only for dev purpose + @RequestMapping(value = "/api/resetSingleUser", method = RequestMethod.PUT, produces = "application/json") + public ResponseEntity resetSingleUser(@RequestParam String token, @RequestParam String username) { + logger.debug("API CALL: /api/resetSingleUser"); + // 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(); + + logger.debug("/api/resetRankingList: " + "User verificated: " + user.getEmail()); + //---------------------- + boolean isAdmin = false; + for (Role role : user.getRoles()) { + if (role.getId() == 7) { + isAdmin = true; + } + } + + if (isAdmin) { + + User deleteUser = userRepository.findByUsername(username); + + User_Info user_info = user_infoRepository.findUser_InfoByUser(deleteUser); + user_info.setRankingPointsSum(0); + user_infoRepository.save(user_info); + + for (Bearbeitet bearbeitet : bearbeitetRepository.findByUser(deleteUser)) { + if (bearbeitet.getCacheAccesDefinition().getId() == 1) { + bearbeitetRepository.delete(bearbeitet); + } + } + return ResponseEntity.status(200).body(HttpStatus.OK); + } else { + return ResponseEntity.status(400).body("Der Benutzer ist kein Admin und kann deshalb die Rangliste nicht zurücksetzen."); + } + } + @ApiOperation(value = "Test method (Changes its purpose often)") @ApiResponses(value = { @ApiResponse(code = 404, message = "Database error"), diff --git a/src/main/java/hhn/labsw/bugageocaching/repositories/UserRepository.java b/src/main/java/hhn/labsw/bugageocaching/repositories/UserRepository.java index 25ec2f9..9c920fe 100644 --- a/src/main/java/hhn/labsw/bugageocaching/repositories/UserRepository.java +++ b/src/main/java/hhn/labsw/bugageocaching/repositories/UserRepository.java @@ -8,6 +8,7 @@ import java.util.List; public interface UserRepository extends CrudRepository { User findByEmail(String email); + User findByUsername(String username); // @Query(value = "SELECT DISTINCT u.id AS ID, username AS Name, ui.ranking_points_sum AS Ranglistenpunkte\n" + // "FROM user u,\n" +