Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ï am too late (second try) #184

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
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