1
0
mirror of https://github.com/MADTeacher/go_basics.git synced 2025-11-23 21:34:47 +02:00
Files
go_basics/part_8/8.4/golang/todo-service/service/routers.go
Stanislav Chernyshev d4e7211d1d Глава 8
Допричесать игру
2025-06-22 21:04:23 +03:00

103 lines
2.6 KiB
Go

package service
import (
"encoding/json"
"fmt"
"golang/todo-service/db"
"net/http"
"github.com/gorilla/mux"
)
type Route struct {
Name string // имя функции обработчика
Method string // тип HTTP-сообщения
Pattern string // шаблон пути
HandlerFunc http.HandlerFunc // ссылка на функцию обработчик
// сигнатура функции должна быть func(ResponseWriter, *Request)
}
var repository *db.SQLiteRepository
func NewRouter(rep *db.SQLiteRepository) *mux.Router {
repository = rep
router := mux.NewRouter().StrictSlash(true)
for _, route := range routes {
var handler http.Handler
handler = route.HandlerFunc
//оборачиваем функцию-обработчик в логгер
handler = Logger(route.HandlerFunc, route.Name)
// handler := route.HandlerFunc
// // // добавляем новый обработчик
router. //HandleFunc(route.Pattern, handler).Methods(route.Method)
Methods(route.Method). // тип HTTP-сообщения
Path(route.Pattern). // шаблон пути
Name(route.Name). // имя функции обработчика
Handler(handler) // ссылка на функцию обработчик
}
router.Use(mux.CORSMethodMiddleware(router))
return router
}
func home(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello Wold in REST API style!!!")
}
var routes = []Route{
{ // домашняя страница
"home",
http.MethodGet,
"/api/v1/todo",
home,
},
{ // удаление проекта по id
"deleteProject",
http.MethodDelete,
"/api/v1/todo/project/del/{id}",
deleteProject,
},
{ // добавление проекта
"addProject",
http.MethodPost,
"/api/v1/todo/project",
addProject,
},
{ // получить все проекты
"getProjects",
http.MethodGet,
"/api/v1/todo/projects",
getProjects,
},
{ // удаление задачи
"deleteTask",
http.MethodDelete,
"/api/v1/todo/task",
deleteTask,
},
{ // получение всех задач или конкретного проекта
"getTask",
http.MethodGet,
"/api/v1/todo/task",
getTask,
},
{ // добавить задачу
"addTask",
http.MethodPost,
"/api/v1/todo/task",
addTask,
},
{ // изменение статуса задачи на «Выполнено»
"doneTask",
http.MethodPut,
"/api/v1/todo/task",
doneTask,
},
}
func errorResponse(w http.ResponseWriter, err ErrorResponse) {
jsonResponse, _ := json.Marshal(err)
w.WriteHeader(err.Code)
w.Write(jsonResponse)
}