Dynamic Leaderboard update on group update
This commit is contained in:
parent
43d97b4f97
commit
09dbe344d5
8 changed files with 53 additions and 22 deletions
|
@ -10,8 +10,6 @@ import java.util.regex.Matcher;
|
|||
import javax.net.ssl.SSLServerSocket;
|
||||
import javax.net.ssl.SSLServerSocketFactory;
|
||||
|
||||
import be.jeffcheasey88.peeratcode.bonus.discord.Bot;
|
||||
import be.jeffcheasey88.peeratcode.bonus.extract.RouteExtracter;
|
||||
import be.jeffcheasey88.peeratcode.framework.Client;
|
||||
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
||||
import be.jeffcheasey88.peeratcode.framework.HttpUtil;
|
||||
|
@ -21,6 +19,7 @@ import be.jeffcheasey88.peeratcode.framework.Response;
|
|||
import be.jeffcheasey88.peeratcode.framework.Route;
|
||||
import be.jeffcheasey88.peeratcode.framework.Router;
|
||||
import be.jeffcheasey88.peeratcode.framework.User;
|
||||
import be.jeffcheasey88.peeratcode.model.Completion;
|
||||
import be.jeffcheasey88.peeratcode.model.Group;
|
||||
import be.jeffcheasey88.peeratcode.repository.DatabaseRepository;
|
||||
import be.jeffcheasey88.peeratcode.routes.BadgeDetails;
|
||||
|
@ -67,7 +66,7 @@ public class Main{
|
|||
|
||||
initRoutes(router, config);
|
||||
// RouteExtracter extracter = new RouteExtracter(router);
|
||||
// extracter.extractDoc();
|
||||
// extracter.extract();
|
||||
|
||||
startWebServer(config, router);
|
||||
}
|
||||
|
@ -83,20 +82,21 @@ public class Main{
|
|||
router.register(new PlayerDetails(router.getDataBase()));
|
||||
router.register(new BadgeDetails(router.getDataBase()));
|
||||
|
||||
router.register(new GroupList(router.getDataBase()));
|
||||
router.register(new GroupJoin(router.getDataBase(), config.getGroupJoinMinutes(), config.getGroupQuitMinutes()));
|
||||
router.register(new GroupQuit(router.getDataBase(), config.getGroupJoinMinutes()));
|
||||
|
||||
Locker<Group> groupLock = new Locker<>();
|
||||
router.register(new GroupCreate(router.getDataBase(), groupLock, config.getGroupJoinMinutes()));
|
||||
|
||||
DynamicLeaderboard dlb = new DynamicLeaderboard(router.getDataBase());
|
||||
router.register(dlb);
|
||||
|
||||
router.register(new PuzzleResponse(router.getDataBase(), config.getUsersFiles(), dlb.getLocker()));
|
||||
Locker<Completion> leaderboard = dlb.getLocker();
|
||||
|
||||
Bot bot = new Bot(config, router.getDataBase(), groupLock);
|
||||
bot.start();
|
||||
router.register(new PuzzleResponse(router.getDataBase(), config.getUsersFiles(), leaderboard));
|
||||
router.register(new GroupList(router.getDataBase()));
|
||||
router.register(new GroupJoin(router.getDataBase(), config.getGroupJoinMinutes(), config.getGroupQuitMinutes(), leaderboard));
|
||||
router.register(new GroupQuit(router.getDataBase(), config.getGroupJoinMinutes(), leaderboard));
|
||||
|
||||
// Bot bot = new Bot(config, router.getDataBase(), groupLock);
|
||||
// bot.start();
|
||||
}
|
||||
|
||||
private static void startWebServer(Configuration config, Router router) throws IOException {
|
||||
|
|
|
@ -27,6 +27,7 @@ public class Bot extends Thread{
|
|||
|
||||
@Override
|
||||
public void run(){
|
||||
if(token == null) return;
|
||||
try{
|
||||
JDA jda = JDABuilder.createDefault(token).build();
|
||||
jda.awaitReady();
|
||||
|
|
|
@ -27,7 +27,7 @@ public class RouteExtracter {
|
|||
Map<RequestType, Map<Response, Route>> responses = (Map<RequestType, Map<Response, Route>>) field.get(this.router);
|
||||
for(Entry<RequestType, Map<Response, Route>> types : responses.entrySet()){
|
||||
for(Entry<Response, Route> routes : types.getValue().entrySet()){
|
||||
System.out.println("["+types.getKey()+"] "+routes.getValue().path());
|
||||
System.out.println("["+types.getKey()+"] ("+routes.getValue().needLogin()+") "+routes.getValue().path());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,6 +34,11 @@ public class Completion {
|
|||
addTry(currentPuzzle, response);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(){
|
||||
return "Completion[puzzleId="+puzzleId+", userId="+playerId+",tries="+tries+",score="+score+"]";
|
||||
}
|
||||
|
||||
public int getPuzzleId() {
|
||||
return puzzleId;
|
||||
}
|
||||
|
@ -60,6 +65,10 @@ public class Completion {
|
|||
}
|
||||
}
|
||||
|
||||
public void updatePlayer(int playerId){
|
||||
this.playerId = playerId;
|
||||
}
|
||||
|
||||
public String getFileName() {
|
||||
return fileName;
|
||||
}
|
||||
|
|
|
@ -57,7 +57,7 @@ public enum DatabaseQuery {
|
|||
INSERT_COMPLETION(
|
||||
"INSERT INTO completions (fk_puzzle, fk_player, tries, code, fileName, score) values (?, ?, ?, ?, ?, ?)"),
|
||||
UPDATE_COMPLETION(
|
||||
"UPDATE completions SET tries = ?, score = ? WHERE fk_puzzle = ? AND fk_player = ?"),
|
||||
"UPDATE completions SET tries = ?, score = ?, fk_player = ? WHERE fk_puzzle = ? AND fk_player = ?"),
|
||||
SCORE("SELECT score FROM completions WHERE fk_player = ? AND fk_puzzle = ?"),
|
||||
SCORE_GROUP("SELECT c.score\r\n"
|
||||
+ "FROM completions c\r\n"
|
||||
|
|
|
@ -572,11 +572,15 @@ public class DatabaseRepository {
|
|||
ensureConnection();
|
||||
Completion completion = getCompletionGroup(userId, puzzleId);
|
||||
if (completion == null){
|
||||
System.out.println("Completion is null");
|
||||
completion = new Completion(userId, puzzleId, fileName, code, response, currentPuzzle);
|
||||
insertCompletion(completion);
|
||||
} else {
|
||||
System.out.println(completion);
|
||||
completion.addTry(currentPuzzle, response);
|
||||
updateCompletion(completion);
|
||||
int lastUserId = completion.getPlayerId();
|
||||
completion.updatePlayer(userId);
|
||||
updateCompletion(completion, lastUserId);
|
||||
}
|
||||
return completion;
|
||||
} catch (SQLException e) {
|
||||
|
@ -662,12 +666,14 @@ public class DatabaseRepository {
|
|||
return false;
|
||||
}
|
||||
|
||||
private void updateCompletion(Completion completionToUpdate) throws SQLException {
|
||||
private void updateCompletion(Completion completionToUpdate, int user) throws SQLException{
|
||||
System.out.println("update "+completionToUpdate);
|
||||
PreparedStatement statement = DatabaseQuery.UPDATE_COMPLETION.prepare(this.con);
|
||||
statement.setInt(1, completionToUpdate.getTries());
|
||||
statement.setInt(2, completionToUpdate.getScore());
|
||||
statement.setInt(3, completionToUpdate.getPuzzleId());
|
||||
statement.setInt(4, completionToUpdate.getPlayerId());
|
||||
statement.setInt(3, completionToUpdate.getPlayerId());
|
||||
statement.setInt(4, completionToUpdate.getPuzzleId());
|
||||
statement.setInt(5, user);
|
||||
statement.executeUpdate();
|
||||
}
|
||||
}
|
|
@ -11,10 +11,12 @@ import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
|||
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
||||
import be.jeffcheasey88.peeratcode.framework.HttpUtil;
|
||||
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
||||
import be.jeffcheasey88.peeratcode.framework.Locker;
|
||||
import be.jeffcheasey88.peeratcode.framework.Response;
|
||||
import be.jeffcheasey88.peeratcode.framework.Route;
|
||||
import be.jeffcheasey88.peeratcode.framework.User;
|
||||
import be.jeffcheasey88.peeratcode.model.Chapter;
|
||||
import be.jeffcheasey88.peeratcode.model.Completion;
|
||||
import be.jeffcheasey88.peeratcode.model.Group;
|
||||
import be.jeffcheasey88.peeratcode.repository.DatabaseRepository;
|
||||
|
||||
|
@ -24,10 +26,13 @@ public class GroupJoin implements Response{
|
|||
private int groupDelay;
|
||||
private String waitTime;
|
||||
|
||||
public GroupJoin(DatabaseRepository repo, int groupDelay, String waitTime){
|
||||
private final Locker<Completion> leaderboard;
|
||||
|
||||
public GroupJoin(DatabaseRepository repo, int groupDelay, String waitTime, Locker<Completion> locker){
|
||||
this.repo = repo;
|
||||
this.groupDelay = groupDelay;
|
||||
this.waitTime = waitTime;
|
||||
this.leaderboard = locker;
|
||||
}
|
||||
|
||||
@RouteDoc(path = "/groupJoin", responseCode = 200, responseDescription = "L'utilisateur a rejoint le groupe")
|
||||
|
@ -64,6 +69,8 @@ public class GroupJoin implements Response{
|
|||
|
||||
if (this.repo.insertUserInGroup(group, user)) {
|
||||
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *");
|
||||
|
||||
leaderboard.setValue(new Completion(0, 0, 0, null, 0));
|
||||
} else {
|
||||
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
|
||||
}
|
||||
|
|
|
@ -11,10 +11,12 @@ import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
|||
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
||||
import be.jeffcheasey88.peeratcode.framework.HttpUtil;
|
||||
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
||||
import be.jeffcheasey88.peeratcode.framework.Locker;
|
||||
import be.jeffcheasey88.peeratcode.framework.Response;
|
||||
import be.jeffcheasey88.peeratcode.framework.Route;
|
||||
import be.jeffcheasey88.peeratcode.framework.User;
|
||||
import be.jeffcheasey88.peeratcode.model.Chapter;
|
||||
import be.jeffcheasey88.peeratcode.model.Completion;
|
||||
import be.jeffcheasey88.peeratcode.model.Group;
|
||||
import be.jeffcheasey88.peeratcode.repository.DatabaseRepository;
|
||||
|
||||
|
@ -23,9 +25,13 @@ public class GroupQuit implements Response{
|
|||
private DatabaseRepository repo;
|
||||
private int groupDelay;
|
||||
|
||||
public GroupQuit(DatabaseRepository repo, int groupDelay){
|
||||
private final Locker<Completion> leaderboard;
|
||||
|
||||
public GroupQuit(DatabaseRepository repo, int groupDelay, Locker<Completion> locker){
|
||||
this.repo = repo;
|
||||
this.groupDelay = groupDelay;
|
||||
|
||||
this.leaderboard = locker;
|
||||
}
|
||||
|
||||
@RouteDoc(path = "/groupQuit", responseCode = 200, responseDescription = "L'utilisateur à quitter le groupe")
|
||||
|
@ -55,6 +61,8 @@ public class GroupQuit implements Response{
|
|||
|
||||
if (this.repo.leaveGroup(group, user)) {
|
||||
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *");
|
||||
|
||||
leaderboard.setValue(new Completion(0, 0, 0, null, 0));
|
||||
} else {
|
||||
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue