Update Framework with dependencies injector

This commit is contained in:
jeffcheasey88 2024-06-30 18:37:13 +02:00
parent 6550cf03f1
commit ee9739f5d3
15 changed files with 89 additions and 52 deletions

Binary file not shown.

View file

@ -51,6 +51,7 @@ import dev.peerat.backend.routes.users.ProfileSettings;
import dev.peerat.backend.routes.users.Register; import dev.peerat.backend.routes.users.Register;
import dev.peerat.backend.utils.Mail; import dev.peerat.backend.utils.Mail;
import dev.peerat.framework.Context; import dev.peerat.framework.Context;
import dev.peerat.framework.DependencyInjector;
import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpReader;
import dev.peerat.framework.HttpWriter; import dev.peerat.framework.HttpWriter;
import dev.peerat.framework.Locker; import dev.peerat.framework.Locker;
@ -177,44 +178,18 @@ public class Main{
} }
private static void initRoutes(Router<PeerAtUser> router, DatabaseRepository repo, Configuration config) throws Exception{ private static void initRoutes(Router<PeerAtUser> router, DatabaseRepository repo, Configuration config) throws Exception{
Map<String, Integer> playersWaiting = new HashMap<>(); router.registerPackages(new DependencyInjector()
Mail mail = config.getMail(); .of(repo, router, config.getMail(), new RouteExtracter(router))
Locker<Group> groupLock = new Locker<>(); .of("waitting", new HashMap<>())
Locker<Completion> leaderboard = new Locker<>(); .of("leaderboard", new Locker<>())
.of("log", router.getLogger())
if(config.isProduction()) .of("exception", router.getExceptionLogger())
router. .of("groups", new Locker<>())
register(new Register(repo, playersWaiting, mail)). .of("groupDelay", config.getGroupJoinMinutes())
register(new MailConfirmation(repo, router, config.getUsersFiles(), config.getGitToken(), playersWaiting, mail)); .of("waitTime", config.getGroupQuitMinutes())
.of("usersFiles", config.getUsersFiles())
router. .of("gitToken", config.getGitToken())
register(new Login(repo, router)). .of("issuer", config.getTokenIssuer()));
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()));
// Bot bot = new Bot(config, repo, groupLock); // Bot bot = new Bot(config, repo, groupLock);
// bot.start(); // bot.start();

View file

