GL Hot Fix
This commit is contained in:
parent
c4de049e58
commit
326016a93a
10 changed files with 87 additions and 45 deletions
|
@ -40,8 +40,8 @@ public class Bot extends Thread{
|
||||||
List<Group> groups = this.repo.getAllGroups();
|
List<Group> groups = this.repo.getAllGroups();
|
||||||
for(Group group : groups){
|
for(Group group : groups){
|
||||||
Integer chapter = group.getLinkToChapter();
|
Integer chapter = group.getLinkToChapter();
|
||||||
Integer puzzle = group.getLinkToPuzzle();
|
// Integer puzzle = group.getLinkToPuzzle();
|
||||||
if((chapter == null || chapter == 0) && (puzzle == null || puzzle == 0)) continue;
|
if((chapter == null || chapter == 0)) continue;
|
||||||
boolean contains = false;
|
boolean contains = false;
|
||||||
for(VoiceChannel channel : event.getVoiceChannels()){
|
for(VoiceChannel channel : event.getVoiceChannels()){
|
||||||
if(channel.getName().equalsIgnoreCase(group.getName())){
|
if(channel.getName().equalsIgnoreCase(group.getName())){
|
||||||
|
@ -57,8 +57,8 @@ public class Bot extends Thread{
|
||||||
locker.lock(key);
|
locker.lock(key);
|
||||||
Group group = locker.getValue(key);
|
Group group = locker.getValue(key);
|
||||||
Integer chapter = group.getLinkToChapter();
|
Integer chapter = group.getLinkToChapter();
|
||||||
Integer puzzle = group.getLinkToPuzzle();
|
// Integer puzzle = group.getLinkToPuzzle();
|
||||||
if((chapter == null || chapter == 0) && (puzzle == null || puzzle == 0)) continue;
|
if((chapter == null || chapter == 0)) continue;
|
||||||
boolean contains = false;
|
boolean contains = false;
|
||||||
for(VoiceChannel channel : event.getVoiceChannels()){
|
for(VoiceChannel channel : event.getVoiceChannels()){
|
||||||
if(channel.getName().equalsIgnoreCase(group.getName())){
|
if(channel.getName().equalsIgnoreCase(group.getName())){
|
||||||
|
|
|
@ -47,7 +47,7 @@ public class Completion {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addTry(Puzzle currentPuzzle, byte[] response) {
|
public void addTry(Puzzle currentPuzzle, byte[] response) {
|
||||||
if (score <= 0) {
|
if (score <= 0){
|
||||||
tries++;
|
tries++;
|
||||||
if (response != null && Arrays.equals(currentPuzzle.getSoluce(), response)) {
|
if (response != null && Arrays.equals(currentPuzzle.getSoluce(), response)) {
|
||||||
if (tries > 1) { // Loose 5% each try with a minimum of 1 for score
|
if (tries > 1) { // Loose 5% each try with a minimum of 1 for score
|
||||||
|
|
|
@ -10,21 +10,26 @@ import org.json.simple.JSONObject;
|
||||||
public class Group implements Comparable<Group> {
|
public class Group implements Comparable<Group> {
|
||||||
private String name;
|
private String name;
|
||||||
private Integer linkToChapter;
|
private Integer linkToChapter;
|
||||||
private Integer linkToPuzzle;
|
// private Integer linkToPuzzle;
|
||||||
private List<Player> players;
|
private List<Player> players;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(){
|
||||||
|
return "Group[name="+name+", chapter="+linkToChapter+"]";
|
||||||
|
}
|
||||||
|
|
||||||
public Group(JSONObject json) {
|
public Group(JSONObject json) {
|
||||||
this.name = (String) json.get("name");
|
this.name = (String) json.get("name");
|
||||||
if (json.containsKey("chapter"))
|
if (json.containsKey("chapter"))
|
||||||
this.linkToChapter = ((Number) json.get("chapter")).intValue();
|
this.linkToChapter = ((Number) json.get("chapter")).intValue();
|
||||||
if (json.containsKey("puzzle"))
|
// if (json.containsKey("puzzle"))
|
||||||
this.linkToPuzzle = ((Number) json.get("puzzle")).intValue();
|
// this.linkToPuzzle = ((Number) json.get("puzzle")).intValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Group(String name, Integer initChap, Integer initPuzz) {
|
public Group(String name, Integer initChap, Integer initPuzz) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.linkToChapter = initChap;
|
this.linkToChapter = initChap;
|
||||||
this.linkToPuzzle = initPuzz;
|
// this.linkToPuzzle = initPuzz;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addPlayer(Player newPlayer) {
|
public void addPlayer(Player newPlayer) {
|
||||||
|
@ -71,9 +76,9 @@ public class Group implements Comparable<Group> {
|
||||||
return linkToChapter;
|
return linkToChapter;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getLinkToPuzzle() {
|
// public Integer getLinkToPuzzle() {
|
||||||
return linkToPuzzle;
|
// return linkToPuzzle;
|
||||||
}
|
// }
|
||||||
|
|
||||||
public JSONObject toJson() {
|
public JSONObject toJson() {
|
||||||
return this.toJson(null);
|
return this.toJson(null);
|
||||||
|
@ -86,8 +91,8 @@ public class Group implements Comparable<Group> {
|
||||||
groupJSON.put("rank", rank);
|
groupJSON.put("rank", rank);
|
||||||
else if (linkToChapter != null)
|
else if (linkToChapter != null)
|
||||||
groupJSON.put("chapter", linkToChapter);
|
groupJSON.put("chapter", linkToChapter);
|
||||||
else if (linkToPuzzle != null)
|
// else if (linkToPuzzle != null)
|
||||||
groupJSON.put("puzzle", linkToPuzzle);
|
// groupJSON.put("puzzle", linkToPuzzle);
|
||||||
if (players != null) {
|
if (players != null) {
|
||||||
JSONArray groupsPlayerJSON = new JSONArray();
|
JSONArray groupsPlayerJSON = new JSONArray();
|
||||||
for (Player p : players) {
|
for (Player p : players) {
|
||||||
|
@ -124,12 +129,12 @@ public class Group implements Comparable<Group> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object obj) {
|
public boolean equals(Object obj){
|
||||||
if(obj == this) return true;
|
if(obj == this) return true;
|
||||||
if(obj == null) return false;
|
if(obj == null) return false;
|
||||||
if(!(obj instanceof Group)) return false;
|
if(!(obj instanceof Group)) return false;
|
||||||
Group other = (Group) obj;
|
Group other = (Group) obj;
|
||||||
return this.name.equals(other.name) && integerEquals(this.linkToChapter, other.linkToChapter) && integerEquals(this.linkToPuzzle, other.linkToPuzzle);
|
return this.name.equals(other.name) && integerEquals(this.linkToChapter, other.linkToChapter); // && integerEquals(this.linkToPuzzle, other.linkToPuzzle);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean integerEquals(Integer a, Integer b){
|
private boolean integerEquals(Integer a, Integer b){
|
||||||
|
|
|
@ -21,15 +21,15 @@ public enum DatabaseQuery {
|
||||||
|
|
||||||
// GROUPS
|
// GROUPS
|
||||||
ALL_GROUPS("SELECT * FROM groups"),
|
ALL_GROUPS("SELECT * FROM groups"),
|
||||||
GET_GROUP_FOR_PLAYER("SELECT g.* FROM groups g JOIN containsGroups cg ON cg.fk_group = g.id_group WHERE cg.fk_player = ? AND g.fk_chapter = ? AND g.fk_puzzle = ?"),
|
GET_GROUP_FOR_PLAYER("SELECT g.* FROM groups g JOIN containsGroups cg ON cg.fk_group = g.id_group WHERE cg.fk_player = ? AND g.fk_chapter = ?"), // AND g.fk_puzzle = ?
|
||||||
GET_GROUP_ID_BY_DATA("SELECT id_group FROM groups WHERE name = ? AND (fk_chapter = ? OR fk_puzzle = ?)"),
|
GET_GROUP_ID_BY_DATA("SELECT id_group FROM groups WHERE name = ? AND (fk_chapter = ?)"), // OR fk_puzzle = ?
|
||||||
INSERT_GROUP("INSERT INTO groups (name, fk_chapter, fk_puzzle) VALUES (?,?,?)"),
|
INSERT_GROUP("INSERT INTO groups (name, fk_chapter) VALUES (?,?)"),
|
||||||
INSERT_PLAYER_IN_GROUP("INSERT INTO containsGroups (fk_player, fk_group) VALUES (?,?)"),
|
INSERT_PLAYER_IN_GROUP("INSERT INTO containsGroups (fk_player, fk_group) VALUES (?,?)"),
|
||||||
LEAVE_GROUP("DELETE FROM containsGroups WHERE fk_player = ? AND fk_group = ?"),
|
LEAVE_GROUP("DELETE FROM containsGroups WHERE fk_player = ? AND fk_group = ?"),
|
||||||
|
|
||||||
// LEADERBOARD
|
// LEADERBOARD
|
||||||
ALL_PLAYERS_FOR_LEADERBOARD(
|
ALL_PLAYERS_FOR_LEADERBOARD(
|
||||||
"select p.*, scores.*, g.* from players p ,(SELECT fk_player, SUM(c.score) AS score, COUNT(c.id_completion) AS completions, SUM(c.tries) AS tries, rank() over(ORDER BY score DESC) AS rank FROM completions c GROUP BY c.fk_player) AS scores LEFT JOIN containsGroups cg ON scores.fk_player = cg.fk_player LEFT JOIN groups g ON cg.fk_group = g.id_group WHERE p.id_player = scores.fk_player ORDER BY g.fk_chapter, g.fk_puzzle"),
|
"select p.*, scores.*, g.* from players p ,(SELECT fk_player, SUM(c.score) AS score, COUNT(c.id_completion) AS completions, SUM(c.tries) AS tries, rank() over(ORDER BY score DESC) AS rank FROM completions c GROUP BY c.fk_player) AS scores LEFT JOIN containsGroups cg ON scores.fk_player = cg.fk_player LEFT JOIN groups g ON cg.fk_group = g.id_group WHERE p.id_player = scores.fk_player ORDER BY g.fk_chapter"),
|
||||||
ALL_GROUP_FOR_CHAPTER_LEADERBOARD(
|
ALL_GROUP_FOR_CHAPTER_LEADERBOARD(
|
||||||
"SELECT g.*, pl.pseudo, co.score, co.tries FROM groups g LEFT JOIN containsGroups cg ON g.id_group = cg.fk_group LEFT JOIN players pl ON cg.fk_player = pl.id_player LEFT JOIN completions co ON pl.id_player = co.fk_player WHERE fk_chapter = ? AND (co.fk_puzzle IN (SELECT id_puzzle FROM puzzles puz WHERE puz.fk_chapter = g.fk_chapter) OR co.score IS NULL);"),
|
"SELECT g.*, pl.pseudo, co.score, co.tries FROM groups g LEFT JOIN containsGroups cg ON g.id_group = cg.fk_group LEFT JOIN players pl ON cg.fk_player = pl.id_player LEFT JOIN completions co ON pl.id_player = co.fk_player WHERE fk_chapter = ? AND (co.fk_puzzle IN (SELECT id_puzzle FROM puzzles puz WHERE puz.fk_chapter = g.fk_chapter) OR co.score IS NULL);"),
|
||||||
|
|
||||||
|
@ -46,8 +46,8 @@ public enum DatabaseQuery {
|
||||||
|
|
||||||
// COMPLETIONS
|
// COMPLETIONS
|
||||||
GET_COMPLETION(
|
GET_COMPLETION(
|
||||||
"SELECT id_completion, tries, fileName, score FROM completions WHERE fk_puzzle = ? AND fk_player = ?"),
|
"SELECT * FROM completions WHERE fk_puzzle = ? AND fk_player = ?"),
|
||||||
GET_COMPLETION_GROUP("SELECT c.tries, c.score\r\n"
|
GET_COMPLETION_GROUP("SELECT c.*\r\n"
|
||||||
+ "FROM completions c\r\n"
|
+ "FROM completions c\r\n"
|
||||||
+ "JOIN containsGroups cG on c.fk_player = cG.fk_player\r\n"
|
+ "JOIN containsGroups cG on c.fk_player = cG.fk_player\r\n"
|
||||||
+ "JOIN containsGroups cGs on cGs.fk_group = cG.fk_group\r\n"
|
+ "JOIN containsGroups cGs on cGs.fk_group = cG.fk_group\r\n"
|
||||||
|
|
|
@ -115,12 +115,12 @@ public class DatabaseRepository {
|
||||||
chapterResult.getTimestamp("start_date"), chapterResult.getTimestamp("end_date"));
|
chapterResult.getTimestamp("start_date"), chapterResult.getTimestamp("end_date"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Completion makeCompletion(int playerId, int puzzleId, ResultSet completionResult) throws SQLException {
|
private Completion makeCompletion(ResultSet completionResult) throws SQLException {
|
||||||
String name = null;
|
String name = null;
|
||||||
if (hasColumn(completionResult, "fileName"))
|
if (hasColumn(completionResult, "fileName"))
|
||||||
name = completionResult.getString("fileName");
|
name = completionResult.getString("fileName");
|
||||||
|
|
||||||
return new Completion(playerId, puzzleId, completionResult.getInt("tries"),
|
return new Completion(completionResult.getInt("fk_player"), completionResult.getInt("fk_puzzle"), completionResult.getInt("tries"),
|
||||||
name, completionResult.getInt("score"));
|
name, completionResult.getInt("score"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ public class DatabaseRepository {
|
||||||
stmt.setInt(2, puzzle);
|
stmt.setInt(2, puzzle);
|
||||||
ResultSet result = stmt.executeQuery();
|
ResultSet result = stmt.executeQuery();
|
||||||
if (result.next())
|
if (result.next())
|
||||||
return makeCompletion(user, puzzle, result);
|
return makeCompletion(result);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
@ -246,7 +246,7 @@ public class DatabaseRepository {
|
||||||
completionsStmt.setInt(2, playerId);
|
completionsStmt.setInt(2, playerId);
|
||||||
ResultSet result = completionsStmt.executeQuery();
|
ResultSet result = completionsStmt.executeQuery();
|
||||||
if (result.next()) {
|
if (result.next()) {
|
||||||
return makeCompletion(playerId, puzzleId, result);
|
return makeCompletion(result);
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -570,8 +570,8 @@ public class DatabaseRepository {
|
||||||
byte[] response, Puzzle currentPuzzle) {
|
byte[] response, Puzzle currentPuzzle) {
|
||||||
try {
|
try {
|
||||||
ensureConnection();
|
ensureConnection();
|
||||||
Completion completion = getCompletion(userId, puzzleId);
|
Completion completion = getCompletionGroup(userId, puzzleId);
|
||||||
if (completion == null) {
|
if (completion == null){
|
||||||
completion = new Completion(userId, puzzleId, fileName, code, response, currentPuzzle);
|
completion = new Completion(userId, puzzleId, fileName, code, response, currentPuzzle);
|
||||||
insertCompletion(completion);
|
insertCompletion(completion);
|
||||||
} else {
|
} else {
|
||||||
|
@ -603,18 +603,18 @@ public class DatabaseRepository {
|
||||||
PreparedStatement statement = DatabaseQuery.INSERT_GROUP.prepare(this.con);
|
PreparedStatement statement = DatabaseQuery.INSERT_GROUP.prepare(this.con);
|
||||||
statement.setString(1, group.getName());
|
statement.setString(1, group.getName());
|
||||||
statement.setObject(2, group.getLinkToChapter());
|
statement.setObject(2, group.getLinkToChapter());
|
||||||
statement.setObject(3, group.getLinkToPuzzle());
|
// statement.setObject(3, group.getLinkToPuzzle());
|
||||||
if (statement.executeUpdate() >= 0)
|
if (statement.executeUpdate() >= 0)
|
||||||
return insertUserInGroup(group, creator);
|
return insertUserInGroup(group, creator);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Group getPlayerGroup(int user, Integer chapter, Integer puzzle) throws SQLException {
|
public Group getPlayerGroup(int user, Integer chapter) throws SQLException {
|
||||||
ensureConnection();
|
ensureConnection();
|
||||||
PreparedStatement stmt = DatabaseQuery.GET_GROUP_FOR_PLAYER.prepare(this.con);
|
PreparedStatement stmt = DatabaseQuery.GET_GROUP_FOR_PLAYER.prepare(this.con);
|
||||||
stmt.setInt(1, user);
|
stmt.setInt(1, user);
|
||||||
stmt.setObject(2, chapter);
|
stmt.setObject(2, chapter);
|
||||||
stmt.setObject(3, puzzle);
|
// stmt.setObject(3, puzzle);
|
||||||
|
|
||||||
ResultSet result = stmt.executeQuery();
|
ResultSet result = stmt.executeQuery();
|
||||||
if (result.next())
|
if (result.next())
|
||||||
|
@ -627,17 +627,17 @@ public class DatabaseRepository {
|
||||||
PreparedStatement stmt = DatabaseQuery.GET_GROUP_ID_BY_DATA.prepare(this.con);
|
PreparedStatement stmt = DatabaseQuery.GET_GROUP_ID_BY_DATA.prepare(this.con);
|
||||||
stmt.setString(1, group.getName());
|
stmt.setString(1, group.getName());
|
||||||
stmt.setObject(2, group.getLinkToChapter());
|
stmt.setObject(2, group.getLinkToChapter());
|
||||||
stmt.setObject(3, group.getLinkToPuzzle());
|
// stmt.setObject(3, group.getLinkToPuzzle());
|
||||||
|
|
||||||
ResultSet result = stmt.executeQuery();
|
ResultSet result = stmt.executeQuery();
|
||||||
if (result.next())
|
if (result.next())
|
||||||
return result.getInt("id_group");
|
return result.getInt("id_group");
|
||||||
throw null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean insertUserInGroup(Group group, User user) throws SQLException {
|
public boolean insertUserInGroup(Group group, User user) throws SQLException {
|
||||||
Integer id = getGroupId(group);
|
Integer id = getGroupId(group);
|
||||||
Group alreadyInGroup = getPlayerGroup(user.getId(), group.getLinkToChapter(), group.getLinkToPuzzle());
|
Group alreadyInGroup = getPlayerGroup(user.getId(), group.getLinkToChapter());
|
||||||
if (id != null && alreadyInGroup == null) {
|
if (id != null && alreadyInGroup == null) {
|
||||||
PreparedStatement stmt = DatabaseQuery.INSERT_PLAYER_IN_GROUP.prepare(this.con);
|
PreparedStatement stmt = DatabaseQuery.INSERT_PLAYER_IN_GROUP.prepare(this.con);
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package be.jeffcheasey88.peeratcode.routes;
|
package be.jeffcheasey88.peeratcode.routes;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
|
|
||||||
import org.json.simple.JSONObject;
|
import org.json.simple.JSONObject;
|
||||||
|
@ -11,6 +12,7 @@ import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Response;
|
import be.jeffcheasey88.peeratcode.framework.Response;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Route;
|
import be.jeffcheasey88.peeratcode.framework.Route;
|
||||||
import be.jeffcheasey88.peeratcode.framework.User;
|
import be.jeffcheasey88.peeratcode.framework.User;
|
||||||
|
import be.jeffcheasey88.peeratcode.model.Chapter;
|
||||||
import be.jeffcheasey88.peeratcode.model.Completion;
|
import be.jeffcheasey88.peeratcode.model.Completion;
|
||||||
import be.jeffcheasey88.peeratcode.model.Puzzle;
|
import be.jeffcheasey88.peeratcode.model.Puzzle;
|
||||||
import be.jeffcheasey88.peeratcode.repository.DatabaseRepository;
|
import be.jeffcheasey88.peeratcode.repository.DatabaseRepository;
|
||||||
|
@ -25,11 +27,26 @@ public class PuzzleElement implements Response {
|
||||||
|
|
||||||
@RouteDoc(path = "/puzzle/<id>", responseCode = 200, responseDescription = "JSON contenant les informations du puzzle")
|
@RouteDoc(path = "/puzzle/<id>", responseCode = 200, responseDescription = "JSON contenant les informations du puzzle")
|
||||||
@RouteDoc(responseCode = 400, responseDescription = "puzzle introuvable dans la base de donnée")
|
@RouteDoc(responseCode = 400, responseDescription = "puzzle introuvable dans la base de donnée")
|
||||||
|
@RouteDoc(responseCode = 423, responseDescription = "L'utilisateur essaye de voir le puzzle en dehors de l'event")
|
||||||
|
|
||||||
@Route(path = "^\\/puzzle\\/([0-9]+)$", needLogin = true)
|
@Route(path = "^\\/puzzle\\/([0-9]+)$", needLogin = true)
|
||||||
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception {
|
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception {
|
||||||
Puzzle puzzle = databaseRepo.getPuzzle(extractId(matcher));
|
Puzzle puzzle = databaseRepo.getPuzzle(extractId(matcher));
|
||||||
if (puzzle != null) {
|
if (puzzle != null){
|
||||||
|
Chapter chapter = this.databaseRepo.getChapter(puzzle);
|
||||||
|
if(chapter.getStartDate() != null){
|
||||||
|
if(LocalDateTime.now().isBefore(chapter.getStartDate().toLocalDateTime())){
|
||||||
|
HttpUtil.responseHeaders(writer, 423, "Access-Control-Allow-Origin: *");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// if(chapter.getEndDate() != null){
|
||||||
|
// if(LocalDateTime.now().isAfter(chapter.getEndDate().toLocalDateTime())){
|
||||||
|
// HttpUtil.responseHeaders(writer, 423, "Access-Control-Allow-Origin: *");
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
JSONObject puzzleJSON = new JSONObject();
|
JSONObject puzzleJSON = new JSONObject();
|
||||||
puzzleJSON.put("id", puzzle.getId());
|
puzzleJSON.put("id", puzzle.getId());
|
||||||
puzzleJSON.put("name", puzzle.getName());
|
puzzleJSON.put("name", puzzle.getName());
|
||||||
|
|
|
@ -7,6 +7,7 @@ import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
|
|
||||||
|
@ -43,7 +44,7 @@ public class PuzzleResponse implements Response {
|
||||||
@RouteDoc(responseCode = 400, responseDescription = "Pas de réponse")
|
@RouteDoc(responseCode = 400, responseDescription = "Pas de réponse")
|
||||||
@RouteDoc(responseCode = 403, responseDescription = "Déjà répondu")
|
@RouteDoc(responseCode = 403, responseDescription = "Déjà répondu")
|
||||||
@RouteDoc(responseCode = 406, responseDescription = "Mauvaise réponse")
|
@RouteDoc(responseCode = 406, responseDescription = "Mauvaise réponse")
|
||||||
@RouteDoc(responseCode = 423, responseDescription = "L'utilisateur essaye de répondre après la fin de l'event")
|
@RouteDoc(responseCode = 423, responseDescription = "L'utilisateur essaye de répondre en dehors de l'event")
|
||||||
|
|
||||||
@Route(path = "^\\/puzzleResponse\\/([0-9]+)$", type = POST, needLogin = true)
|
@Route(path = "^\\/puzzleResponse\\/([0-9]+)$", type = POST, needLogin = true)
|
||||||
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{
|
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{
|
||||||
|
@ -61,12 +62,31 @@ public class PuzzleResponse implements Response {
|
||||||
|
|
||||||
Puzzle currentPuzzle = databaseRepo.getPuzzle(received.getPuzzleId());
|
Puzzle currentPuzzle = databaseRepo.getPuzzle(received.getPuzzleId());
|
||||||
Chapter chapter = this.databaseRepo.getChapter(currentPuzzle);
|
Chapter chapter = this.databaseRepo.getChapter(currentPuzzle);
|
||||||
if(chapter.getEndDate() != null){
|
if(chapter.getStartDate() != null){
|
||||||
if(LocalDateTime.now().isAfter(chapter.getEndDate().toLocalDateTime())){
|
if(LocalDateTime.now().isBefore(chapter.getStartDate().toLocalDateTime())){
|
||||||
HttpUtil.responseHeaders(writer, 423, "Access-Control-Allow-Origin: *");
|
HttpUtil.responseHeaders(writer, 423, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(chapter.getEndDate() != null){
|
||||||
|
if(LocalDateTime.now().isAfter(chapter.getEndDate().toLocalDateTime())){
|
||||||
|
if(Arrays.equals(currentPuzzle.getSoluce(), received.getResponse())){
|
||||||
|
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *", "Content-Type: application/json");
|
||||||
|
JSONObject theoSaisPasJusteRecevoir200 = new JSONObject();
|
||||||
|
theoSaisPasJusteRecevoir200.put("success", true);
|
||||||
|
writer.write(theoSaisPasJusteRecevoir200.toJSONString());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
HttpUtil.responseHeaders(writer, 423, "Access-Control-Allow-Origin: *");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Group group = this.databaseRepo.getPlayerGroup(user.getId(), chapter.getId());
|
||||||
|
if(group == null){
|
||||||
|
HttpUtil.responseHeaders(writer, 423, "Access-Control-Allow-Origin: *");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Completion completion = databaseRepo.insertOrUpdatePuzzleResponse(received.getPuzzleId(), user.getId(),
|
Completion completion = databaseRepo.insertOrUpdatePuzzleResponse(received.getPuzzleId(), user.getId(),
|
||||||
received.getFileName(), received.getSourceCode(), received.getResponse(), currentPuzzle);
|
received.getFileName(), received.getSourceCode(), received.getResponse(), currentPuzzle);
|
||||||
|
|
|
@ -39,7 +39,7 @@ public class GroupCreate implements Response {
|
||||||
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{
|
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{
|
||||||
Group newGroup = new Group((JSONObject) HttpUtil.readJson(reader));
|
Group newGroup = new Group((JSONObject) HttpUtil.readJson(reader));
|
||||||
|
|
||||||
if (this.repo.getPlayerGroup(user.getId(), newGroup.getLinkToChapter(), newGroup.getLinkToPuzzle()) == null) {
|
if (this.repo.getPlayerGroup(user.getId(), newGroup.getLinkToChapter()) == null) {
|
||||||
try {
|
try {
|
||||||
if(this.repo.getGroupId(newGroup) == null) throw new NullPointerException();
|
if(this.repo.getGroupId(newGroup) == null) throw new NullPointerException();
|
||||||
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
|
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
|
||||||
|
@ -49,7 +49,7 @@ public class GroupCreate implements Response {
|
||||||
Chapter chapter = this.repo.getChapter(newGroup.getLinkToChapter());
|
Chapter chapter = this.repo.getChapter(newGroup.getLinkToChapter());
|
||||||
if(chapter.getStartDate() != null){
|
if(chapter.getStartDate() != null){
|
||||||
LocalDateTime start = chapter.getStartDate().toLocalDateTime().plusMinutes(this.groupDelay);
|
LocalDateTime start = chapter.getStartDate().toLocalDateTime().plusMinutes(this.groupDelay);
|
||||||
if(start.isAfter(LocalDateTime.now())){
|
if(LocalDateTime.now().isAfter(start)){
|
||||||
HttpUtil.responseHeaders(writer, 423, "Access-Control-Allow-Origin: *");
|
HttpUtil.responseHeaders(writer, 423, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,13 +39,13 @@ public class GroupJoin implements Response{
|
||||||
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{
|
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{
|
||||||
Group group = new Group((JSONObject) HttpUtil.readJson(reader));
|
Group group = new Group((JSONObject) HttpUtil.readJson(reader));
|
||||||
|
|
||||||
Group userGroup = this.repo.getPlayerGroup(user.getId(), group.getLinkToChapter(), group.getLinkToPuzzle());
|
Group userGroup = this.repo.getPlayerGroup(user.getId(), group.getLinkToChapter());
|
||||||
if(group.equals(userGroup)){
|
if(group.equals(userGroup)){
|
||||||
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
|
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(group.getLinkToChapter() == null && group.getLinkToPuzzle() == null){
|
if(group.getLinkToChapter() == null){
|
||||||
HttpUtil.responseHeaders(writer, 409, "Access-Control-Allow-Origin: *");
|
HttpUtil.responseHeaders(writer, 409, "Access-Control-Allow-Origin: *");
|
||||||
writer.write(waitTime);
|
writer.write(waitTime);
|
||||||
return;
|
return;
|
||||||
|
@ -55,7 +55,7 @@ public class GroupJoin implements Response{
|
||||||
Chapter chapter = this.repo.getChapter(group.getLinkToChapter());
|
Chapter chapter = this.repo.getChapter(group.getLinkToChapter());
|
||||||
if(chapter.getStartDate() != null){
|
if(chapter.getStartDate() != null){
|
||||||
LocalDateTime start = chapter.getStartDate().toLocalDateTime().plusMinutes(this.groupDelay);
|
LocalDateTime start = chapter.getStartDate().toLocalDateTime().plusMinutes(this.groupDelay);
|
||||||
if(start.isAfter(LocalDateTime.now())){
|
if(LocalDateTime.now().isAfter(start)){
|
||||||
HttpUtil.responseHeaders(writer, 423, "Access-Control-Allow-Origin: *");
|
HttpUtil.responseHeaders(writer, 423, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ public class GroupQuit implements Response{
|
||||||
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{
|
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{
|
||||||
Group group = new Group((JSONObject) HttpUtil.readJson(reader));
|
Group group = new Group((JSONObject) HttpUtil.readJson(reader));
|
||||||
|
|
||||||
Group userGroup = this.repo.getPlayerGroup(user.getId(), group.getLinkToChapter(), group.getLinkToPuzzle());
|
Group userGroup = this.repo.getPlayerGroup(user.getId(), group.getLinkToChapter());
|
||||||
if(!group.equals(userGroup)){
|
if(!group.equals(userGroup)){
|
||||||
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
|
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
|
@ -46,7 +46,7 @@ public class GroupQuit implements Response{
|
||||||
Chapter chapter = this.repo.getChapter(group.getLinkToChapter());
|
Chapter chapter = this.repo.getChapter(group.getLinkToChapter());
|
||||||
if(chapter.getStartDate() != null){
|
if(chapter.getStartDate() != null){
|
||||||
LocalDateTime start = chapter.getStartDate().toLocalDateTime().plusMinutes(this.groupDelay);
|
LocalDateTime start = chapter.getStartDate().toLocalDateTime().plusMinutes(this.groupDelay);
|
||||||
if(start.isAfter(LocalDateTime.now())){
|
if(LocalDateTime.now().isAfter(start)){
|
||||||
HttpUtil.responseHeaders(writer, 423, "Access-Control-Allow-Origin: *");
|
HttpUtil.responseHeaders(writer, 423, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue