FILE / Unmei/Backend

v1/news_routes.go

Исходный файл и его история в репозитории.
FILE 104b1404b0ff906862052f6728ff3b3384e48c8c
Files
Backend/v1/news_routes.go
T
2021-05-02 16:04:45 +03:00

108 lines
1.9 KiB
Go
Executable File

package v1
import (
"encoding/json"
"github.com/gorilla/mux"
"net/http"
"strconv"
)
func RegisterNewsRoutes(r *mux.Router) {
r.HandleFunc("/news", resolveNews).Methods("GET", "OPTIONS", "POST")
r.HandleFunc("/news/{id:[0-9]+}", resolvePost).Methods("GET", "OPTIONS", "PUT", "DELETE")
}
func resolveNews(w http.ResponseWriter, r *http.Request) {
if r.Method == http.MethodGet {
q := r.URL.Query()
offset, _ := strconv.Atoi(q.Get("offset"))
limit, _ := strconv.Atoi(q.Get("limit"))
if limit == 0 {
limit = 20
}
total, err := FetchTotalNews()
if err != nil {
Error(w, err)
return
}
pagination := map[string]interface{}{
"offset": offset,
"limit": limit,
"total": total,
}
news, err := FetchNews(offset, limit)
ResponsePagination(w, err, news, pagination)
} else if r.Method == http.MethodPost {
body, err := ReadBody(r)
if err != nil {
Error(w, err)
return
}
post := new(Post)
err = json.Unmarshal(body, post)
if err != nil {
Error(w, err)
return
}
uid, err := GetCurrentUserID(r)
if err != nil {
Error(w, err)
return
}
post.AuthorID = uid
createdPost, err := CreatePost(post)
Response(w, err, createdPost)
}
}
func resolvePost(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
id, _ := strconv.Atoi(vars["id"])
if r.Method == http.MethodGet {
post, err := FetchPost(id)
Response(w, err, post)
} else if r.Method == http.MethodPut {
body, err := ReadBody(r)
if err != nil {
Error(w, err)
return
}
post, err := FetchPost(id)
if err != nil {
Error(w, err)
return
}
err = json.Unmarshal(body, post)
if err != nil {
Error(w, err)
return
}
err = UpdatePost(post)
if err != nil {
Error(w, err)
return
}
w.WriteHeader(http.StatusNoContent)
} else if r.Method == http.MethodDelete {
err := DeletePost(id)
if err != nil {
Error(w, err)
return
}
w.WriteHeader(http.StatusNoContent)
}
}