Added Dao for User with SQLite

This commit is contained in:
maciejrusek
2026-04-09 20:50:02 +02:00
parent 87cbfbd506
commit d41b918f59
5 changed files with 132 additions and 4 deletions

1
.gitignore vendored
View File

@@ -39,3 +39,4 @@ build/
.DS_Store .DS_Store
*.log *.log
*.db

View File

@@ -33,12 +33,19 @@
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<!-- Server -->
<dependency> <dependency>
<groupId>org.xerial</groupId> <groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId> <artifactId>sqlite-jdbc</artifactId>
<version>3.51.3.0</version> <version>3.51.3.0</version>
</dependency> </dependency>
<!-- Client -->
<dependency>
<groupId>com.googlecode.lanterna</groupId>
<artifactId>lanterna</artifactId>
<version>3.1.2</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -10,11 +10,17 @@ public class UserController {
this.service = service; this.service = service;
} }
public Optional<User> loginIntoUser( public Optional<User> createUser(
String username, String username,
String password String password
) { ) {
return service.loginIntoUser(username, password); return service.createUser(username, password);
} }
public Optional<User> getUser(
String username,
String password
) {
return service.getUser(username, password);
}
} }

View File

@@ -1,6 +1,103 @@
package user; package user;
import java.sql.*;
import java.util.Optional;
public class UserDao { 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<User> 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<User> 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();
}
}
} }

View File

@@ -14,12 +14,29 @@ public class UserService {
this.userDao = userDao; this.userDao = userDao;
} }
public Optional<User> loginIntoUser( public Optional<User> createUser(
String username, String username,
String pass String pass
) { ) {
try { try {
if (!userDao.checkIfUsernameExists(username)) {
return userDao.insertUser(username, pass);
}
return Optional.empty(); return Optional.empty();
} catch (Exception e) {
logger.error("Error creating user: {}", e.toString());
return Optional.empty();
}
}
public Optional<User> getUser(
String username,
String pass
) {
try {
return userDao.getUser(username, pass);
} catch (Exception e) { } catch (Exception e) {
logger.error("Error while login into user: {}", e.toString()); logger.error("Error while login into user: {}", e.toString());
return Optional.empty(); return Optional.empty();