From 89a76744a2567b70f5f1ed2e8df066d6f1aa05d3 Mon Sep 17 00:00:00 2001 From: maciejrusek Date: Tue, 5 May 2026 23:07:29 +0200 Subject: [PATCH] Added some logic to Task, found bug... --- src/main/java/dto/TaskCreateDto.java | 4 + src/main/java/dto/TaskUpdateDto.java | 14 ++++ src/main/java/models/Task.java | 76 +++++++++++++++---- src/main/java/repository/TaskRepository.java | 3 +- .../java/repository/TaskRepositoryJdbc.java | 67 +++++++++++----- src/main/java/ui/CreateTodoPanel.java | 42 +++++++++- src/main/java/util/Session.java | 10 +++ 7 files changed, 183 insertions(+), 33 deletions(-) create mode 100644 src/main/java/dto/TaskUpdateDto.java diff --git a/src/main/java/dto/TaskCreateDto.java b/src/main/java/dto/TaskCreateDto.java index 1d46426..f169d4a 100644 --- a/src/main/java/dto/TaskCreateDto.java +++ b/src/main/java/dto/TaskCreateDto.java @@ -1,10 +1,14 @@ package dto; +import models.Task; + import java.util.Date; + public record TaskCreateDto ( String title, String description, + Task.Status status, Date deadline ) { } diff --git a/src/main/java/dto/TaskUpdateDto.java b/src/main/java/dto/TaskUpdateDto.java new file mode 100644 index 0000000..23b6744 --- /dev/null +++ b/src/main/java/dto/TaskUpdateDto.java @@ -0,0 +1,14 @@ +package dto; + +import models.Task; + +import java.util.Date; + +public record TaskUpdateDto( + Integer id, + String title, + String description, + Task.Status status, + Date deadline +) { +} diff --git a/src/main/java/models/Task.java b/src/main/java/models/Task.java index 213ee5e..2c5ba0a 100644 --- a/src/main/java/models/Task.java +++ b/src/main/java/models/Task.java @@ -5,20 +5,51 @@ import java.util.Objects; public class Task { + public enum Status { + NEW, IN_PROGRESS, CANCELED, DONE + } + private Integer id; private User user; private String title; private String description; + private Status status; + private Date deadline; private Date createdAt; - public Task(Integer id, String title, String description, Date createdAt, User user) { + public Task( + Integer id, + String title, + String description, + Status status, + Date deadline, + User user) { this.id = id; this.title = title; this.description = description; + this.status = status; + this.deadline = deadline; this.createdAt = new Date(); this.user = user; } + public Task( + Integer id, + String title, + String description, + Status status, + Date deadline, + Date createdAt, + User user) { + this.id = id; + this.title = title; + this.description = description; + this.status = status; + this.deadline = deadline; + this.createdAt = createdAt; + this.user = user; + } + public Integer getId() { return id; } @@ -51,6 +82,22 @@ public class Task { this.description = description; } + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + + public Date getDeadline() { + return deadline; + } + + public void setDeadline(Date deadline) { + this.deadline = deadline; + } + public Date getCreatedAt() { return createdAt; } @@ -59,25 +106,28 @@ public class Task { this.createdAt = createdAt; } - @Override - public String toString() { - return "Task{" + - "title='" + title + '\'' + - ", user='" + user + '\'' + - ", description='" + description + '\'' + - ", createdAt=" + createdAt + - '}'; - } - @Override public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) return false; Task task = (Task) o; - return Objects.equals(user, task.user) && Objects.equals(title, task.title) && Objects.equals(description, task.description) && Objects.equals(createdAt, task.createdAt); + return Objects.equals(id, task.id) && Objects.equals(user, task.user) && Objects.equals(title, task.title) && Objects.equals(description, task.description) && Objects.equals(status, task.status) && Objects.equals(deadline, task.deadline) && Objects.equals(createdAt, task.createdAt); } @Override public int hashCode() { - return Objects.hash(user, title, description, createdAt); + return Objects.hash(id, user, title, description, status, deadline, createdAt); + } + + @Override + public String toString() { + return "Task{" + + "id=" + id + + ", user=" + user + + ", title='" + title + '\'' + + ", description='" + description + '\'' + + ", status='" + status + '\'' + + ", deadline=" + deadline + + ", createdAt=" + createdAt + + '}'; } } diff --git a/src/main/java/repository/TaskRepository.java b/src/main/java/repository/TaskRepository.java index cb2935e..69f9de0 100644 --- a/src/main/java/repository/TaskRepository.java +++ b/src/main/java/repository/TaskRepository.java @@ -1,6 +1,7 @@ package repository; import dto.TaskCreateDto; +import dto.TaskUpdateDto; import models.Task; import java.util.ArrayList; @@ -14,6 +15,6 @@ public interface TaskRepository { ArrayList getUserTasks(String title); Optional getUserTask(int taskId); Optional save(TaskCreateDto taskCreateDto); - Optional update(int taskId, String title, String description); + Optional update(TaskUpdateDto taskUpdateDto); boolean delete(int taskId); } diff --git a/src/main/java/repository/TaskRepositoryJdbc.java b/src/main/java/repository/TaskRepositoryJdbc.java index 3878277..1aae08d 100644 --- a/src/main/java/repository/TaskRepositoryJdbc.java +++ b/src/main/java/repository/TaskRepositoryJdbc.java @@ -1,15 +1,12 @@ package repository; import dto.TaskCreateDto; +import dto.TaskUpdateDto; import models.Task; import models.User; import util.Session; -import javax.imageio.plugins.jpeg.JPEGImageReadParam; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; +import java.sql.*; import java.util.ArrayList; import java.util.Date; import java.util.Optional; @@ -37,11 +34,14 @@ public class TaskRepositoryJdbc implements TaskRepository { ArrayList 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 ); @@ -74,11 +74,14 @@ public class TaskRepositoryJdbc implements TaskRepository { ArrayList 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 ); @@ -110,11 +113,14 @@ public class TaskRepositoryJdbc implements TaskRepository { ArrayList 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 ); @@ -144,10 +150,14 @@ public class TaskRepositoryJdbc implements TaskRepository { 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 ); @@ -166,22 +176,36 @@ public class TaskRepositoryJdbc implements TaskRepository { public Optional save(TaskCreateDto taskCreateDto) { try { User user = Session.getInstance().getUser(); - if (user == null) Optional.empty(); + if (user == null) return Optional.empty(); PreparedStatement preparedStatement = connection.prepareStatement( - "INSERT INTO tasks (title, description, deadline) VALUES (?, ?, ?) RETURNING id, created_at" + "INSERT INTO tasks (title, description, status, deadline) VALUES (?, ?, ?, ?) RETURNING id, created_at" ); preparedStatement.setString(1, taskCreateDto.title()); preparedStatement.setString(2, taskCreateDto.description()); - preparedStatement.setDate(3, (java.sql.Date) taskCreateDto.deadline()); + 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 ); @@ -197,27 +221,36 @@ public class TaskRepositoryJdbc implements TaskRepository { } @Override - public Optional update(int taskId, String title, String description) { + public Optional update(TaskUpdateDto taskUpdateDto) { try { User user = Session.getInstance().getUser(); - if (user == null) Optional.empty(); + if (user == null) return Optional.empty(); PreparedStatement preparedStatement = connection.prepareStatement( - "UPDATE tasks SET title=?, description=? WHERE id=? AND user_id=(?) RETURNING id, created_at;" + "UPDATE tasks SET title=?, description=?, status=?, deadline=? WHERE id=? AND user_id=(?) RETURNING id, created_at;" ); - preparedStatement.setString(1, title); - preparedStatement.setString(2, description ); - preparedStatement.setInt(3, taskId); - preparedStatement.setInt(4, user.id()); + 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"), - title, - description, + taskUpdateDto.title(), + taskUpdateDto.description(), + taskUpdateDto.status(), + taskUpdateDto.deadline(), resultSet.getTimestamp("created_at"), user ); diff --git a/src/main/java/ui/CreateTodoPanel.java b/src/main/java/ui/CreateTodoPanel.java index 913d933..f237a9e 100644 --- a/src/main/java/ui/CreateTodoPanel.java +++ b/src/main/java/ui/CreateTodoPanel.java @@ -1,11 +1,21 @@ package ui; +import dto.TaskCreateDto; +import models.Task; +import models.User; +import repository.TaskRepository; +import repository.UserRepository; +import service.TaskService; +import service.UserService; +import util.Session; + import javax.swing.*; import java.awt.*; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.text.spi.DateFormatProvider; import java.util.Date; +import java.util.Optional; import java.util.function.Consumer; public class CreateTodoPanel extends BasePanel { @@ -13,30 +23,37 @@ public class CreateTodoPanel extends BasePanel { public CreateTodoPanel(Consumer changePanel) { super(changePanel); - JPanel formPanel = new JPanel(new GridLayout(4, 2, 5, 5)); + JPanel formPanel = new JPanel(new GridLayout(5, 2, 5, 5)); JLabel todoLabel = new JLabel("title:"); JTextField todoTitle = new JTextField(); JLabel descLabel = new JLabel("Description:"); JTextField todoDescription = new JTextField(); + String statuses[] = { "NEW", "IN_PROGRESS", "CANCELED", "DONE" }; + JLabel statusLabel = new JLabel("Status:"); + JComboBox statusCombo = new JComboBox<>(statuses); + statusCombo.setSelectedItem("NEW"); + JLabel dateLabel = new JLabel("Date:"); DateFormat format = new SimpleDateFormat("dd.MM.yyyy"); JFormattedTextField todoDate = new JFormattedTextField(format); - formPanel.add(todoLabel); formPanel.add(todoTitle); formPanel.add(descLabel); formPanel.add(todoDescription); formPanel.add(dateLabel); formPanel.add(todoDate); + formPanel.add(statusLabel); + formPanel.add(statusCombo); JButton createButton = new JButton("Create"); createButton.addActionListener(e -> { try { String titleText = todoTitle.getText(); String descText = todoDescription.getText(); + String selectedStatus = (String) statusCombo.getSelectedItem(); String dateText = todoDate.getText(); Date parsedDate; @@ -47,9 +64,30 @@ public class CreateTodoPanel extends BasePanel { return; } + TaskRepository taskRepository = Session.getTaskRepository(); + TaskService service = new TaskService(taskRepository); + Task.Status status = Task.Status.valueOf(selectedStatus); + TaskCreateDto taskCreateDto = new TaskCreateDto( + titleText, + descText, + status, + parsedDate + ); + Optional task = service.createTask(taskCreateDto); + if (task.isPresent()) { + + todoTitle.setText(""); + todoDescription.setText(""); + statusCombo.setSelectedItem("NEW"); + todoDate.setValue(""); + + JOptionPane.showMessageDialog(this, "Task created"); + } else { + JOptionPane.showMessageDialog(this, "Failed to create task"); + } } catch (Exception ex) { ex.printStackTrace(); diff --git a/src/main/java/util/Session.java b/src/main/java/util/Session.java index bbb5d5f..39a6a7f 100644 --- a/src/main/java/util/Session.java +++ b/src/main/java/util/Session.java @@ -1,6 +1,8 @@ package util; import models.User; +import repository.TaskRepository; +import repository.TaskRepositoryJdbc; import repository.UserRepository; import repository.UserRepositoryJdbc; @@ -13,6 +15,7 @@ public class Session { private static Session instance; private static Connection connection; private static UserRepository userRepository; + private static TaskRepository taskRepository; private User user; @@ -37,6 +40,13 @@ public class Session { return userRepository; } + public static TaskRepository getTaskRepository() throws SQLException { + if (taskRepository == null) { + taskRepository = new TaskRepositoryJdbc(getConn()); + } + return taskRepository; + } + public User getUser() { return user; }