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.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<PeerAtUser> router, DatabaseRepository repo, Configuration config) throws Exception{
Map<String, Integer> playersWaiting = new HashMap<>();
Mail mail = config.getMail();
Locker<Group> groupLock = new Locker<>();
Locker<Completion> 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();

View file

@ -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;
@ -33,6 +35,56 @@ public class DatabaseRepository {
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 {
if (con == null || (!con.isValid(5))) {
this.con = DriverManager.getConnection(

View file

@ -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<Completion> locker;
public DynamicLeaderboard(DatabaseRepository databaseRepo, Locker<Completion> locker){
public DynamicLeaderboard(DatabaseRepository databaseRepo, @Injection("leaderboard") Locker<Completion> locker){
super(databaseRepo);
this.locker = locker;
}

View file

@ -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;

View file

@ -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<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;
usersFilesPath = initUsersFilesPath;
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.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){

View file

@ -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<Context> locker; //Context
private DatabaseRepository repo;
public DynamicLogs(Locker<Context> locker, DatabaseRepository repo){
public DynamicLogs(@Injection("log") Locker<Context> locker, DatabaseRepository repo){
this.locker = locker;
this.repo = repo;
}

View file

@ -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<Exception> locker;
public ExceptionLogs(Locker<Exception> locker){
public ExceptionLogs(@Injection("exception") Locker<Exception> 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.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<Completion> locker;
public WebHookLeaderboard(Locker<Completion> locker){
public WebHookLeaderboard(@Injection("leaderboard") Locker<Completion> 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.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<Group> locker, int groupDelay){
public GroupCreate(DatabaseRepository repo, @Injection("groups") Locker<Group> locker, @Injection("groupDelay") int groupDelay){
this.repo = repo;
this.locker = locker;
this.groupDelay = groupDelay;

View file

@ -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<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.groupDelay = groupDelay;
this.waitTime = waitTime;

View file

@ -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<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.groupDelay = groupDelay;

View file

@ -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<PeerAtUser> router,
String initUsersFilesPath,
String gitToken,
Map<String, Integer> playersWaiting,
@Injection("usersFiles") String initUsersFilesPath,
@Injection("gitToken") String gitToken,
@Injection("waitting") Map<String, Integer> playersWaiting,
Mail mail) throws NoSuchAlgorithmException{
this.databaseRepo = databaseRepo;

View file

@ -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<String, Integer> playersWaiting;
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.playersWaiting = playersWaiting;
this.mail = mail;