From f0a90c7370c6a5f10d104968b5b3d8e34a3f446e Mon Sep 17 00:00:00 2001 From: Maxim Buluchevskiy Date: Wed, 21 Aug 2024 11:57:09 +0500 Subject: [PATCH] =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B2=D1=8B=D0=B9=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC=D0=BC=D0=B8=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- precode.go | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/precode.go b/precode.go index d082d83..6e706f0 100644 --- a/precode.go +++ b/precode.go @@ -1,6 +1,7 @@ package main import ( + "encoding/json" "fmt" "net/http" @@ -40,13 +41,69 @@ var tasks = map[string]Task{ } // Ниже напишите обработчики для каждого эндпоинта -// ... + +// Получение всех задач +func getTasks(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + if err := json.NewEncoder(w).Encode(tasks); err != nil { + http.Error(w, "Ошибка при кодировании задач", http.StatusInternalServerError) + return + } + w.WriteHeader(http.StatusOK) +} + +// Отправка задачи на сервер +func createTask(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + var task Task + if err := json.NewDecoder(r.Body).Decode(&task); err != nil { + http.Error(w, "Некорректные данные в запросе", http.StatusBadRequest) + return + } + if task.ID == "" { + http.Error(w, "Отсутствует ID задачи", http.StatusBadRequest) + return + } + tasks[task.ID] = task + w.WriteHeader(http.StatusCreated) +} + +// Получение задачи по ID +func getTaskByID(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + id := chi.URLParam(r, "id") + task, exists := tasks[id] + if !exists { + http.Error(w, "Задача не найдена", http.StatusBadRequest) + return + } + if err := json.NewEncoder(w).Encode(task); err != nil { + http.Error(w, "Ошибка при кодировании задачи", http.StatusInternalServerError) + return + } + w.WriteHeader(http.StatusOK) +} + +// Удаление задачи по ID +func deleteTaskByID(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + id := chi.URLParam(r, "id") + if _, exists := tasks[id]; !exists { + http.Error(w, "Задача не найдена", http.StatusBadRequest) + return + } + delete(tasks, id) + w.WriteHeader(http.StatusOK) +} func main() { r := chi.NewRouter() // здесь регистрируйте ваши обработчики - // ... + r.Get("/tasks", getTasks) + r.Post("/tasks", createTask) + r.Get("/tasks/{id}", getTaskByID) + r.Delete("/tasks/{id}", deleteTaskByID) if err := http.ListenAndServe(":8080", r); err != nil { fmt.Printf("Ошибка при запуске сервера: %s", err.Error())