Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
0e504a1
Add files via upload
Lillisipp Mar 25, 2025
de4fa88
Merge remote-tracking branch 'origin/main'
Mar 25, 2025
1cc72f6
исправления
Mar 27, 2025
7f2c66b
без тестов
Apr 9, 2025
5c55b39
без тестов
Apr 9, 2025
b55fb71
без тестов
Apr 11, 2025
ca8262e
изменение на LinkedHashMap
Apr 28, 2025
9e1e0fb
Merge pull request #4 from Lillisipp/sprint_6-solution
Lillisipp Apr 28, 2025
09f5145
Revert "изменение на LinkedHashMap"
Lillisipp Apr 28, 2025
1aaf28c
Merge pull request #5 from Lillisipp/revert-4-sprint_6-solution
Lillisipp Apr 28, 2025
8ac9e79
Изменения
May 5, 2025
7f3d740
Исправлен класс с тестами
May 6, 2025
65f5afe
исправлено на HashMap
May 9, 2025
9938cb7
Merge pull request #12 from Lillisipp/sprint_6-solution
Lillisipp May 9, 2025
69e9fca
Добавлены новые методы и статусы
Lillisipp May 11, 2025
3c01db2
задание выполнено
May 13, 2025
17dffa0
исправления и добавление пакетов
Lillisipp May 14, 2025
612e277
исправления и добавление пакетов
Lillisipp May 14, 2025
c940f87
Merge pull request #13 from Lillisipp/sprint_7-solution-in-file-manager
Lillisipp May 23, 2025
e08635d
в процессе
Lillisipp May 24, 2025
0ef918e
в процессе(2)
Lillisipp May 25, 2025
bb1436b
в процессе(2/1)
Lillisipp May 25, 2025
3353620
без новых тестов
May 28, 2025
3aa9fa1
недоделаные тесты
May 29, 2025
af99204
таск менеджер тетс
May 30, 2025
7fe671d
в процессе(2/1)
Lillisipp Jun 1, 2025
c7ebd05
сделанный 8 спринт
Lillisipp Jun 1, 2025
21a3746
Merge pull request #14 from Lillisipp/sprint_8-solution-time-and-dura…
Lillisipp Jun 2, 2025
883e24d
созданы новые классы для api
Jun 5, 2025
b132d77
6 июня
Jun 6, 2025
66c2755
без тестов
Jun 7, 2025
3109cb8
начало тестов
Jun 7, 2025
dbb5e4b
дуратион читается+ новые классы для тестов
Lillisipp Jun 8, 2025
0769a25
классы для тестов
Lillisipp Jun 8, 2025
1ee09eb
тесты
Jun 8, 2025
a196c85
переделано
Jun 9, 2025
dc78454
дописаный класс эпика
Lillisipp Jun 9, 2025
9cf6843
исправления
Lillisipp Jun 9, 2025
bd35e76
Эпик готов
Lillisipp Jun 9, 2025
8de1632
тесты тасок сделаны
Jun 10, 2025
141ca52
работает
Jun 11, 2025
63172b8
работает2
Jun 11, 2025
c923730
импорты
Jun 11, 2025
51a1091
тесты
Jun 11, 2025
6850497
тесты готовы
Jun 11, 2025
5c8a549
тесты готовы
Lillisipp Jun 11, 2025
7d25215
проверки на пересечения с кодом 406
Lillisipp Jun 11, 2025
62143e1
поправлены исключения 500 в хэндлеры
Lillisipp Jun 11, 2025
be03934
отлов исключений в хендлере
Lillisipp Jun 12, 2025
288a7ff
отлов исключений в хендлере(исправления)+ тест в таск хкендлере
Lillisipp Jun 12, 2025
3092507
готово
Lillisipp Jun 12, 2025
155e326
готово
Lillisipp Jun 12, 2025
3d3f2bd
Merge pull request #15 from Lillisipp/sprint_9-solution-http-api
Lillisipp Jun 20, 2025
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
Binary file added .DS_Store
Binary file not shown.
8 changes: 8 additions & 0 deletions .idea/inspectionProfiles/Project_Default.xml

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

