Skip to content
Open
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
72 changes: 70 additions & 2 deletions precode.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package main

import (
"encoding/json"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

бинарник __debug_bin2354163408.exe - стоит удалить из ветки

"fmt"
"net/http"

Expand Down Expand Up @@ -40,13 +41,80 @@ var tasks = map[string]Task{
}

// Ниже напишите обработчики для каждого эндпоинта
// ...
// 1 обработчик
func getAllTasks(w http.ResponseWriter, r *http.Request) {
// сериализуем данные из мапы tasks
resp, err := json.Marshal(tasks)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}

// в заголовок записываем тип контента, у нас это данные в формате JSON
w.Header().Set("Content-Type", "application/json")
// так как все успешно, то статус OK
w.WriteHeader(http.StatusOK)
// записываем сериализованные в JSON данные в тело ответа
w.Write(resp)
}

// 2 обработчик
func addTask(w http.ResponseWriter, r *http.Request) {
var task Task
if err := json.NewDecoder(r.Body).Decode(&task); err != nil {
http.Error(w, "Неверный формат данных", http.StatusBadRequest)
return
}
// прверка, существует ли задача с таким ID
if _, ok := tasks[task.ID]; ok {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

отлично что добавил эту проверку

http.Error(w, "Задача с таким ID уже существует", http.StatusBadRequest)
return
}
tasks[task.ID] = task
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusCreated)
}

// 3 обработчик
func getTask(w http.ResponseWriter, r *http.Request) {
id := chi.URLParam(r, "id")
task, ok := tasks[id]
if !ok {
http.Error(w, "Задача не найдена", http.StatusBadRequest)
return
}
resp, err := json.Marshal(task)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
w.Write(resp)
}

// 4 обработчик

func deleteTask(w http.ResponseWriter, r *http.Request) {
id := chi.URLParam(r, "id")

if _, ok := tasks[id]; !ok {
http.Error(w, "Задача не найдена", http.StatusBadRequest)
return
}
delete(tasks, id)
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

тут нужно еще

добавить заголовок "Content-Type", "application/json"
и лучше явно вернуть код 200


func main() {
r := chi.NewRouter()

// здесь регистрируйте ваши обработчики
// ...
r.Get("/tasks", getAllTasks)
r.Post("/tasks", addTask)
r.Get("/tasks/{id}", getTask)
r.Delete("/tasks/{id}", deleteTask)

if err := http.ListenAndServe(":8080", r); err != nil {
fmt.Printf("Ошибка при запуске сервера: %s", err.Error())
Expand Down