From 46e642be5103287e0839aea0d764d522d1ca0f9f Mon Sep 17 00:00:00 2001 From: _Bastler Date: Wed, 6 Oct 2021 11:13:33 +0200 Subject: [PATCH] gravity settings --- pom.xml | 2 +- .../board/businesslogic/UserManager.java | 23 +++++------ .../board/controller/BaseController.java | 28 ++++++++++++- .../board/controller/EntryController.java | 7 ++-- .../board/controller/UserController.java | 2 + .../board/repository/EntryRepository.java | 4 +- .../board/security/LocalUserDetails.java | 39 ------------------- 7 files changed, 43 insertions(+), 62 deletions(-) diff --git a/pom.xml b/pom.xml index d3f70fe..2a9a491 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ UTF-8 11 - 0.4.0-SNAPSHOT + 0.4.1-SNAPSHOT diff --git a/src/main/java/de/bstly/board/businesslogic/UserManager.java b/src/main/java/de/bstly/board/businesslogic/UserManager.java index 10a3b5a..99b3c55 100644 --- a/src/main/java/de/bstly/board/businesslogic/UserManager.java +++ b/src/main/java/de/bstly/board/businesslogic/UserManager.java @@ -57,10 +57,13 @@ public class UserManager implements UserDetailsService, SmartInitializingSinglet @Value("${bstly.board.ranking.gravity:1.2}") private double GRAVITY; - /* * @see org.springframework.security.core.userdetails.UserDetailsService#loadUserByUsername(java.lang.String) */ + /* + * @see org.springframework.security.core.userdetails.UserDetailsService# + * loadUserByUsername(java.lang.String) + */ @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { LocalUser localUser = getByUsername(username); @@ -83,25 +86,16 @@ public class UserManager implements UserDetailsService, SmartInitializingSinglet } LocalUserDetails userDetails = new LocalUserDetails(username, passwordHash, authorities); - - userDetails.setGravity(GRAVITY); - - if (localUser.getSettings().containsKey("gravity")) { - try { - userDetails.setGravity(Double.parseDouble(localUser.getSettings().get("gravity"))); - } catch (Exception e) { - } - } - - userDetails.setKarma(getKarma(username)); - return userDetails; } - /* * @see org.springframework.beans.factory.SmartInitializingSingleton#afterSingletonsInstantiated() */ + /* + * @see org.springframework.beans.factory.SmartInitializingSingleton# + * afterSingletonsInstantiated() + */ @Override public void afterSingletonsInstantiated() { if (!localUserRepository.exists(qLocalUser.roles.contains("ROLE_ADMIN"))) { @@ -213,6 +207,7 @@ public class UserManager implements UserDetailsService, SmartInitializingSinglet if (user.getUsername().equalsIgnoreCase(username) && !user.getMetadata().containsKey("self")) { user.getMetadata().put("self", true); + user.getMetadata().put("defaultGravity", GRAVITY); } if (!user.getMetadata().containsKey("points")) { diff --git a/src/main/java/de/bstly/board/controller/BaseController.java b/src/main/java/de/bstly/board/controller/BaseController.java index bb5b5ce..ac08445 100644 --- a/src/main/java/de/bstly/board/controller/BaseController.java +++ b/src/main/java/de/bstly/board/controller/BaseController.java @@ -4,6 +4,7 @@ package de.bstly.board.controller; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; @@ -19,6 +20,9 @@ public class BaseController { @Autowired private UserManager localUserManager; + @Value("${bstly.board.ranking.gravity:1.2}") + private double GRAVITY; + /** * Authenticated. * @@ -37,8 +41,8 @@ public class BaseController { protected String getCurrentUsername() { LocalUserDetails localUserDetails = getLocalUserDetails(); return localUserDetails != null ? localUserDetails.getUsername() : null; - } - + } + /** * Gets the local user details. * @@ -60,4 +64,24 @@ public class BaseController { return localUserManager.getByAuth(SecurityContextHolder.getContext().getAuthentication()); } + + /** + * Gets the gravity. + * + * @return the gravity + */ + protected double getGravity() { + Authentication auth = SecurityContextHolder.getContext().getAuthentication(); + if (auth != null && auth.isAuthenticated()) { + LocalUser localUser = localUserManager.getByAuth(auth); + if (localUser.getSettings().containsKey("gravity")) { + try { + return Double.parseDouble(localUser.getSettings().get("gravity")); + } catch (Exception e) { + } + } + } + return GRAVITY; + } + } diff --git a/src/main/java/de/bstly/board/controller/EntryController.java b/src/main/java/de/bstly/board/controller/EntryController.java index 0719410..99f603b 100644 --- a/src/main/java/de/bstly/board/controller/EntryController.java +++ b/src/main/java/de/bstly/board/controller/EntryController.java @@ -84,8 +84,8 @@ public class EntryController extends BaseController { } Page entries = entryManager.fetchByRanking(dateParameter.orElse(Instant.now()), - gravityParameter.orElse(getLocalUserDetails().getGravity()), - pageParameter.orElse(0), sizeParameter.orElse(SIZE)); + gravityParameter.orElse(getGravity()), pageParameter.orElse(0), + sizeParameter.orElse(SIZE)); Page transformed = new PageImpl( entries.getContent().stream().map(rankedEntry -> { @@ -151,8 +151,7 @@ public class EntryController extends BaseController { } Page entries = entryManager.fetchByComments( - dateParameter.orElse(Instant.now()), - gravityParameter.orElse(getLocalUserDetails().getGravity()), + dateParameter.orElse(Instant.now()), gravityParameter.orElse(getGravity()), pageParameter.orElse(0), sizeParameter.orElse(SIZE)); Page transformed = new PageImpl( diff --git a/src/main/java/de/bstly/board/controller/UserController.java b/src/main/java/de/bstly/board/controller/UserController.java index 55a03a1..168cf04 100644 --- a/src/main/java/de/bstly/board/controller/UserController.java +++ b/src/main/java/de/bstly/board/controller/UserController.java @@ -86,6 +86,8 @@ public class UserController extends BaseController { user.setPasswordHash(null); + userManager.applyMetadata(getCurrentUsername(), user); + return user; } diff --git a/src/main/java/de/bstly/board/repository/EntryRepository.java b/src/main/java/de/bstly/board/repository/EntryRepository.java index 4d5768c..f1948c2 100644 --- a/src/main/java/de/bstly/board/repository/EntryRepository.java +++ b/src/main/java/de/bstly/board/repository/EntryRepository.java @@ -29,13 +29,13 @@ public interface EntryRepository static final String COMMENTS_QUERY = "SELECT comment.target,MAX(comment.created) as last,COUNT(comment.id) AS count FROM comments as comment GROUP BY comment.target"; - static final String RANK_CALCULATION_QUERY = "SELECT entry.*, (IFNULL(upvote.count,0) - IFNULL(downvote.count,0)) as points, (IFNULL(upvote.count,0) - IFNULL(downvote.count,0)) / POW(TIMESTAMPDIFF(HOUR, entry.created, :before)+2,:gravity) AS ranking FROM entries AS entry LEFT JOIN (" + static final String RANK_CALCULATION_QUERY = "SELECT entry.*, (IFNULL(upvote.count,0) - IFNULL(downvote.count,0)) as points, (IFNULL(upvote.count,0) - IFNULL(downvote.count,0)) / IF(:gravity > 0, POW(TIMESTAMPDIFF(HOUR, entry.created, :before)+2,:gravity), 1) AS ranking FROM entries AS entry LEFT JOIN (" + UPVOTES_QUERY + ") AS upvote ON upvote.target = entry.id LEFT JOIN (" + DOWNVOTES_QUERY + ") AS downvote ON downvote.target = entry.id WHERE entry.created < :before AND entry.entry_status = 'NORMAL' ORDER BY ranking DESC, entry.created DESC"; - static final String COMMENT_CALCULATION_QUERY = "SELECT entry.*, IFNULL(comment.count,0) as comments, IFNULL(comment.count,0) / POW(TIMESTAMPDIFF(HOUR, comment.last, :before)+2,:gravity) AS ranking FROM entries AS entry LEFT JOIN (" + static final String COMMENT_CALCULATION_QUERY = "SELECT entry.*, IFNULL(comment.count,0) as comments, IFNULL(comment.count,0) / IF(:gravity > 0, POW(TIMESTAMPDIFF(HOUR, comment.last, :before)+2,:gravity), 1) AS ranking FROM entries AS entry LEFT JOIN (" + COMMENTS_QUERY + ") AS comment ON comment.target = entry.id WHERE entry.created < :before AND entry.entry_status = 'NORMAL' ORDER BY ranking DESC, entry.created DESC"; diff --git a/src/main/java/de/bstly/board/security/LocalUserDetails.java b/src/main/java/de/bstly/board/security/LocalUserDetails.java index 738550f..df6ffe8 100644 --- a/src/main/java/de/bstly/board/security/LocalUserDetails.java +++ b/src/main/java/de/bstly/board/security/LocalUserDetails.java @@ -18,9 +18,6 @@ public class LocalUserDetails extends User { */ private static final long serialVersionUID = 1L; - private double gravity; - private long karma; - /** * Instantiates a new local user details. * @@ -33,40 +30,4 @@ public class LocalUserDetails extends User { super(username, password, authorities); } - /** - * Gets the gravity. - * - * @return the gravity - */ - public double getGravity() { - return gravity; - } - - /** - * Sets the gravity. - * - * @param gravity the new gravity - */ - public void setGravity(double gravity) { - this.gravity = gravity; - } - - /** - * Gets the karma. - * - * @return the karma - */ - public long getKarma() { - return karma; - } - - /** - * Sets the karma. - * - * @param karma the new karma - */ - public void setKarma(long karma) { - this.karma = karma; - } - }