package handlers import ( "encoding/json" "net/http" "strconv" "server/database" "server/helper" ) type postsResponse struct { Posts []database.Post `json:"posts"` } func Posts(writer http.ResponseWriter, request *http.Request) { if request.Method != "GET" { helper.WriteErrorJson("expected GET method", writer, http.StatusBadRequest) return } page, err := strconv.Atoi(request.URL.Query().Get("page")) if err != nil { helper.WriteErrorJson("expected page parameter", writer, http.StatusBadRequest) return } if page < 0 { helper.WriteErrorJson("expected page parameter >= 0", writer, http.StatusBadRequest) return } amount, err := strconv.Atoi(request.URL.Query().Get("amount")) if err != nil { helper.WriteErrorJson("expected amount parameter", writer, http.StatusBadRequest) return } if amount <= 0 { helper.WriteErrorJson("expected amount parameter > 0", writer, http.StatusBadRequest) return } subreact := request.URL.Query().Get("subreact") if !helper.IsValidSubreact(subreact, writer) { return } posts, err := database.GetPosts(subreact, page, amount) if err != nil { helper.WriteInternalErrorJson(err, writer) return } resp, err := json.Marshal(postsResponse{Posts: posts}) if err != nil { helper.WriteInternalErrorJson(err, writer) return } writer.Write(resp) }