gravity settings
This commit is contained in:
parent
b12c7c77a5
commit
46e642be51
2
pom.xml
2
pom.xml
@ -10,7 +10,7 @@
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<java.version>11</java.version>
|
||||
<revision>0.4.0-SNAPSHOT</revision>
|
||||
<revision>0.4.1-SNAPSHOT</revision>
|
||||
</properties>
|
||||
|
||||
<parent>
|
||||
|
@ -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")) {
|
||||
|
@ -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.
|
||||
*
|
||||
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -84,8 +84,8 @@ public class EntryController extends BaseController {
|
||||
}
|
||||
|
||||
Page<RankedEntry> 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<Entry> transformed = new PageImpl<Entry>(
|
||||
entries.getContent().stream().map(rankedEntry -> {
|
||||
@ -151,8 +151,7 @@ public class EntryController extends BaseController {
|
||||
}
|
||||
|
||||
Page<RankedEntry> 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<Entry> transformed = new PageImpl<Entry>(
|
||||
|
@ -86,6 +86,8 @@ public class UserController extends BaseController {
|
||||
|
||||
user.setPasswordHash(null);
|
||||
|
||||
userManager.applyMetadata(getCurrentUsername(), user);
|
||||
|
||||
return user;
|
||||
}
|
||||
|
||||
|
@ -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";
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user