Skip to content
Merged
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
38 changes: 38 additions & 0 deletions src/data/Endpoint.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package data;

public enum Endpoint {

BASE,

// Задачи
GET_TASK, // tasks/{id}
GET_ALL_TASKS, // tasks
POST_NEW_TASK, // tasks/{id}
POST_UPDATE_TASK, // tasks
DELETE_TASK, // tasks/{id}

// Подзадачи
GET_SUBTASK, // subtasks/{id}
GET_ALL_SUBTASKS, // subtasks
POST_NEW_SUBTASK, // subtasks
POST_UPDATE_SUBTASK, // subtasks/{id}
DELETE_SUBTASK, // subtasks{id}

GET_ALL_SUBTASKS_BY_EPIC, // epic/{id}/subtasks

// Эпики
GET_EPIC, // epics/{id}
GET_ALL_EPICS, // epics
POST_NEW_EPIC, // epics
POST_UPDATE_EPIC, // epics/{id}
DELETE_EPIC, // epics/{id}

// История
GET_HISTORY, // history

// Приоритеты
GET_PRIORITIZED, // prioritized

// Пустой
UNKNOWN
}
12 changes: 12 additions & 0 deletions src/data/Property.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package data;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.time.format.DateTimeFormatter;

public interface Property {
Charset CHARSET = StandardCharsets.UTF_8;
DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
int PORT = 8080;

}
1 change: 1 addition & 0 deletions src/data/Task.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public class Task implements Comparable<Task> {
/// Продолжительность задачи в минутах
protected Duration duration;

/// Формат даты и времени
protected static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");

/// Конструктор 1
Expand Down
7 changes: 1 addition & 6 deletions src/manager/FileBackedTaskManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,20 @@
import exception.ManagerSaveException;

import java.io.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;

public class FileBackedTaskManager extends InMemoryTaskManager {
public class FileBackedTaskManager extends InMemoryTaskManager implements Property {

private static File file;
private static FileBackedTaskManager instance;

/// Параметры CSV файла
// 0 1 2 3 4 5 6 7 8
private static final String TABLE_HEADER = "id,type,name,status,description,start,end,duration,epic";
private static final Charset CHARSET = StandardCharsets.UTF_8;
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
private static final String DELIMITER = ",";
private static final String QUOTE = "\"";

Expand Down
47 changes: 21 additions & 26 deletions src/manager/InMemoryTaskManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
import java.util.*;
import java.util.stream.Stream;

class InMemoryTaskManager implements TaskManager {
public class InMemoryTaskManager implements TaskManager {

private static InMemoryTaskManager instance;

/// Хранилище задач
protected final Map<Integer, Task> idToTask = new HashMap<>();
Expand All @@ -32,7 +34,18 @@ private int generateNewId() {
return counter++;
}

/// Получить объект по id с сохранением в историю
/// Конструктор
public InMemoryTaskManager() {
}

/// Получить синглтон класса
public static InMemoryTaskManager getInstance() {
if (instance == null) {
instance = new InMemoryTaskManager();
}
return instance;
}

@Override
public Task get(int id) {
if (idToTask.containsKey(id)) {
Expand All @@ -52,7 +65,6 @@ public Task get(int id) {
return null;
}

/// Получить объект по id без сохранения в историю
@Override
public Task getWithoutHistory(int id) {
if (idToTask.containsKey(id)) {
Expand All @@ -66,7 +78,6 @@ public Task getWithoutHistory(int id) {
return null;
}

/// Получить тип объекта по id
@Override
public Type getType(int id) {
Task taskObject = getWithoutHistory(id);
Expand All @@ -76,7 +87,6 @@ public Type getType(int id) {
return taskObject.getType();
}

/// Получить все объекты из всех хранилищ
public TreeSet<Task> getAll() {
if (counter == 1) {
return new TreeSet<>();
Expand All @@ -89,7 +99,6 @@ public TreeSet<Task> getAll() {
return new TreeSet<>(all);
}

/// Внесение задачи в хранилище по объекту
@Override
public Task addTask(Task newTask) {
if (newTask.getType() != Type.TASK) {
Expand All @@ -116,7 +125,6 @@ public Task addTask(Task newTask) {
return newTask;
}

/// Внесение эпика в хранилище по объекту
@Override
public Epic addEpic(Epic newEpic) {
if (newEpic.getType() != Type.EPIC) {
Expand All @@ -137,7 +145,6 @@ public Epic addEpic(Epic newEpic) {
return newEpic;
}

/// Внесение подзадачи в хранилище по объекту
@Override
public Subtask addSubtask(Subtask newSubtask) {
Integer epicId = newSubtask.getEpicId();
Expand Down Expand Up @@ -172,7 +179,6 @@ public Subtask addSubtask(Subtask newSubtask) {
return newSubtask;
}

/// Получение задачи по ID с сохранением в историю
@Override
public Task getTask(int taskID) {
Task newTask = copyOfTask(taskID);
Expand All @@ -183,7 +189,6 @@ public Task getTask(int taskID) {
return newTask;
}

/// Получение эпика по ID с сохранением в историю
@Override
public Epic getEpic(int epicID) {
Epic newEpic = copyOfEpic(epicID);
Expand All @@ -194,7 +199,6 @@ public Epic getEpic(int epicID) {
return newEpic;
}

/// Получение подзадачи по ID с сохранением в историю
@Override
public Subtask getSubtask(int subTaskID) {
Subtask newSubtask = copyOfSubtask(subTaskID);
Expand Down Expand Up @@ -229,25 +233,22 @@ private Subtask copyOfSubtask(int subtaskId) {
return idToSubtask.get(subtaskId).getCopy();
}

/// Получение списка всех задач в виде объекта
@Override
public List<Task> getAllTasks() {
return idToTask.values().stream().sorted(Task::compareTo).toList();
}

/// Получение списка всех эпиков в виде объекта

@Override
public List<Epic> getAllEpics() {
return idToEpic.values().stream().sorted(Task::compareTo).toList();
}

/// Получение списка всех подзадач в виде объекта
@Override
public List<Subtask> getAllSubtasks() {
return idToSubtask.values().stream().sorted(Task::compareTo).toList();
}

/// Получение списка всех подзадач эпика в виде объекта
@Override
public List<Subtask> getAllSubTasksByEpic(int epicId) {
if (!idToEpic.containsKey(epicId)) {
Expand All @@ -259,7 +260,11 @@ public List<Subtask> getAllSubTasksByEpic(int epicId) {
.toList();
}

/// Обновление задачи по объекту
@Override
public List<Task> getPrioritizedTasks() {
return new ArrayList<>(prioritizedTasks);
}

@Override
public Task updateTask(Task newTask) {
Integer id = newTask.getId();
Expand Down Expand Up @@ -312,7 +317,6 @@ public Task updateTask(Task newTask) {
return newTask;
}

/// Обновление эпика по объекту
@Override
public Epic updateEpic(Epic newEpic) {
Integer id = newEpic.getId();
Expand All @@ -336,7 +340,6 @@ public Epic updateEpic(Epic newEpic) {
return newEpic;
}

/// Обновление подзадачи по объекту
@Override
public Subtask updateSubtask(Subtask newSubtask) {
Integer subtaskId = newSubtask.getId();
Expand Down Expand Up @@ -514,7 +517,6 @@ public List<Task> findIntersections(Task taskObject) {
.toList();
}

/// Удаление задачи по ID
@Override
public boolean removeTask(int taskId) {
if (!idToTask.containsKey(taskId)) {
Expand All @@ -526,7 +528,6 @@ public boolean removeTask(int taskId) {
return true;
}

/// Удаление эпика по ID
@Override
public boolean removeEpic(int epicId) {
if (!idToEpic.containsKey(epicId)) {
Expand All @@ -538,7 +539,6 @@ public boolean removeEpic(int epicId) {
return true;
}

/// Удаление подзадачи по ID
@Override
public boolean removeSubtask(int subtaskId) {
if (!idToSubtask.containsKey(subtaskId)) {
Expand All @@ -556,7 +556,6 @@ public boolean removeSubtask(int subtaskId) {
return true;
}

/// Удаление всех подзадач эпика по ID эпика
@Override
public void removeAllSubtasksByEpic(int epicId) {
if (!idToEpic.containsKey(epicId)) {
Expand All @@ -573,7 +572,6 @@ public void removeAllSubtasksByEpic(int epicId) {
clearEpicTime(epic);
}

/// Удаление всех задач
@Override
public void removeAllTasks() {
for (int taskId : idToTask.keySet()) {
Expand All @@ -583,7 +581,6 @@ public void removeAllTasks() {
idToTask.clear();
}

/// Удаление всех эпиков
@Override
public void removeAllEpics() {
for (int epicId : idToEpic.keySet()) {
Expand All @@ -598,7 +595,6 @@ public void removeAllEpics() {
idToSubtask.clear();
}

/// Удаление всех подзадач
@Override
public void removeAllSubTasks() {
for (int subtaskId : idToSubtask.keySet()) {
Expand All @@ -614,7 +610,6 @@ public void removeAllSubTasks() {
}
}

/// Получить список с историей
@Override
public List<Task> getHistory() {
return historyManager.getHistory();
Expand Down
18 changes: 17 additions & 1 deletion src/manager/Managers.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,20 @@
package manager;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import server.adapters.DurationAdapter;
import server.adapters.LocalDateTimeAdapter;

import java.io.File;
import java.time.Duration;
import java.time.LocalDateTime;

public class Managers {

public static TaskManager getTaskManager(TaskManagerType type) {
switch (type) {
case IN_MEMORY -> {
return new InMemoryTaskManager();
return InMemoryTaskManager.getInstance();
}
case FILE_BACKED -> {
return FileBackedTaskManager.getInstance(new File(
Expand All @@ -24,4 +31,13 @@ public static TaskManager getTaskManager(TaskManagerType type) {
public static HistoryManager getHistoryManager() {
return new InMemoryHistoryManager();
}

public static Gson getGson() {
return new GsonBuilder()
.setPrettyPrinting()
.serializeNulls()
.registerTypeAdapter(LocalDateTime.class, new LocalDateTimeAdapter())
.registerTypeAdapter(Duration.class, new DurationAdapter())
.create();
}
}
Loading