Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .idea/libraries/google_code_gson.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Tracker.iml
Original file line number Diff line number Diff line change
Expand Up @@ -72,5 +72,6 @@
<SOURCES />
</library>
</orderEntry>
<orderEntry type="library" name="google.code.gson" level="project" />
</component>
</module>
Binary file added lib/gson-2.9.0.jar
Binary file not shown.
Binary file added lib/junit-jupiter-api-5.11.4.jar
Binary file not shown.
Binary file added lib/junit-platform-commons-1.11.4.jar
Binary file not shown.
Binary file added lib/opentest4j-1.3.0.jar
Binary file not shown.
223 changes: 56 additions & 167 deletions src/Main.java

Large diffs are not rendered by default.

12 changes: 12 additions & 0 deletions src/tracker/Endpoint.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package tracker;

public enum Endpoint {
GET_TASKS,
GET_PRIORITIZED,
GET_HISTORY,
GET_BY_ID,
DELETE_TASKS,
DELETE_BY_ID,
POST_TASK,
UNKNOWN
}
63 changes: 8 additions & 55 deletions src/tracker/EpicTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,41 +3,22 @@
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

public class EpicTask extends Task {
private ArrayList<Subtask> subtasks;
private List<Integer> subtasksIds;

public EpicTask(String heading, String description, int id) {
super(heading, description, id, Duration.ZERO, null); // Устанавливаем нулевую продолжительность и null для startTime
this.subtasks = new ArrayList<>();
super(heading, description, id, Duration.ZERO, null);
this.subtasksIds = new ArrayList<>();
}

public void addSubtask(Subtask subtask) {
subtasks.add(subtask);
calculateEpicDetails();
public List<Integer> getSubtasksIds() {
return subtasksIds;
}

public ArrayList<Subtask> getSubtasks() {
return subtasks;
}

private void calculateEpicDetails() {
Duration totalDuration = Duration.ZERO;
LocalDateTime earliestStartTime = null;
LocalDateTime latestEndTime = null;

for (Subtask subtask : subtasks) {
totalDuration = totalDuration.plus(subtask.getDuration());
if (earliestStartTime == null || (subtask.getStartTime() != null && subtask.getStartTime().isBefore(earliestStartTime))) {
earliestStartTime = subtask.getStartTime();
}
if (latestEndTime == null || (subtask.getEndTime() != null && subtask.getEndTime().isAfter(latestEndTime))) {
latestEndTime = subtask.getEndTime();
}
}

this.duration = totalDuration;
this.startTime = earliestStartTime;
public void setSubtasksIds(int subtaskId) {
subtasksIds.add(subtaskId);
}

@Override
Expand All @@ -60,32 +41,4 @@ public String toString() {
return getId() + "," + Type.EPIC + "," + getHeading() + "," + getStatus() + "," +
getDescription() + "," + duration.toMinutes() + "," + (startTime != null ? startTime : "");
}

public static EpicTask fromString(String value) {
String[] parts = value.split(",");

// Проверка на минимальное количество частей
if (parts.length < 6) {
throw new IllegalArgumentException("Неверный формат строки: " + value);
}

int id = Integer.parseInt(parts[0]);
String heading = parts[2];
Status status = Status.valueOf(parts[3]);
String description = parts[4];
Duration duration = Duration.ofMinutes(Long.parseLong(parts[5]));
LocalDateTime startTime = parts.length > 6 && !parts[6].isEmpty() ? LocalDateTime.parse(parts[6]) : null;

EpicTask epicTask = new EpicTask(heading, description, id);
epicTask.setStatus(status);
epicTask.setDuration(duration);
epicTask.setStartTime(startTime);

// Инициализация пустого списка подзадач, если у эпика нет подзадач
if (duration.isZero() && startTime == null) {
epicTask.subtasks = new ArrayList<>(); // Инициализируем пустой список подзадач
}

return epicTask;
}
}
Loading
Loading