diff --git a/src/be/jeffcheasey88/peeratcode/repository/DatabaseQuery.java b/src/be/jeffcheasey88/peeratcode/repository/DatabaseQuery.java index 08ec3b5..6f31d52 100644 --- a/src/be/jeffcheasey88/peeratcode/repository/DatabaseQuery.java +++ b/src/be/jeffcheasey88/peeratcode/repository/DatabaseQuery.java @@ -43,6 +43,8 @@ public enum DatabaseQuery { // COMPLETIONS GET_COMPLETION( "SELECT id_completion, tries, fileName, score FROM completions WHERE fk_puzzle = ? AND fk_player = ?"), + GET_COMPLETION_GROUP( + "SELECT c.* FROM containsGroups cg LEFT JOIN groups g ON cg.fk_group = g.id_group LEFT JOIN completions c ON cg.fk_player = c.fk_player WHERE cg.fk_player = ? AND g.fk_puzzle = ? AND c.fk_puzzle = g.fk_puzzle"), INSERT_COMPLETION( "INSERT INTO completions (fk_puzzle, fk_player, tries, code, fileName, score) values (?, ?, ?, ?, ?, ?)"), UPDATE_COMPLETION( @@ -175,28 +177,30 @@ AFTER INSERT BEGIN DECLARE badge INT; DECLARE contain INT; - + SELECT id_badge INTO @badge FROM badges WHERE name = 'FirstTry'; - + IF @badge is not null THEN - + SELECT count(*) INTO @contain FROM containsBadges WHERE fk_badge = @badge AND fk_player = NEW.fk_player; - + IF (@contain = 0) THEN - INSERT INTO containsBadges(fk_player, fk_badge) VALUES (NEW.fk_player, @badge); + + IF (NEW.score >= 0 AND NEW.tries < 2) THEN + INSERT INTO containsBadges(fk_player, fk_badge) VALUES (NEW.fk_player, @badge); + END IF; END IF; END IF; END; - CREATE OR REPLACE TRIGGER EventParticipation AFTER INSERT ON completions FOR EACH ROW diff --git a/src/be/jeffcheasey88/peeratcode/repository/DatabaseRepository.java b/src/be/jeffcheasey88/peeratcode/repository/DatabaseRepository.java index 800da2b..4b8c2f3 100644 --- a/src/be/jeffcheasey88/peeratcode/repository/DatabaseRepository.java +++ b/src/be/jeffcheasey88/peeratcode/repository/DatabaseRepository.java @@ -218,7 +218,20 @@ public class DatabaseRepository { } return -1; } - + + public Completion getCompletionGroup(int user, int puzzle){ + try { + PreparedStatement stmt = DatabaseQuery.GET_COMPLETION_GROUP.prepare(this.con); + stmt.setInt(1, user); + stmt.setInt(2, puzzle); + ResultSet result = stmt.executeQuery(); + if (result.next()) return makeCompletion(user, puzzle, result); + } catch (SQLException e){ + e.printStackTrace(); + } + return getCompletion(user, puzzle); + } + public Completion getCompletion(int playerId, int puzzleId) { try { PreparedStatement completionsStmt = DatabaseQuery.GET_COMPLETION.prepare(this.con); diff --git a/src/be/jeffcheasey88/peeratcode/routes/PuzzleElement.java b/src/be/jeffcheasey88/peeratcode/routes/PuzzleElement.java index f7810dc..dd2d7b0 100644 --- a/src/be/jeffcheasey88/peeratcode/routes/PuzzleElement.java +++ b/src/be/jeffcheasey88/peeratcode/routes/PuzzleElement.java @@ -10,6 +10,7 @@ import be.jeffcheasey88.peeratcode.framework.HttpWriter; import be.jeffcheasey88.peeratcode.framework.Response; import be.jeffcheasey88.peeratcode.framework.Route; import be.jeffcheasey88.peeratcode.framework.User; +import be.jeffcheasey88.peeratcode.model.Completion; import be.jeffcheasey88.peeratcode.model.Puzzle; import be.jeffcheasey88.peeratcode.repository.DatabaseRepository; @@ -31,8 +32,11 @@ public class PuzzleElement implements Response { puzzleJSON.put("content", puzzle.getContent()); puzzleJSON.put("scoreMax", puzzle.getScoreMax()); if(puzzle.getTags() != null) puzzleJSON.put("tags", puzzle.getJsonTags()); - int score = this.databaseRepo.getScore(user.getId(), puzzle.getId()); - if(score >= 0) puzzleJSON.put("score", score); + Completion completion = this.databaseRepo.getCompletionGroup(user.getId(), puzzle.getId()); + if(completion != null && completion.getScore() >= 0){ + puzzleJSON.put("score", completion.getScore()); + puzzleJSON.put("tries", completion.getTries()); + } if(puzzle.getDepend() > 0) puzzleJSON.put("depend", puzzle.getDepend()); HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *", "Content-Type: application/json"); writer.write(puzzleJSON.toJSONString());