295 lines
9.8 KiB
Java
295 lines
9.8 KiB
Java
package repository;
|
|
|
|
import dto.TaskCreateDto;
|
|
import dto.TaskUpdateDto;
|
|
import models.Task;
|
|
import models.User;
|
|
import util.Session;
|
|
|
|
import java.sql.*;
|
|
import java.util.ArrayList;
|
|
import java.util.Date;
|
|
import java.util.Optional;
|
|
|
|
public class TaskRepositoryJdbc implements TaskRepository {
|
|
|
|
private final Connection connection;
|
|
|
|
public TaskRepositoryJdbc(Connection connection) {
|
|
this.connection = connection;
|
|
}
|
|
|
|
@Override
|
|
public ArrayList<Task> getUserTasks() {
|
|
try {
|
|
User user = Session.getInstance().getUser();
|
|
if (user == null) return new ArrayList<>();
|
|
|
|
PreparedStatement preparedStatement = connection.prepareStatement(
|
|
"SELECT * FROM tasks WHERE user_id=(?)"
|
|
);
|
|
preparedStatement.setInt(1, user.id());
|
|
|
|
ResultSet resultSet = preparedStatement.executeQuery();
|
|
ArrayList<Task> tasks = new ArrayList<>();
|
|
|
|
while (resultSet.next()) {
|
|
Task.Status status = Task.Status.valueOf(resultSet.getString("status"));
|
|
|
|
Task task = new Task(
|
|
resultSet.getInt("id"),
|
|
resultSet.getString("title"),
|
|
resultSet.getString("description"),
|
|
status,
|
|
resultSet.getTimestamp("deadline"),
|
|
resultSet.getTimestamp("created_at"),
|
|
user
|
|
);
|
|
tasks.add(task);
|
|
}
|
|
|
|
return tasks;
|
|
} catch (SQLException ex) {
|
|
ex.printStackTrace();
|
|
return new ArrayList<>();
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
public ArrayList<Task> getUserTasks(Date startDate, Date endDate) {
|
|
try {
|
|
User user = Session.getInstance().getUser();
|
|
if (user == null) return new ArrayList<>();
|
|
|
|
PreparedStatement preparedStatement = connection.prepareStatement(
|
|
"SELECT * FROM tasks WHERE user_id=(?) AND created_at BETWEEN (?) AND (?)"
|
|
);
|
|
|
|
preparedStatement.setInt(1, user.id());
|
|
preparedStatement.setDate(2, new java.sql.Date(startDate.getTime()));
|
|
preparedStatement.setDate(3, new java.sql.Date(endDate.getTime()));
|
|
|
|
ResultSet resultSet = preparedStatement.executeQuery();
|
|
ArrayList<Task> tasks = new ArrayList<>();
|
|
|
|
while (resultSet.next()) {
|
|
Task.Status status = Task.Status.valueOf(resultSet.getString("status"));
|
|
|
|
Task task = new Task(
|
|
resultSet.getInt("id"),
|
|
resultSet.getString("title"),
|
|
resultSet.getString("description"),
|
|
status,
|
|
resultSet.getTimestamp("deadline"),
|
|
resultSet.getTimestamp("created_at"),
|
|
user
|
|
);
|
|
|
|
tasks.add(task);
|
|
}
|
|
|
|
return tasks;
|
|
} catch (SQLException ex) {
|
|
ex.printStackTrace();
|
|
return new ArrayList<>();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public ArrayList<Task> getUserTasks(String title) {
|
|
try {
|
|
User user = Session.getInstance().getUser();
|
|
if (user == null) return new ArrayList<>();
|
|
|
|
PreparedStatement preparedStatement = connection.prepareStatement(
|
|
"SELECT * FROM tasks WHERE user_id=(?) AND title ILIKE (?)"
|
|
);
|
|
|
|
preparedStatement.setInt(1, user.id());
|
|
preparedStatement.setString(2, "%" + title + "%");
|
|
|
|
ResultSet resultSet = preparedStatement.executeQuery();
|
|
ArrayList<Task> tasks = new ArrayList<>();
|
|
|
|
while (resultSet.next()) {
|
|
Task.Status status = Task.Status.valueOf(resultSet.getString("status"));
|
|
|
|
Task task = new Task(
|
|
resultSet.getInt("id"),
|
|
resultSet.getString("title"),
|
|
resultSet.getString("description"),
|
|
status,
|
|
resultSet.getTimestamp("deadline"),
|
|
resultSet.getTimestamp("created_at"),
|
|
user
|
|
);
|
|
|
|
tasks.add(task);
|
|
}
|
|
|
|
return tasks;
|
|
} catch (SQLException ex) {
|
|
ex.printStackTrace();
|
|
return new ArrayList<>();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public Optional<Task> getUserTask(int taskId) {
|
|
try {
|
|
User user = Session.getInstance().getUser();
|
|
if (user == null) return Optional.empty();
|
|
|
|
PreparedStatement preparedStatement = connection.prepareStatement(
|
|
"SELECT * FROM tasks WHERE id=(?) AND user_id=(?)"
|
|
);
|
|
|
|
preparedStatement.setInt(1, taskId);
|
|
preparedStatement.setInt(2, user.id());
|
|
ResultSet resultSet = preparedStatement.executeQuery();
|
|
|
|
if (resultSet.next()) {
|
|
Task.Status status = Task.Status.valueOf(resultSet.getString("status"));
|
|
|
|
Task task = new Task(
|
|
resultSet.getInt("id"),
|
|
resultSet.getString("title"),
|
|
resultSet.getString("description"),
|
|
status,
|
|
resultSet.getTimestamp("deadline"),
|
|
resultSet.getTimestamp("created_at"),
|
|
user
|
|
);
|
|
|
|
return Optional.of(task);
|
|
}
|
|
|
|
return Optional.empty();
|
|
} catch (SQLException ex) {
|
|
ex.printStackTrace();
|
|
return Optional.empty();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public Optional<Task> save(TaskCreateDto taskCreateDto) {
|
|
try {
|
|
User user = Session.getInstance().getUser();
|
|
if (user == null) return Optional.empty();
|
|
|
|
PreparedStatement preparedStatement = connection.prepareStatement(
|
|
"INSERT INTO tasks (title, description, status, deadline) VALUES (?, ?, ?, ?) RETURNING id, created_at"
|
|
);
|
|
|
|
preparedStatement.setString(1, taskCreateDto.title());
|
|
preparedStatement.setString(2, taskCreateDto.description());
|
|
preparedStatement.setObject(3, taskCreateDto.status().name(), Types.OTHER);
|
|
|
|
Date deadline = taskCreateDto.deadline();
|
|
if (deadline != null) {
|
|
preparedStatement.setDate(4, new java.sql.Date(deadline.getTime()));
|
|
} else {
|
|
preparedStatement.setNull(4, java.sql.Types.DATE);
|
|
}
|
|
|
|
System.out.println(preparedStatement);
|
|
ResultSet resultSet = preparedStatement.executeQuery();
|
|
System.out.println(resultSet);
|
|
|
|
if (resultSet.next()) {
|
|
System.out.println(resultSet.getString("id"));
|
|
|
|
Task task = new Task(
|
|
resultSet.getInt("id"),
|
|
taskCreateDto.title(),
|
|
taskCreateDto.description(),
|
|
taskCreateDto.status(),
|
|
taskCreateDto.deadline(),
|
|
resultSet.getTimestamp("created_at"),
|
|
user
|
|
);
|
|
|
|
return Optional.of(task);
|
|
}
|
|
|
|
return Optional.empty();
|
|
} catch (SQLException ex) {
|
|
ex.printStackTrace();
|
|
return Optional.empty();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public Optional<Task> update(TaskUpdateDto taskUpdateDto) {
|
|
try {
|
|
User user = Session.getInstance().getUser();
|
|
if (user == null) return Optional.empty();
|
|
|
|
PreparedStatement preparedStatement = connection.prepareStatement(
|
|
"UPDATE tasks SET title=?, description=?, status=?, deadline=? WHERE id=? AND user_id=(?) RETURNING id, created_at;"
|
|
);
|
|
|
|
preparedStatement.setString(1, taskUpdateDto.title());
|
|
preparedStatement.setString(2, taskUpdateDto.description());
|
|
preparedStatement.setObject(3, taskUpdateDto.status().name(), Types.OTHER);
|
|
Date deadline = taskUpdateDto.deadline();
|
|
if (deadline != null) {
|
|
preparedStatement.setDate(4, new java.sql.Date(deadline.getTime()));
|
|
} else {
|
|
preparedStatement.setNull(4, java.sql.Types.DATE);
|
|
}
|
|
preparedStatement.setInt(5, taskUpdateDto.id());
|
|
preparedStatement.setInt(6, user.id());
|
|
|
|
ResultSet resultSet = preparedStatement.executeQuery();
|
|
|
|
if (resultSet.next()) {
|
|
Task task = new Task(
|
|
resultSet.getInt("id"),
|
|
taskUpdateDto.title(),
|
|
taskUpdateDto.description(),
|
|
taskUpdateDto.status(),
|
|
taskUpdateDto.deadline(),
|
|
resultSet.getTimestamp("created_at"),
|
|
user
|
|
);
|
|
|
|
return Optional.of(task);
|
|
}
|
|
|
|
return Optional.empty();
|
|
} catch (SQLException ex) {
|
|
ex.printStackTrace();
|
|
return Optional.empty();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean delete(int taskId) {
|
|
try {
|
|
User user = Session.getInstance().getUser();
|
|
if (user == null) return false;
|
|
|
|
PreparedStatement preparedStatement = connection.prepareStatement(
|
|
"DELETE FROM tasks WHERE id=(?) AND user_id=(?);"
|
|
);
|
|
|
|
preparedStatement.setInt(1, taskId);
|
|
preparedStatement.setInt(2, user.id());
|
|
|
|
int affected = preparedStatement.executeUpdate();
|
|
|
|
if (affected > 0) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
} catch (SQLException ex) {
|
|
ex.printStackTrace();
|
|
return false;
|
|
}
|
|
|
|
}
|
|
}
|