diff --git a/PeerAtCodeFramework.jar b/PeerAtCodeFramework.jar index 58440ec..b6c9c21 100644 Binary files a/PeerAtCodeFramework.jar and b/PeerAtCodeFramework.jar differ diff --git a/src/dev/peerat/backend/Main.java b/src/dev/peerat/backend/Main.java index 1ab997d..a5790a2 100644 --- a/src/dev/peerat/backend/Main.java +++ b/src/dev/peerat/backend/Main.java @@ -51,6 +51,7 @@ import dev.peerat.backend.routes.users.ProfileSettings; import dev.peerat.backend.routes.users.Register; import dev.peerat.backend.utils.Mail; import dev.peerat.framework.Context; +import dev.peerat.framework.DependencyInjector; import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpWriter; import dev.peerat.framework.Locker; @@ -177,44 +178,18 @@ public class Main{ } private static void initRoutes(Router router, DatabaseRepository repo, Configuration config) throws Exception{ - Map playersWaiting = new HashMap<>(); - Mail mail = config.getMail(); - Locker groupLock = new Locker<>(); - Locker leaderboard = new Locker<>(); - - if(config.isProduction()) - router. - register(new Register(repo, playersWaiting, mail)). - register(new MailConfirmation(repo, router, config.getUsersFiles(), config.getGitToken(), playersWaiting, mail)); - - router. - register(new Login(repo, router)). - register(new ProfileSettings(repo)). - register(new ChangePassword(repo)). -// register(new ForgotPassword(router, repo, mail)). - - register(new DynamicLogs(router.getLogger(), repo)). - register(new ExceptionLogs(router.getExceptionLogger())). - - register(new WebHookLeaderboard(leaderboard)). - - register(new ChapterElement(repo)). - register(new ChapterList(repo)). - register(new PuzzleElement(repo)). - register(new Result(repo)). - register(new Leaderboard(repo)). - register(new PlayerDetails(repo)). - register(new BadgeDetails(repo)). - - register(new DynamicLeaderboard(repo, leaderboard)). - register(new PuzzleResponse(repo, config.getUsersFiles(), leaderboard)). - - register(new GroupCreate(repo, groupLock, config.getGroupJoinMinutes())). - register(new GroupList(repo)). - register(new GroupJoin(repo, config.getGroupJoinMinutes(), config.getGroupQuitMinutes(), leaderboard)). - register(new GroupQuit(repo, config.getGroupJoinMinutes(), leaderboard)) - - .register(new Swagger(new RouteExtracter(router),config.getTokenIssuer())); + router.registerPackages(new DependencyInjector() + .of(repo, router, config.getMail(), new RouteExtracter(router)) + .of("waitting", new HashMap<>()) + .of("leaderboard", new Locker<>()) + .of("log", router.getLogger()) + .of("exception", router.getExceptionLogger()) + .of("groups", new Locker<>()) + .of("groupDelay", config.getGroupJoinMinutes()) + .of("waitTime", config.getGroupQuitMinutes()) + .of("usersFiles", config.getUsersFiles()) + .of("gitToken", config.getGitToken()) + .of("issuer", config.getTokenIssuer())); // Bot bot = new Bot(config, repo, groupLock); // bot.start(); diff --git a/src/dev/peerat/backend/repository/DatabaseRepository.java b/src/dev/peerat/backend/repository/DatabaseRepository.java index 0e1b0d7..193b829 100644 --- a/src/dev/peerat/backend/repository/DatabaseRepository.java +++ b/src/dev/peerat/backend/repository/DatabaseRepository.java @@ -8,7 +8,9 @@ import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.SortedSet; import java.util.TreeSet; @@ -32,6 +34,56 @@ public class DatabaseRepository { public DatabaseRepository(Configuration config) { this.config = config; } + + public void hotfix() throws Exception{ + ensureConnection(); + + PreparedStatement stmt = con.prepareStatement("SELECT c.*, g.* FROM completions c JOIN puzzles p ON c.fk_puzzle = p.id_puzzle JOIN containsGroups cg ON cg.fk_player = c.fk_player JOIN groups g ON g.id_group = cg.fk_group WHERE g.fk_chapter = 12 AND p.fk_chapter = 12;"); + ResultSet results = stmt.executeQuery(); + List list = new ArrayList<>(); + while(results.next()){ + Completionz complete = new Completionz(results); + list.add(complete); + } + Map> map = new HashMap<>(); + for(Completionz comp : list){ + Map puz = map.get(comp.puzzle); + if(puz == null){ + puz = new HashMap<>(); + map.put(comp.puzzle, puz); + } + Completionz c = puz.get(comp.groups); + if(c == null){ + puz.put(comp.groups, comp); + }else{ + if(comp.score >= c.score){ + puz.put(comp.groups, comp); + System.out.println("remove compl "+c.id); + } + } + } + } + + private static class Completionz{ + + public int id; + public int puzzle; + public int player; + public int tries; + public int score; + public int groups; + + public Completionz(ResultSet result) throws Exception{ + id = result.getInt("id_completion"); + puzzle = result.getInt("fk_puzzle"); + player = result.getInt("fk_player"); + tries = result.getInt("tries"); + score = result.getInt("score"); + groups = result.getInt("id_group"); + System.out.println(id); + } + + } private void ensureConnection() throws SQLException { if (con == null || (!con.isValid(5))) { diff --git a/src/dev/peerat/backend/routes/DynamicLeaderboard.java b/src/dev/peerat/backend/routes/DynamicLeaderboard.java index b2df758..5748e01 100644 --- a/src/dev/peerat/backend/routes/DynamicLeaderboard.java +++ b/src/dev/peerat/backend/routes/DynamicLeaderboard.java @@ -8,6 +8,7 @@ import dev.peerat.backend.repository.DatabaseRepository; import dev.peerat.framework.Context; import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Injection; import dev.peerat.framework.Locker; import dev.peerat.framework.Locker.Key; import dev.peerat.framework.Route; @@ -16,7 +17,7 @@ public class DynamicLeaderboard extends Leaderboard{ private Locker locker; - public DynamicLeaderboard(DatabaseRepository databaseRepo, Locker locker){ + public DynamicLeaderboard(DatabaseRepository databaseRepo, @Injection("leaderboard") Locker locker){ super(databaseRepo); this.locker = locker; } diff --git a/src/dev/peerat/backend/routes/PlayerDetails.java b/src/dev/peerat/backend/routes/PlayerDetails.java index e309ae1..8bcff6e 100644 --- a/src/dev/peerat/backend/routes/PlayerDetails.java +++ b/src/dev/peerat/backend/routes/PlayerDetails.java @@ -1,6 +1,5 @@ package dev.peerat.backend.routes; -import java.util.Base64; import java.util.regex.Matcher; import dev.peerat.backend.bonus.extract.RouteDoc; diff --git a/src/dev/peerat/backend/routes/PuzzleResponse.java b/src/dev/peerat/backend/routes/PuzzleResponse.java index 321e5e3..bef440e 100644 --- a/src/dev/peerat/backend/routes/PuzzleResponse.java +++ b/src/dev/peerat/backend/routes/PuzzleResponse.java @@ -22,6 +22,7 @@ import dev.peerat.backend.repository.DatabaseRepository; import dev.peerat.framework.Context; import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Injection; import dev.peerat.framework.Locker; import dev.peerat.framework.Response; import dev.peerat.framework.Route; @@ -33,7 +34,7 @@ public class PuzzleResponse implements Response { private final Locker leaderboard; - public PuzzleResponse(DatabaseRepository databaseRepo, String initUsersFilesPath, Locker locker){ + public PuzzleResponse(DatabaseRepository databaseRepo, @Injection("usersFiles") String initUsersFilesPath, @Injection("leaderboard") Locker locker){ this.databaseRepo = databaseRepo; usersFilesPath = initUsersFilesPath; this.leaderboard = locker; diff --git a/src/dev/peerat/backend/routes/Swagger.java b/src/dev/peerat/backend/routes/Swagger.java index 24a90e2..ba271c2 100644 --- a/src/dev/peerat/backend/routes/Swagger.java +++ b/src/dev/peerat/backend/routes/Swagger.java @@ -6,6 +6,7 @@ import dev.peerat.backend.bonus.extract.RouteExtracter; import dev.peerat.framework.Context; import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Injection; import dev.peerat.framework.Response; import dev.peerat.framework.Route; @@ -13,7 +14,7 @@ public class Swagger implements Response{ private String json; - public Swagger(RouteExtracter extracter, String host){ + public Swagger(RouteExtracter extracter, @Injection("issuer") String host){ try{ this.json = extracter.swagger(host).toString(); }catch(Exception e){ diff --git a/src/dev/peerat/backend/routes/admins/DynamicLogs.java b/src/dev/peerat/backend/routes/admins/DynamicLogs.java index 3248de9..a76ff72 100644 --- a/src/dev/peerat/backend/routes/admins/DynamicLogs.java +++ b/src/dev/peerat/backend/routes/admins/DynamicLogs.java @@ -9,6 +9,7 @@ import dev.peerat.backend.repository.DatabaseRepository; import dev.peerat.framework.Context; import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Injection; import dev.peerat.framework.Locker; import dev.peerat.framework.Locker.Key; import dev.peerat.framework.Response; @@ -20,7 +21,7 @@ public class DynamicLogs implements Response{ private Locker locker; //Context private DatabaseRepository repo; - public DynamicLogs(Locker locker, DatabaseRepository repo){ + public DynamicLogs(@Injection("log") Locker locker, DatabaseRepository repo){ this.locker = locker; this.repo = repo; } diff --git a/src/dev/peerat/backend/routes/admins/ExceptionLogs.java b/src/dev/peerat/backend/routes/admins/ExceptionLogs.java index 900c796..a8fdeff 100644 --- a/src/dev/peerat/backend/routes/admins/ExceptionLogs.java +++ b/src/dev/peerat/backend/routes/admins/ExceptionLogs.java @@ -5,6 +5,7 @@ import java.util.regex.Matcher; import dev.peerat.framework.Context; import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Injection; import dev.peerat.framework.Locker; import dev.peerat.framework.Locker.Key; import dev.peerat.framework.Response; @@ -16,7 +17,7 @@ public class ExceptionLogs implements Response{ private Locker locker; - public ExceptionLogs(Locker locker){ + public ExceptionLogs(@Injection("exception") Locker locker){ this.locker = locker; } diff --git a/src/dev/peerat/backend/routes/admins/WebHookLeaderboard.java b/src/dev/peerat/backend/routes/admins/WebHookLeaderboard.java index aa7e7e1..9a3b560 100644 --- a/src/dev/peerat/backend/routes/admins/WebHookLeaderboard.java +++ b/src/dev/peerat/backend/routes/admins/WebHookLeaderboard.java @@ -6,6 +6,7 @@ import dev.peerat.backend.model.Completion; import dev.peerat.framework.Context; import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Injection; import dev.peerat.framework.Locker; import dev.peerat.framework.Response; import dev.peerat.framework.Route; @@ -14,7 +15,7 @@ public class WebHookLeaderboard implements Response{ private Locker locker; - public WebHookLeaderboard(Locker locker){ + public WebHookLeaderboard(@Injection("leaderboard") Locker locker){ this.locker = locker; } diff --git a/src/dev/peerat/backend/routes/groups/GroupCreate.java b/src/dev/peerat/backend/routes/groups/GroupCreate.java index c8ddbc4..711dfc6 100644 --- a/src/dev/peerat/backend/routes/groups/GroupCreate.java +++ b/src/dev/peerat/backend/routes/groups/GroupCreate.java @@ -14,6 +14,7 @@ import dev.peerat.backend.utils.FormResponse; import dev.peerat.framework.Context; import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Injection; import dev.peerat.framework.Locker; import dev.peerat.framework.Response; import dev.peerat.framework.Route; @@ -25,7 +26,7 @@ public class GroupCreate extends FormResponse { private DatabaseRepository repo; private int groupDelay; - public GroupCreate(DatabaseRepository repo, Locker locker, int groupDelay){ + public GroupCreate(DatabaseRepository repo, @Injection("groups") Locker locker, @Injection("groupDelay") int groupDelay){ this.repo = repo; this.locker = locker; this.groupDelay = groupDelay; diff --git a/src/dev/peerat/backend/routes/groups/GroupJoin.java b/src/dev/peerat/backend/routes/groups/GroupJoin.java index ba2736c..f90fda4 100644 --- a/src/dev/peerat/backend/routes/groups/GroupJoin.java +++ b/src/dev/peerat/backend/routes/groups/GroupJoin.java @@ -14,6 +14,7 @@ import dev.peerat.backend.repository.DatabaseRepository; import dev.peerat.framework.Context; import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Injection; import dev.peerat.framework.Locker; import dev.peerat.framework.Response; import dev.peerat.framework.Route; @@ -26,7 +27,7 @@ public class GroupJoin implements Response{ private final Locker leaderboard; - public GroupJoin(DatabaseRepository repo, int groupDelay, String waitTime, Locker locker){ + public GroupJoin(DatabaseRepository repo, @Injection("groupDelay") int groupDelay, @Injection("waitTime") String waitTime, @Injection("leaderboard") Locker locker){ this.repo = repo; this.groupDelay = groupDelay; this.waitTime = waitTime; diff --git a/src/dev/peerat/backend/routes/groups/GroupQuit.java b/src/dev/peerat/backend/routes/groups/GroupQuit.java index d710613..c319a13 100644 --- a/src/dev/peerat/backend/routes/groups/GroupQuit.java +++ b/src/dev/peerat/backend/routes/groups/GroupQuit.java @@ -14,6 +14,7 @@ import dev.peerat.backend.repository.DatabaseRepository; import dev.peerat.framework.Context; import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Injection; import dev.peerat.framework.Locker; import dev.peerat.framework.Response; import dev.peerat.framework.Route; @@ -25,7 +26,7 @@ public class GroupQuit implements Response{ private final Locker leaderboard; - public GroupQuit(DatabaseRepository repo, int groupDelay, Locker locker){ + public GroupQuit(DatabaseRepository repo, @Injection("groupDelay") int groupDelay, @Injection("leaderboard") Locker locker){ this.repo = repo; this.groupDelay = groupDelay; diff --git a/src/dev/peerat/backend/routes/users/MailConfirmation.java b/src/dev/peerat/backend/routes/users/MailConfirmation.java index f7185bd..27892b0 100644 --- a/src/dev/peerat/backend/routes/users/MailConfirmation.java +++ b/src/dev/peerat/backend/routes/users/MailConfirmation.java @@ -32,6 +32,7 @@ import dev.peerat.backend.utils.Mail; import dev.peerat.framework.Context; import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Injection; import dev.peerat.framework.Route; import dev.peerat.framework.Router; import dev.peerat.framework.utils.json.JsonMap; @@ -50,9 +51,9 @@ public class MailConfirmation extends FormResponse { public MailConfirmation( DatabaseRepository databaseRepo, Router router, - String initUsersFilesPath, - String gitToken, - Map playersWaiting, + @Injection("usersFiles") String initUsersFilesPath, + @Injection("gitToken") String gitToken, + @Injection("waitting") Map playersWaiting, Mail mail) throws NoSuchAlgorithmException{ this.databaseRepo = databaseRepo; diff --git a/src/dev/peerat/backend/routes/users/Register.java b/src/dev/peerat/backend/routes/users/Register.java index b4e40f7..96a4ccb 100644 --- a/src/dev/peerat/backend/routes/users/Register.java +++ b/src/dev/peerat/backend/routes/users/Register.java @@ -13,6 +13,7 @@ import dev.peerat.backend.utils.Mail; import dev.peerat.framework.Context; import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Injection; import dev.peerat.framework.Route; import dev.peerat.framework.utils.json.JsonMap; @@ -22,7 +23,7 @@ public class Register extends FormResponse { private Map playersWaiting; private Mail mail; - public Register(DatabaseRepository databaseRepo, Map playersWaiting, Mail mail){ + public Register(DatabaseRepository databaseRepo, @Injection("waitting") Map playersWaiting, Mail mail){ this.databaseRepo = databaseRepo; this.playersWaiting = playersWaiting; this.mail = mail;