11 changes: 11 additions & 0 deletions .idea/libraries/lib.xml

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

124 changes: 124 additions & 0 deletions .idea/uiDesigner.xml

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

6 changes: 6 additions & 0 deletions .idea/vcs.xml

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

94 changes: 94 additions & 0 deletions java-kanban.iml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,102 @@
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/annotations/24.0.0/annotations-24.0.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library" scope="TEST">
<library name="JUnit5.8.1">
<CLASSES>
<root url="jar://$MODULE_DIR$/lib/junit-jupiter-5.8.1.jar!/" />
<root url="jar://$MODULE_DIR$/lib/junit-jupiter-api-5.8.1.jar!/" />
<root url="jar://$MODULE_DIR$/lib/opentest4j-1.2.0.jar!/" />
<root url="jar://$MODULE_DIR$/lib/junit-platform-commons-1.8.1.jar!/" />
<root url="jar://$MODULE_DIR$/lib/apiguardian-api-1.1.2.jar!/" />
<root url="jar://$MODULE_DIR$/lib/junit-jupiter-params-5.8.1.jar!/" />
<root url="jar://$MODULE_DIR$/lib/junit-jupiter-engine-5.8.1.jar!/" />
<root url="jar://$MODULE_DIR$/lib/junit-platform-engine-1.8.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="JUnit4">
<CLASSES>
<root url="jar://$MODULE_DIR$/lib/junit-4.13.1.jar!/" />
<root url="jar://$MODULE_DIR$/lib/hamcrest-core-1.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$MODULE_DIR$/lib/junit-jupiter-5.8.1.jar!/" />
<root url="jar://$MODULE_DIR$/lib/junit-jupiter-api-5.8.1.jar!/" />
<root url="jar://$MODULE_DIR$/lib/opentest4j-1.2.0.jar!/" />
<root url="jar://$MODULE_DIR$/lib/junit-platform-commons-1.8.1.jar!/" />
<root url="jar://$MODULE_DIR$/lib/apiguardian-api-1.1.2.jar!/" />
<root url="jar://$MODULE_DIR$/lib/junit-jupiter-params-5.8.1.jar!/" />
<root url="jar://$MODULE_DIR$/lib/junit-jupiter-engine-5.8.1.jar!/" />
<root url="jar://$MODULE_DIR$/lib/junit-platform-engine-1.8.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library" scope="TEST">
<library name="JUnit5.8.1">
<CLASSES>
<root url="jar://$MODULE_DIR$/lib/junit-jupiter-5.8.1.jar!/" />
<root url="jar://$MODULE_DIR$/lib/junit-jupiter-api-5.8.1.jar!/" />
<root url="jar://$MODULE_DIR$/lib/opentest4j-1.2.0.jar!/" />
<root url="jar://$MODULE_DIR$/lib/junit-platform-commons-1.8.1.jar!/" />
<root url="jar://$MODULE_DIR$/lib/apiguardian-api-1.1.2.jar!/" />
<root url="jar://$MODULE_DIR$/lib/junit-jupiter-params-5.8.1.jar!/" />
<root url="jar://$MODULE_DIR$/lib/junit-jupiter-engine-5.8.1.jar!/" />
<root url="jar://$MODULE_DIR$/lib/junit-platform-engine-1.8.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="library" name="lib" level="project" />
<orderEntry type="module-library" scope="TEST">
<library name="JUnit5.8.1">
<CLASSES>
<root url="jar://$MODULE_DIR$/lib/junit-jupiter-5.8.1.jar!/" />
<root url="jar://$MODULE_DIR$/lib/junit-jupiter-api-5.8.1.jar!/" />
<root url="jar://$MODULE_DIR$/lib/opentest4j-1.2.0.jar!/" />
<root url="jar://$MODULE_DIR$/lib/junit-platform-commons-1.8.1.jar!/" />
<root url="jar://$MODULE_DIR$/lib/apiguardian-api-1.1.2.jar!/" />
<root url="jar://$MODULE_DIR$/lib/junit-jupiter-params-5.8.1.jar!/" />
<root url="jar://$MODULE_DIR$/lib/junit-jupiter-engine-5.8.1.jar!/" />
<root url="jar://$MODULE_DIR$/lib/junit-platform-engine-1.8.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library" exported="">
<library>
<CLASSES>
<root url="jar://$MODULE_DIR$/../m1-t25-api/lib/gson-2.9.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
</component>
</module>
103 changes: 103 additions & 0 deletions src/ru/yandex/task/manager/apimanagers/BaseHttpHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
package ru.yandex.task.manager.apimanagers;