@ -8,7 +8,9 @@ import java.sql.ResultSetMetaData;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Statement; import java.sql.Statement;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.SortedSet; import java.util.SortedSet;
import java.util.TreeSet; import java.util.TreeSet;
@ -32,6 +34,56 @@ public class DatabaseRepository {
public DatabaseRepository(Configuration config) { public DatabaseRepository(Configuration config) {
this.config = 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<Completionz> list = new ArrayList<>();
while(results.next()){
Completionz complete = new Completionz(results);
list.add(complete);
}
Map<Integer, Map<Integer, Completionz>> map = new HashMap<>();
for(Completionz comp : list){
Map<Integer,Completionz> 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 { private void ensureConnection() throws SQLException {
if (con == null || (!con.isValid(5))) { if (con == null || (!con.isValid(5))) {

View file

@ -8,6 +8,7 @@ import dev.peerat.backend.repository.DatabaseRepository;
import dev.peerat.framework.Context; import dev.peerat.framework.Context;
import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpReader;
import dev.peerat.framework.HttpWriter; import dev.peerat.framework.HttpWriter;
import dev.peerat.framework.Injection;
import dev.peerat.framework.Locker; import dev.peerat.framework.Locker;
import dev.peerat.framework.Locker.Key; import dev.peerat.framework.Locker.Key;
import dev.peerat.framework.Route; import dev.peerat.framework.Route;
@ -16,7 +17,7 @@ public class DynamicLeaderboard extends Leaderboard{
private Locker<Completion> locker; private Locker<Completion> locker;
public DynamicLeaderboard(DatabaseRepository databaseRepo, Locker<Completion> locker){ public DynamicLeaderboard(DatabaseRepository databaseRepo, @Injection("leaderboard") Locker<Completion> locker){
super(databaseRepo); super(databaseRepo);
this.locker = locker; this.locker = locker;
} }

View file

@ -1,6 +1,5 @@
package dev.peerat.backend.routes; package dev.peerat.backend.routes;
import java.util.Base64;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import dev.peerat.backend.bonus.extract.RouteDoc; import dev.peerat.backend.bonus.extract.RouteDoc;

View file

@ -22,6 +22,7 @@ import dev.peerat.backend.repository.DatabaseRepository;
import dev.peerat.framework.Context; import dev.peerat.framework.Context;
import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpReader;
import dev.peerat.framework.HttpWriter; import dev.peerat.framework.HttpWriter;
import dev.peerat.framework.Injection;
import dev.peerat.framework.Locker; import dev.peerat.framework.Locker;
import dev.peerat.framework.Response; import dev.peerat.framework.Response;
import dev.peerat.framework.Route; import dev.peerat.framework.Route;
@ -33,7 +34,7 @@ public class PuzzleResponse implements Response {
private final Locker<Completion> leaderboard; private final Locker<Completion> leaderboard;
public PuzzleResponse(DatabaseRepository databaseRepo, String initUsersFilesPath, Locker<Completion> locker){ public PuzzleResponse(DatabaseRepository databaseRepo, @Injection("usersFiles") String initUsersFilesPath, @Injection("leaderboard") Locker<Completion> locker){
this.databaseRepo = databaseRepo; this.databaseRepo = databaseRepo;
usersFilesPath = initUsersFilesPath; usersFilesPath = initUsersFilesPath;
this.leaderboard = locker; this.leaderboard = locker;

View file

@ -6,6 +6,7 @@ import dev.peerat.backend.bonus.extract.RouteExtracter;
import dev.peerat.framework.Context; import dev.peerat.framework.Context;
import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpReader;
import dev.peerat.framework.HttpWriter; import dev.peerat.framework.HttpWriter;
import dev.peerat.framework.Injection;
import dev.peerat.framework.Response; import dev.peerat.framework.Response;
import dev.peerat.framework.Route; import dev.peerat.framework.Route;
@ -13,7 +14,7 @@ public class Swagger implements Response{
private String json; private String json;
public Swagger(RouteExtracter extracter, String host){ public Swagger(RouteExtracter extracter, @Injection("issuer") String host){
try{ try{
this.json = extracter.swagger(host).toString(); this.json = extracter.swagger(host).toString();
}catch(Exception e){ }catch(Exception e){

View file

@ -9,6 +9,7 @@ import dev.peerat.backend.repository.DatabaseRepository;
import dev.peerat.framework.Context; import dev.peerat.framework.Context;
import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpReader;
import dev.peerat.framework.HttpWriter; import dev.peerat.framework.HttpWriter;
import dev.peerat.framework.Injection;
import dev.peerat.framework.Locker; import dev.peerat.framework.Locker;
import dev.peerat.framework.Locker.Key; import dev.peerat.framework.Locker.Key;
import dev.peerat.framework.Response; import dev.peerat.framework.Response;
@ -20,7 +21,7 @@ public class DynamicLogs implements Response{
private Locker<Context> locker; //Context private Locker<Context> locker; //Context
private DatabaseRepository repo; private DatabaseRepository repo;
public DynamicLogs(Locker<Context> locker, DatabaseRepository repo){ public DynamicLogs(@Injection("log") Locker<Context> locker, DatabaseRepository repo){
this.locker = locker; this.locker = locker;
this.repo = repo; this.repo = repo;
} }

View file

@ -5,6 +5,7 @@ import java.util.regex.Matcher;
import dev.peerat.framework.Context; import dev.peerat.framework.Context;
import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpReader;
import dev.peerat.framework.HttpWriter; import dev.peerat.framework.HttpWriter;
import dev.peerat.framework.Injection;
import dev.peerat.framework.Locker; import dev.peerat.framework.Locker;
import dev.peerat.framework.Locker.Key; import dev.peerat.framework.Locker.Key;
import dev.peerat.framework.Response; import dev.peerat.framework.Response;
@ -16,7 +17,7 @@ public class ExceptionLogs implements Response{
private Locker<Exception> locker; private Locker<Exception> locker;
public ExceptionLogs(Locker<Exception> locker){ public ExceptionLogs(@Injection("exception") Locker<Exception> locker){
this.locker = locker; this.locker = locker;
} }

View file

@ -6,6 +6,7 @@ import dev.peerat.backend.model.Completion;
import dev.peerat.framework.Context; import dev.peerat.framework.Context;
import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpReader;
import dev.peerat.framework.HttpWriter; import dev.peerat.framework.HttpWriter;
import dev.peerat.framework.Injection;
import dev.peerat.framework.Locker; import dev.peerat.framework.Locker;
import dev.peerat.framework.Response; import dev.peerat.framework.Response;
import dev.peerat.framework.Route; import dev.peerat.framework.Route;
@ -14,7 +15,7 @@ public class WebHookLeaderboard implements Response{
private Locker<Completion> locker; private Locker<Completion> locker;
public WebHookLeaderboard(Locker<Completion> locker){ public WebHookLeaderboard(@Injection("leaderboard") Locker<Completion> locker){
this.locker = locker; this.locker = locker;
} }

View file

@ -14,6 +14,7 @@ import dev.peerat.backend.utils.FormResponse;
import dev.peerat.framework.Context; import dev.peerat.framework.Context;
import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpReader;
import dev.peerat.framework.HttpWriter; import dev.peerat.framework.HttpWriter;
import dev.peerat.framework.Injection;
import dev.peerat.framework.Locker; import dev.peerat.framework.Locker;
import dev.peerat.framework.Response; import dev.peerat.framework.Response;
import dev.peerat.framework.Route; import dev.peerat.framework.Route;
@ -25,7 +26,7 @@ public class GroupCreate extends FormResponse {
private DatabaseRepository repo; private DatabaseRepository repo;
private int groupDelay; private int groupDelay;
public GroupCreate(DatabaseRepository repo, Locker<Group> locker, int groupDelay){ public GroupCreate(DatabaseRepository repo, @Injection("groups") Locker<Group> locker, @Injection("groupDelay") int groupDelay){
this.repo = repo; this.repo = repo;
this.locker = locker; this.locker = locker;
this.groupDelay = groupDelay; this.groupDelay = groupDelay;

View file

@ -14,6 +14,7 @@ import dev.peerat.backend.repository.DatabaseRepository;
import dev.peerat.framework.Context; import dev.peerat.framework.Context;
import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpReader;
import dev.peerat.framework.HttpWriter; import dev.peerat.framework.HttpWriter;
import dev.peerat.framework.Injection;
import dev.peerat.framework.Locker; import dev.peerat.framework.Locker;
import dev.peerat.framework.Response; import dev.peerat.framework.Response;
import dev.peerat.framework.Route; import dev.peerat.framework.Route;
@ -26,7 +27,7 @@ public class GroupJoin implements Response{
private final Locker<Completion> leaderboard; private final Locker<Completion> leaderboard;
public GroupJoin(DatabaseRepository repo, int groupDelay, String waitTime, Locker<Completion> locker){ public GroupJoin(DatabaseRepository repo, @Injection("groupDelay") int groupDelay, @Injection("waitTime") String waitTime, @Injection("leaderboard") Locker<Completion> locker){
this.repo = repo; this.repo = repo;
this.groupDelay = groupDelay; this.groupDelay = groupDelay;
this.waitTime = waitTime; this.waitTime = waitTime;

View file

@ -14,6 +14,7 @@ import dev.peerat.backend.repository.DatabaseRepository;
import dev.peerat.framework.Context; import dev.peerat.framework.Context;
import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpReader;
import dev.peerat.framework.HttpWriter; import dev.peerat.framework.HttpWriter;
import dev.peerat.framework.Injection;
import dev.peerat.framework.Locker; import dev.peerat.framework.Locker;
import dev.peerat.framework.Response; import dev.peerat.framework.Response;
import dev.peerat.framework.Route; import dev.peerat.framework.Route;
@ -25,7 +26,7 @@ public class GroupQuit implements Response{
private final Locker<Completion> leaderboard; private final Locker<Completion> leaderboard;
public GroupQuit(DatabaseRepository repo, int groupDelay, Locker<Completion> locker){ public GroupQuit(DatabaseRepository repo, @Injection("groupDelay") int groupDelay, @Injection("leaderboard") Locker<Completion> locker){
this.repo = repo; this.repo = repo;
this.groupDelay = groupDelay; this.groupDelay = groupDelay;

View file

@ -32,6 +32,7 @@ import dev.peerat.backend.utils.Mail;
import dev.peerat.framework.Context; import dev.peerat.framework.Context;
import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpReader;
import dev.peerat.framework.HttpWriter; import dev.peerat.framework.HttpWriter;
import dev.peerat.framework.Injection;
import dev.peerat.framework.Route; import dev.peerat.framework.Route;
import dev.peerat.framework.Router; import dev.peerat.framework.Router;
import dev.peerat.framework.utils.json.JsonMap; import dev.peerat.framework.utils.json.JsonMap;
@ -50,9 +51,9 @@ public class MailConfirmation extends FormResponse {
public MailConfirmation( public MailConfirmation(
DatabaseRepository databaseRepo, DatabaseRepository databaseRepo,
Router<PeerAtUser> router, Router<PeerAtUser> router,
String initUsersFilesPath, @Injection("usersFiles") String initUsersFilesPath,
String gitToken, @Injection("gitToken") String gitToken,
Map<String, Integer> playersWaiting, @Injection("waitting") Map<String, Integer> playersWaiting,
Mail mail) throws NoSuchAlgorithmException{ Mail mail) throws NoSuchAlgorithmException{
this.databaseRepo = databaseRepo; this.databaseRepo = databaseRepo;

View file

@ -13,6 +13,7 @@ import dev.peerat.backend.utils.Mail;
import dev.peerat.framework.Context; import dev.peerat.framework.Context;
import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpReader;
import dev.peerat.framework.HttpWriter; import dev.peerat.framework.HttpWriter;
import dev.peerat.framework.Injection;
import dev.peerat.framework.Route; import dev.peerat.framework.Route;
import dev.peerat.framework.utils.json.JsonMap; import dev.peerat.framework.utils.json.JsonMap;
@ -22,7 +23,7 @@ public class Register extends FormResponse {
private Map<String, Integer> playersWaiting; private Map<String, Integer> playersWaiting;
private Mail mail; private Mail mail;
public Register(DatabaseRepository databaseRepo, Map<String, Integer> playersWaiting, Mail mail){ public Register(DatabaseRepository databaseRepo, @Injection("waitting") Map<String, Integer> playersWaiting, Mail mail){
this.databaseRepo = databaseRepo; this.databaseRepo = databaseRepo;
this.playersWaiting = playersWaiting; this.playersWaiting = playersWaiting;
this.mail = mail; this.mail = mail;