Conversation
| import java.util.List; | ||
| import java.util.Objects; | ||
|
|
||
| public class Epic extends Task { |
There was a problem hiding this comment.
для эпика нужно ввести атрибут endTime
+
добавить для него сеттер и переопределить родительский getEndTime(), сделав из него обычный геттер
| public void removeSubtaskId(int id) { | ||
| subtaskIds.remove(Integer.valueOf(id)); | ||
| } | ||
|
|
There was a problem hiding this comment.
а какой в таком переопределении родительских методов? В таком виде они итак доступны))
| protected final Set<Task> prioritizedTasks = new TreeSet<>(Comparator | ||
| .comparing(Task::getStartTime, Comparator.nullsLast(LocalDateTime::compareTo)) | ||
| .thenComparingInt(Task::getId)); | ||
| protected final List<Task> history = new ArrayList<>(); |
There was a problem hiding this comment.
откуда это переменная вдруг взялась???? верни всю работу с историей как она была сделана раньше, этот функционал больше меняться не будет
| } | ||
|
|
||
| @Override | ||
| public void updateEpic(Epic epic) { |
There was a problem hiding this comment.
метод обновления эпика тоже верни как был раньше
| for (int subId : epic.getSubtaskIds()) { | ||
| Subtask subtask = subtasks.remove(subId); | ||
| if (subtask != null) { | ||
| prioritizedTasks.remove(subtask); |
There was a problem hiding this comment.
еще подзадачу из истории нужно удалить
| historyManager.remove(subtaskId); | ||
|
|
||
| for (Subtask subtask : subtasks.values()) { | ||
| prioritizedTasks.remove(subtask); |
|
|
||
| if (subtasksOfEpic.isEmpty()) { | ||
| epic.setDuration(Duration.ZERO); | ||
| epic.setStartTime(null); |
There was a problem hiding this comment.
здесь еще нужно будет в endTime передать null
| } | ||
|
|
||
| epic.setDuration(totalDuration); | ||
| epic.setStartTime(earliestStart); |
There was a problem hiding this comment.
соответственно здесь тоже посчитанный latestEnd нужно будет отдать в endTime
| epic.setDuration(totalDuration); | ||
| epic.setStartTime(earliestStart); | ||
| } | ||
|
|
| protected int generateId() { | ||
| return idCounter++; | ||
| } | ||
|
|
There was a problem hiding this comment.
методы создания сущностей потеряли свои доработки по работе с файлами (их нужно вернуть)
+
нужно вернуть метод, проверяющий пересечение задач/подзадач, он целиком куда-то пропал. Я не буду писать к каждому методу про вернуть использование checkTimeIntersection(), чтобы не перегружать ревью
| if (epic == null || !epics.containsKey(epic.getId())) return; | ||
| epics.put(epic.getId(), epic); | ||
| updateEpicTimeAndDuration(epic); | ||
| if (epics.containsKey(epic.getId())) { |
There was a problem hiding this comment.
такая реализация метод обновления эпика оставляет возможность сломать связь эпика со своими подзадачами или даже указать в качестве подзадачи любую сущность, в том числе не существующую. Потому что наполнение хранилища subtaskIds в новом эпике принимается "на веру". Поэтому посмотри какая реализация метода была принята в самом начале. Менять ее смысла нет, потому что при любых изменениях реализации метода, что старая, что новая версии метода, должны выдавать один и тот же результат, а именно изменить в эпике всего два поля
|
|
||
|
|
||
| @Override | ||
| public void updateSubtask(Subtask subtask) { |
There was a problem hiding this comment.
этот метод в прошлый раз был сделан правильно, единственное , что по нему нужно было сделать, так это заменить использование методов updateEpicStatus() и updateEpicTimeAndDuration() на updateEpicFields() раз уж ты их объединила
| if (subtask != null) historyManager.add(subtask); | ||
| return subtask; | ||
| public void addTask(Task task) { | ||
| task.setId(generateId()); |
There was a problem hiding this comment.
сделай сначала проверку пересечения, потом присваивай сущности id
| if (!epics.containsKey(subtask.getEpicId())) { | ||
| throw new IllegalArgumentException("Epic not found"); | ||
| } | ||
| subtask.setId(generateId()); |
| subtasks.put(subtask.getId(), subtask); | ||
| prioritizedTasks.add(subtask); | ||
| updateEpicFields(epics.get(subtask.getEpicId())); | ||
| if (!subtasks.containsKey(subtask.getId())) return; |
There was a problem hiding this comment.
еще осталось вернуть проверку равенства epicId в старой и новой версии подзадачи
No description provided.