aboutsummaryrefslogtreecommitdiff
path: root/src/server/handlers/posts.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/handlers/posts.go')
-rw-r--r--src/server/handlers/posts.go60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/server/handlers/posts.go b/src/server/handlers/posts.go
new file mode 100644
index 0000000..00144db
--- /dev/null
+++ b/src/server/handlers/posts.go
@@ -0,0 +1,60 @@
+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)
+}