From d41b918f59e84dfa05cd7bf29495c56241979795 Mon Sep 17 00:00:00 2001 From: maciejrusek Date: Thu, 9 Apr 2026 20:50:02 +0200 Subject: [PATCH] Added Dao for User with SQLite --- .gitignore | 3 +- pom.xml | 7 ++ src/main/java/user/UserController.java | 10 ++- src/main/java/user/UserDao.java | 97 ++++++++++++++++++++++++++ src/main/java/user/UserService.java | 19 ++++- 5 files changed, 132 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 159ea20..27f0ec7 100644 --- a/.gitignore +++ b/.gitignore @@ -38,4 +38,5 @@ build/ ### Mac OS ### .DS_Store -*.log \ No newline at end of file +*.log +*.db \ No newline at end of file diff --git a/pom.xml b/pom.xml index 8e9ca13..f8de71c 100644 --- a/pom.xml +++ b/pom.xml @@ -33,12 +33,19 @@ test + org.xerial sqlite-jdbc 3.51.3.0 + + + com.googlecode.lanterna + lanterna + 3.1.2 + \ No newline at end of file diff --git a/src/main/java/user/UserController.java b/src/main/java/user/UserController.java index f40363f..242168d 100644 --- a/src/main/java/user/UserController.java +++ b/src/main/java/user/UserController.java @@ -10,11 +10,17 @@ public class UserController { this.service = service; } - public Optional loginIntoUser( + public Optional createUser( String username, String password ) { - return service.loginIntoUser(username, password); + return service.createUser(username, password); } + public Optional getUser( + String username, + String password + ) { + return service.getUser(username, password); + } } diff --git a/src/main/java/user/UserDao.java b/src/main/java/user/UserDao.java index 1d370dd..02f02ce 100644 --- a/src/main/java/user/UserDao.java +++ b/src/main/java/user/UserDao.java @@ -1,6 +1,103 @@ package user; +import java.sql.*; +import java.util.Optional; + public class UserDao { + public static final String DRIVER = "org.sqlite.JDBC"; + public static final String DB_URL = "jdbc:sqlite:chat.db"; + private Connection conn; + private Statement stat; + + public UserDao() { + try { + conn = DriverManager.getConnection(DB_URL); + stat = conn.createStatement(); + } catch (SQLException e) { + e.printStackTrace(); + } + + createTables(); + } + + public boolean createTables() { + String createUsers = "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, username VARCHAR(255) UNIQUE, password VARCHAR(255) )"; + try { + stat.execute(createUsers); + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public Boolean checkIfUsernameExists(String username) { + try { + PreparedStatement preparedStatement = conn.prepareStatement( + "SELECT * FROM users WHERE username=(?);" + ); + + preparedStatement.setString(1, username); + ResultSet result = preparedStatement.executeQuery(); + + while (result.next()) { + return true; + } + + return false; + } catch (SQLException e) { + e.printStackTrace(); + return true; + } + } + + + public Optional insertUser(String username, String password) { + try { + PreparedStatement preparedStatement = conn.prepareStatement( + "INSERT INTO users VALUES (NULL, ?, ?);" + ); + + preparedStatement.setString(1, username); + preparedStatement.setString(2, password); // FIXME, later hash or smth.. + preparedStatement.execute(); + + User user = new User(username); + return Optional.of(user); + } catch (SQLException e) { + e.printStackTrace(); + return Optional.empty(); + } + } + + public Optional getUser(String username, String password) { + try { + PreparedStatement preparedStatement = conn.prepareStatement( + "SELECT * FROM users WHERE username=(?);" + ); + + preparedStatement.setString(1, username); + ResultSet result = preparedStatement.executeQuery(); + + // FIXME: Hasło tu też ogarnąć + String passwordFromDB; + + while (result.next()) { + passwordFromDB = result.getString("password"); + + if (password.equals(passwordFromDB)) { + return Optional.of(new User(username)); + } else { + return Optional.empty(); + } + } + return Optional.empty(); + } catch (SQLException e) { + e.printStackTrace(); + return Optional.empty(); + } + } } diff --git a/src/main/java/user/UserService.java b/src/main/java/user/UserService.java index 6ec5a83..78a665e 100644 --- a/src/main/java/user/UserService.java +++ b/src/main/java/user/UserService.java @@ -14,12 +14,29 @@ public class UserService { this.userDao = userDao; } - public Optional loginIntoUser( + public Optional createUser( String username, String pass ) { try { + + if (!userDao.checkIfUsernameExists(username)) { + return userDao.insertUser(username, pass); + } + return Optional.empty(); + } catch (Exception e) { + logger.error("Error creating user: {}", e.toString()); + return Optional.empty(); + } + } + + public Optional getUser( + String username, + String pass + ) { + try { + return userDao.getUser(username, pass); } catch (Exception e) { logger.error("Error while login into user: {}", e.toString()); return Optional.empty();