New architecture test
This commit is contained in:
@@ -1,40 +1,13 @@
|
||||
package com.Samsung.TaskTraker_Server.Repository;
|
||||
|
||||
import java.io.*;
|
||||
import java.sql.*;
|
||||
import java.util.*;
|
||||
|
||||
public class DataBase {
|
||||
private final Object synhronizedDataBase = new Object();
|
||||
|
||||
private class TaskDB {
|
||||
private PreparedStatement statement;
|
||||
|
||||
public TaskDB(PreparedStatement statement) {
|
||||
this.statement = statement;
|
||||
}
|
||||
|
||||
public void execute() {
|
||||
try {
|
||||
synchronized (synhronizedDataBase) {
|
||||
statement.executeUpdate();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
System.out.println(e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static DataBase instance;
|
||||
private final Connection connection;
|
||||
private final List<TaskDB> TaskDBList = new ArrayList<>();
|
||||
private final Timer UpdateDBTimer = new Timer();
|
||||
|
||||
public void close() {
|
||||
UpdateDBTimer.cancel();
|
||||
for (TaskDB i : TaskDBList)
|
||||
i.execute();
|
||||
TaskDBList.clear();
|
||||
try {
|
||||
connection.close();
|
||||
} catch (SQLException e) {
|
||||
@@ -50,15 +23,6 @@ public class DataBase {
|
||||
System.out.println("[!] DB: " + e.getMessage());
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
UpdateDBTimer.scheduleAtFixedRate(new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
for (TaskDB i : TaskDBList)
|
||||
i.execute();
|
||||
TaskDBList.clear();
|
||||
}
|
||||
}, 1_800_000,1_800_000);
|
||||
}
|
||||
|
||||
public static DataBase getInstance() {
|
||||
@@ -68,47 +32,74 @@ public class DataBase {
|
||||
return instance;
|
||||
}
|
||||
|
||||
private static String Serialize(List<Task> task) {
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
try {
|
||||
ObjectOutputStream serialize = new ObjectOutputStream(baos);
|
||||
serialize.writeObject(task);
|
||||
serialize.flush();
|
||||
return Base64.getEncoder().encodeToString(baos.toByteArray());
|
||||
} catch (IOException e) {
|
||||
System.out.println("[!] DB: " + e.getMessage());
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private static List<Task> Deserialize(String bytes) {
|
||||
byte[] data = Base64.getDecoder().decode(bytes);
|
||||
try (ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(data))) {
|
||||
return (ArrayList<Task>) ois.readObject();
|
||||
} catch (IOException | ClassNotFoundException e) {
|
||||
System.out.println("[!] DB: " + e.getMessage());
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public void SaveUser(User user) throws SQLException {
|
||||
PreparedStatement saveUser_stmt = connection.prepareStatement("INSERT INTO user (login, password, task_list) VALUE (?, ?, ?)");
|
||||
PreparedStatement saveUser_stmt = connection.prepareStatement("INSERT INTO users(login, password) VALUE (?, ?)");
|
||||
saveUser_stmt.setString(1, user.getLogin());
|
||||
saveUser_stmt.setString(2, user.getPassword());
|
||||
saveUser_stmt.setString(3, Serialize(user.getTaskList()));
|
||||
saveUser_stmt.executeUpdate();
|
||||
}
|
||||
|
||||
public void UpdateTaskList(User user) throws SQLException {
|
||||
PreparedStatement updateTask_stmt = connection.prepareStatement("UPDATE user SET task_list = ? WHERE token = ?");
|
||||
updateTask_stmt.setString(1, Serialize(user.getTaskList()));
|
||||
updateTask_stmt.setLong(2, user.getID());
|
||||
TaskDBList.add(new TaskDB(updateTask_stmt));
|
||||
public void AddTask(Task task, User user) throws SQLException {
|
||||
PreparedStatement addTask = connection.prepareStatement("INSERT INTO tasks(ID," +
|
||||
" TaskName," +
|
||||
" TaskDescription," +
|
||||
" TaskDate," +
|
||||
" TaskTime," +
|
||||
" UserOwner)" +
|
||||
" VALUE (?, ?, ?, ?, ?, ?)");
|
||||
|
||||
addTask.setLong(1, task.getID());
|
||||
addTask.setString(2, task.getTaskName());
|
||||
addTask.setString(3, task.getTaskDescription());
|
||||
addTask.setString(4, task.getTaskDate());
|
||||
addTask.setString(5, task.getTaskTime());
|
||||
addTask.setLong(6, user.getID());
|
||||
addTask.executeUpdate();
|
||||
}
|
||||
|
||||
public void UpdateTask(Task task, User user) throws SQLException {
|
||||
PreparedStatement addTask = connection.prepareStatement("UPDATE tasks SET TaskName = ?," +
|
||||
" TaskDescription = ?," +
|
||||
" TaskDate = ?," +
|
||||
" TaskTime = ?" +
|
||||
" WHERE UserOwner = ? and ID = ?");
|
||||
|
||||
addTask.setString(1, task.getTaskName());
|
||||
addTask.setString(2, task.getTaskDescription());
|
||||
addTask.setString(3, task.getTaskDate());
|
||||
addTask.setString(4, task.getTaskTime());
|
||||
addTask.setLong(5, user.getID());
|
||||
addTask.setLong(6, task.getID());
|
||||
addTask.executeUpdate(); // <---------
|
||||
}
|
||||
|
||||
public void RemoveTask(long taskID, User user) throws SQLException {
|
||||
PreparedStatement remove = connection.prepareStatement("DELETE FROM tasks WHERE ID = ? AND UserOwner = ?");
|
||||
remove.setLong(1, taskID);
|
||||
remove.setLong(2, user.getID());
|
||||
remove.executeUpdate();
|
||||
}
|
||||
|
||||
public List<Task> getTaskList(User user) throws SQLException {
|
||||
PreparedStatement findTasks = connection.prepareStatement("SELECT * FROM tasks WHERE UserOwner = ?");
|
||||
findTasks.setInt(1, user.getID());
|
||||
ResultSet result = findTasks.executeQuery();
|
||||
|
||||
List<Task> taskList = new ArrayList<>();
|
||||
while(result.next()) {
|
||||
Task task = new Task(result.getLong(1), // dbID
|
||||
result.getLong(2), // ID
|
||||
result.getString(3), // TaskName
|
||||
result.getString(4), // TaskDescription
|
||||
result.getString(5), // TaskDate
|
||||
result.getString(6)); // TaskTime
|
||||
taskList.add(task);
|
||||
}
|
||||
return taskList;
|
||||
}
|
||||
|
||||
public User FindUser(String login) throws SQLException {
|
||||
|
||||
PreparedStatement getUser_stmt = connection.prepareStatement("SELECT * FROM user WHERE login = ?");
|
||||
PreparedStatement getUser_stmt = connection.prepareStatement("SELECT * FROM users WHERE login = ?");
|
||||
getUser_stmt.setString(1, login);
|
||||
ResultSet resultSet = getUser_stmt.executeQuery();
|
||||
if(!resultSet.next())
|
||||
@@ -116,8 +107,7 @@ public class DataBase {
|
||||
|
||||
int id = resultSet.getInt(1);
|
||||
String pass = resultSet.getNString(3);
|
||||
List<Task> taskList = Deserialize(resultSet.getNString(4));
|
||||
|
||||
return new User(id, login, pass, taskList);
|
||||
return new User(id, login, pass);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,21 +1,26 @@
|
||||
package com.Samsung.TaskTraker_Server.Repository;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Objects;
|
||||
|
||||
public class Task implements Serializable {
|
||||
@JsonIgnore
|
||||
private final long dbID;
|
||||
private final long ID;
|
||||
private final String TaskName;
|
||||
private final String TaskDescription;
|
||||
private final String TaskDate;
|
||||
private final String TaskTime;
|
||||
|
||||
public Task(long id, String taskName, String taskDescription, String taskDate, String taskTime) {
|
||||
public Task(long dbID, long id, String taskName, String taskDescription, String taskDate, String taskTime) {
|
||||
this.TaskName = taskName;
|
||||
this.TaskDescription = taskDescription;
|
||||
this.TaskDate = taskDate;
|
||||
this.TaskTime = taskTime;
|
||||
this.ID = id;
|
||||
this.dbID = dbID;
|
||||
}
|
||||
|
||||
public long getID() {
|
||||
@@ -42,11 +47,11 @@ public class Task implements Serializable {
|
||||
public boolean equals(Object o) {
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
Task task = (Task) o;
|
||||
return ID == task.ID;
|
||||
return dbID == task.dbID && ID == task.ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(ID, TaskName, TaskDescription, TaskDate, TaskTime);
|
||||
return Objects.hash(dbID, ID, TaskName, TaskDescription, TaskDate, TaskTime);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,30 +1,18 @@
|
||||
package com.Samsung.TaskTraker_Server.Repository;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class User {
|
||||
private final long ID;
|
||||
private final int ID;
|
||||
private final String login;
|
||||
private final String password;
|
||||
private List<Task> TaskList = new ArrayList<>();
|
||||
|
||||
public User(long ID, String login, String password, List<Task> taskList) {
|
||||
this.ID = ID;
|
||||
this.login = login;
|
||||
this.password = password;
|
||||
TaskList = taskList;
|
||||
}
|
||||
|
||||
public User(long ID, String login, String password) {
|
||||
public User(int ID, String login, String password) {
|
||||
this.ID = ID;
|
||||
this.login = login;
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
public long getID() {
|
||||
public int getID() {
|
||||
return ID;
|
||||
}
|
||||
|
||||
@@ -36,43 +24,15 @@ public class User {
|
||||
return password;
|
||||
}
|
||||
|
||||
public List<Task> getTaskList() {
|
||||
return TaskList;
|
||||
}
|
||||
|
||||
public void addTask(Task task) {
|
||||
if(TaskList.contains(task)) {
|
||||
TaskList.remove(task); // Просто удаляем потаму, что cравнение идёт только по ID
|
||||
TaskList.add(task);
|
||||
}
|
||||
else {
|
||||
TaskList.add(task);
|
||||
}
|
||||
try {
|
||||
DataBase.getInstance().UpdateTaskList(this);
|
||||
} catch (SQLException e) {
|
||||
System.out.println(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public void removeTask(long taskID) {
|
||||
TaskList.remove(new Task(taskID, null, null, null, null));
|
||||
try {
|
||||
DataBase.getInstance().UpdateTaskList(this);
|
||||
} catch (SQLException e) {
|
||||
System.out.println(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
User user = (User) o;
|
||||
return ID == user.ID && Objects.equals(login, user.login) && Objects.equals(password, user.password) && Objects.equals(TaskList, user.TaskList);
|
||||
return ID == user.ID && Objects.equals(login, user.login) && Objects.equals(password, user.password);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(ID, login, password, TaskList);
|
||||
return Objects.hash(ID, login, password);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,6 +57,7 @@ public class TaskTrakerServerApplication {
|
||||
else
|
||||
return "{\n\t\"status\":\"ok\"\n}";
|
||||
} catch (SQLException e) {
|
||||
System.out.println(e.getMessage());
|
||||
return "{\n\t\"status\":\"error\"\n}";
|
||||
}
|
||||
}
|
||||
@@ -78,6 +79,7 @@ public class TaskTrakerServerApplication {
|
||||
|
||||
return "{\n\t\"status\":\"ok\"\n}";
|
||||
} catch (SQLException e) {
|
||||
System.out.println(e.getMessage());
|
||||
return "{\n\t\"status\":\"error\"\n}";
|
||||
}
|
||||
}
|
||||
@@ -91,19 +93,20 @@ public class TaskTrakerServerApplication {
|
||||
User user = UserRepository.getRepository().getUserByLogin(login);
|
||||
|
||||
if (user == null || !user.getPassword().equals(pass))
|
||||
return new Task(0, null, null, null, null);
|
||||
return new Task(0, 0, null, null, null, null);
|
||||
|
||||
List<Task> taskList = user.getTaskList();
|
||||
List<Task> taskList = DataBase.getInstance().getTaskList(user);
|
||||
|
||||
for (Task i : taskList) {
|
||||
if (i.getID() == taskID)
|
||||
return i;
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
return new Task(0, null, null, null, null);
|
||||
System.out.println(e.getMessage());
|
||||
return new Task(0, 0, null, null, null, null);
|
||||
}
|
||||
}
|
||||
return new Task(0, null, null, null, null);
|
||||
return new Task(0, 0, null, null, null, null);
|
||||
}
|
||||
|
||||
@GetMapping("/user/task/list")
|
||||
@@ -117,14 +120,15 @@ public class TaskTrakerServerApplication {
|
||||
if (user == null || !user.getPassword().equals(pass))
|
||||
return new ArrayList<>();
|
||||
else
|
||||
return user.getTaskList();
|
||||
return DataBase.getInstance().getTaskList(user);
|
||||
} catch (SQLException e) {
|
||||
System.out.println(e.getMessage());
|
||||
return new ArrayList<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping("/user/task/edit")
|
||||
@PostMapping("/user/task/add")
|
||||
public void addUserTask(@RequestParam(value = "login", defaultValue = "null") String login,
|
||||
@RequestParam(value = "password", defaultValue = "null") String pass,
|
||||
@RequestBody Task task) {
|
||||
@@ -133,8 +137,25 @@ public class TaskTrakerServerApplication {
|
||||
User user = UserRepository.getRepository().getUserByLogin(login);
|
||||
if (user == null || !user.getPassword().equals(pass))
|
||||
return;
|
||||
user.addTask(task);
|
||||
} catch (SQLException ignored) {
|
||||
DataBase.getInstance().AddTask(task, user);
|
||||
} catch (SQLException e) {
|
||||
System.out.println(e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping("/user/task/edit")
|
||||
public void editUserTask(@RequestParam(value = "login", defaultValue = "null") String login,
|
||||
@RequestParam(value = "password", defaultValue = "null") String pass,
|
||||
@RequestBody Task task) {
|
||||
if (!login.equals("null") && !pass.equals("null") && task != null) {
|
||||
try {
|
||||
User user = UserRepository.getRepository().getUserByLogin(login);
|
||||
if (user == null || !user.getPassword().equals(pass))
|
||||
return;
|
||||
DataBase.getInstance().UpdateTask(task, user);
|
||||
} catch (SQLException e) {
|
||||
System.out.println(e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -148,8 +169,9 @@ public class TaskTrakerServerApplication {
|
||||
User user = UserRepository.getRepository().getUserByLogin(login);
|
||||
if (user == null || !user.getPassword().equals(pass))
|
||||
return;
|
||||
user.removeTask(id);
|
||||
} catch (SQLException ignore) {
|
||||
DataBase.getInstance().RemoveTask(id, user);
|
||||
} catch (SQLException e) {
|
||||
System.out.println(e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user