Added some logic to Task, found bug...

This commit is contained in:
maciejrusek
2026-05-05 23:07:29 +02:00
parent 9098f0a634
commit 89a76744a2
7 changed files with 183 additions and 33 deletions

View File

@@ -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
) {
}

View File

@@ -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
) {
}

View File

@@ -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 +
'}';
}
}

View File

@@ -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<Task> getUserTasks(String title);
Optional<Task> getUserTask(int taskId);
Optional<Task> save(TaskCreateDto taskCreateDto);
Optional<Task> update(int taskId, String title, String description);
Optional<Task> update(TaskUpdateDto taskUpdateDto);
boolean delete(int taskId);
}

View File

@@ -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<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
);
@@ -74,11 +74,14 @@ public class TaskRepositoryJdbc implements TaskRepository {
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
);
@@ -110,11 +113,14 @@ public class TaskRepositoryJdbc implements TaskRepository {
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
);
@@ -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<Task> 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<Task> update(int taskId, String title, String description) {
public Optional<Task> 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
);

View File

@@ -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<String> 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<String> 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> 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();

View File

@@ -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;
}