import com.google.gson.Gson;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import ru.yandex.task.manager.exception.IntersectionException;
import ru.yandex.task.manager.managers.TaskManager;
import ru.yandex.task.manager.model.Subtask;
import ru.yandex.task.manager.utils.GsonUtils;

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

public abstract class BaseHttpHandler implements HttpHandler {
private static final String UPDATED_SUCCESSFULLY = "TASK UPDATED SUCCESSFULLY";
private static final String ADDED_SUCCESSFULLY = "SUBTASK ADDED SUCCESSFULLY";
private static final String INTERNAL_SERVER_ERROR = "Error occurred during request";
protected static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;

protected final Gson gson = GsonUtils.getGson();

protected TaskManager manager;

public BaseHttpHandler(TaskManager manager) {
this.manager = manager;
}

protected void sendText(HttpExchange exchange, String text) throws IOException {
byte[] resp = text.getBytes(DEFAULT_CHARSET);
exchange.getResponseHeaders().add("Content-Type", "application/json;charset=utf-8");
exchange.sendResponseHeaders(200, resp.length);
exchange.getResponseBody().write(resp);
exchange.close();
}

protected void sendCode(HttpExchange h, int code) throws IOException {
h.sendResponseHeaders(code, 0);
h.close();
}

protected void sendBadRequest(HttpExchange exchange, String response) throws IOException {
byte[] responseBytes = response.getBytes(DEFAULT_CHARSET);
exchange.sendResponseHeaders(400, responseBytes.length);
exchange.getResponseBody().write(responseBytes);
}

protected void sendNotFound(HttpExchange exchange) throws IOException {
exchange.sendResponseHeaders(404, 0);
}

protected void sendMethodNotAllowed(HttpExchange exchange) throws IOException {
exchange.sendResponseHeaders(405, 0);
}

protected void sendHasInteractions(HttpExchange exchange) throws IOException {
exchange.sendResponseHeaders(406, -1);
exchange.getResponseBody().close();
}

protected void sendServerError(HttpExchange exchange) throws IOException {
byte[] responseBytes = INTERNAL_SERVER_ERROR.getBytes(DEFAULT_CHARSET);
exchange.sendResponseHeaders(500, responseBytes.length);
exchange.getResponseBody().write(responseBytes);
}

private void sendUpdatedSuccessfully(HttpExchange exchange) throws IOException {
byte[] responseBytes = UPDATED_SUCCESSFULLY.getBytes(DEFAULT_CHARSET);
exchange.sendResponseHeaders(201, responseBytes.length);
exchange.getResponseBody().write(responseBytes);
}

protected void sendUpdateResult(HttpExchange exchange, Subtask incomeSub) throws IOException {
try {
manager.updateSubtask(incomeSub);
sendUpdatedSuccessfully(exchange);
} catch (IntersectionException e) {
sendHasInteractions(exchange);
}
}

protected void sendAddResult(HttpExchange exchange, Subtask subtask) throws IOException {
try {
manager.addSubtask(subtask);
byte[] responseBytes = ADDED_SUCCESSFULLY.getBytes(DEFAULT_CHARSET);
exchange.sendResponseHeaders(201, responseBytes.length);
exchange.getResponseBody().write(responseBytes);
} catch (IntersectionException e) {
sendHasInteractions(exchange);
} catch (Exception e) {
sendBadRequest(exchange, e.getMessage());
}
}

protected int parseId(String path) {
String id = path.replaceAll("\\D*", "");
try {
return Integer.parseInt(id);
} catch (NumberFormatException e) {
return -1;
}
}
}
Loading
Loading