From f23904d860be5e6e3003e1c913c3181e63cebf45 Mon Sep 17 00:00:00 2001 From: jeffcheasey88 Date: Fri, 29 Mar 2024 15:26:42 +0100 Subject: [PATCH] Limit group size --- .../peerat/backend/repository/DatabaseQuery.java | 1 + .../backend/repository/DatabaseRepository.java | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/dev/peerat/backend/repository/DatabaseQuery.java b/src/dev/peerat/backend/repository/DatabaseQuery.java index ef249b5..df9cc6e 100644 --- a/src/dev/peerat/backend/repository/DatabaseQuery.java +++ b/src/dev/peerat/backend/repository/DatabaseQuery.java @@ -24,6 +24,7 @@ public enum DatabaseQuery { ALL_GROUPS_BY_CHAPTER("SELECT * FROM groups WHERE fk_chapter = ?"), 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_USERS_COUNT("SELECT count(*) as howmany FROM containsGroups WHERE fk_group = ?"), INSERT_GROUP("INSERT INTO groups (name, fk_chapter) VALUES (?,?)"), INSERT_PLAYER_IN_GROUP("INSERT INTO containsGroups (fk_player, fk_group) VALUES (?,?)"), LEAVE_GROUP("DELETE FROM containsGroups WHERE fk_player = ? AND fk_group = ?"), diff --git a/src/dev/peerat/backend/repository/DatabaseRepository.java b/src/dev/peerat/backend/repository/DatabaseRepository.java index 8e65957..a49fba5 100644 --- a/src/dev/peerat/backend/repository/DatabaseRepository.java +++ b/src/dev/peerat/backend/repository/DatabaseRepository.java @@ -675,8 +675,13 @@ public class DatabaseRepository { return null; } - public boolean insertUserInGroup(Group group, PeerAtUser user) throws SQLException { + public boolean insertUserInGroup(Group group, PeerAtUser user) throws SQLException{ Integer id = getGroupId(group); + if(id != null){ + int howmany = numberInGroup(id); + System.out.println("join group, already have "+howmany); + if(howmany > 3) return false; + } Group alreadyInGroup = getPlayerGroup(user.getId(), group.getLinkToChapter()); if (id != null && alreadyInGroup == null) { PreparedStatement stmt = DatabaseQuery.INSERT_PLAYER_IN_GROUP.prepare(this.con); @@ -688,6 +693,15 @@ public class DatabaseRepository { } return false; } + + public int numberInGroup(int group) throws SQLException{ + PreparedStatement stmt = DatabaseQuery.GET_GROUP_USERS_COUNT.prepare(this.con); + stmt.setInt(1, group); + + ResultSet result = stmt.executeQuery(); + if(result.next()) return result.getInt("howmany"); + return 0; + } public boolean leaveGroup(Group group, PeerAtUser user) throws SQLException { Integer id = getGroupId(group);