Take new groups table into account on register player

This commit is contained in:
Francois G 2023-03-29 10:13:39 +02:00
parent 05ff24de32
commit 241c55abe0
2 changed files with 38 additions and 20 deletions

View file

@ -13,7 +13,8 @@ public enum DatabaseQuery {
ALL_GROUPS("SELCT * FROM groups"), ALL_GROUPS("SELCT * FROM groups"),
CHECK_PSEUDO_AVAILABLE_QUERY("SELECT * FROM players WHERE pseudo = ?"), CHECK_PSEUDO_AVAILABLE_QUERY("SELECT * FROM players WHERE pseudo = ?"),
CHECK_EMAIL_AVAILABLE_QUERY("SELECT * FROM players WHERE email = ?"), CHECK_EMAIL_AVAILABLE_QUERY("SELECT * FROM players WHERE email = ?"),
REGISTER_QUERY("INSERT INTO players (pseudo, email, passwd, firstname, lastname, description, sgroup, avatar) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"), REGISTER_QUERY("INSERT INTO players (pseudo, email, passwd, firstname, lastname, description, avatar) VALUES (?, ?, ?, ?, ?, ?, ?)"),
REGISTER_PLAYER_IN_EXISTING_GROUP("INSERT INTO containsGroups (fk_player, fk_group) VALUES (?, (SELECT id_group FROM groups WHERE name = ?));"),
CHECK_PASSWORD("SELECT id_player, passwd FROM players WHERE pseudo=?"), CHECK_PASSWORD("SELECT id_player, passwd FROM players WHERE pseudo=?"),
SCORE("SELECT score FROM completions WHERE fk_player = ? AND fk_puzzle = ?"), SCORE("SELECT score FROM completions WHERE fk_player = ? AND fk_puzzle = ?"),
GET_COMPLETION("SELECT id_completion, tries, fileName, score FROM completions WHERE fk_puzzle = ? AND fk_player = ?"), GET_COMPLETION("SELECT id_completion, tries, fileName, score FROM completions WHERE fk_puzzle = ? AND fk_player = ?"),

View file

@ -307,7 +307,8 @@ public class DatabaseRepository {
List<Group> list = new ArrayList<>(); List<Group> list = new ArrayList<>();
PreparedStatement stmt = DatabaseQuery.ALL_GROUPS.prepare(this.con); PreparedStatement stmt = DatabaseQuery.ALL_GROUPS.prepare(this.con);
ResultSet groupResult = stmt.executeQuery(); ResultSet groupResult = stmt.executeQuery();
while(groupResult.next()) list.add(makeGroup(groupResult)); while (groupResult.next())
list.add(makeGroup(groupResult));
return list; return list;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
@ -366,19 +367,34 @@ public class DatabaseRepository {
Hash hash = Password.hash(password).withArgon2(); Hash hash = Password.hash(password).withArgon2();
try { try {
ensureConnection(); ensureConnection();
PreparedStatement statement = con.prepareStatement(DatabaseQuery.REGISTER_QUERY.toString(), Statement.RETURN_GENERATED_KEYS); con.setAutoCommit(false);
statement.setString(1, pseudo); try (PreparedStatement playerStatement = con.prepareStatement(DatabaseQuery.REGISTER_QUERY.toString(),
statement.setString(2, email); Statement.RETURN_GENERATED_KEYS)) {
statement.setString(3, hash.getResult()); playerStatement.setString(1, pseudo);
statement.setString(4, firstname); playerStatement.setString(2, email);
statement.setString(5, lastname); playerStatement.setString(3, hash.getResult());
statement.setString(6, description); playerStatement.setString(4, firstname);
statement.setString(7, sgroup); playerStatement.setString(5, lastname);
statement.setString(8, avatar); playerStatement.setString(6, description);
if (statement.executeUpdate() == 1) { playerStatement.setString(7, avatar);
ResultSet inserted = statement.getGeneratedKeys(); if (playerStatement.executeUpdate() == 1) {
if (inserted.next()) ResultSet inserted = playerStatement.getGeneratedKeys();
return inserted.getInt(1); if (inserted.next()) {
int newPlayerId = inserted.getInt(1);
try (PreparedStatement containsGroupsStatement = con.prepareStatement(DatabaseQuery.REGISTER_PLAYER_IN_EXISTING_GROUP.toString())) {
containsGroupsStatement.setInt(1, newPlayerId);
containsGroupsStatement.setString(2, sgroup);
containsGroupsStatement.executeUpdate();
con.commit();
con.setAutoCommit(true);
return newPlayerId;
}
}
}
}
catch (SQLException e) {
con.rollback();
con.setAutoCommit(true);
} }
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
@ -396,7 +412,8 @@ public class DatabaseRepository {
public int login(String username, String password) { public int login(String username, String password) {
try { try {
ensureConnection(); ensureConnection();
PreparedStatement statement = con.prepareStatement(DatabaseQuery.CHECK_PASSWORD.toString());DatabaseQuery.PUZZLES_IN_CHAPTER_QUERY.prepare(this.con); PreparedStatement statement = con.prepareStatement(DatabaseQuery.CHECK_PASSWORD.toString());
DatabaseQuery.PUZZLES_IN_CHAPTER_QUERY.prepare(this.con);
statement.setString(1, username); statement.setString(1, username);
ResultSet result = statement.executeQuery(); ResultSet result = statement.executeQuery();
if (result.next()) { if (result.next()) {