package Api import ( "encoding/json" "io/ioutil" "log" "net/http" "net/url" "strconv" "time" "git.tovijaeschke.xyz/tovi/SuddenImpactRecords/Api/JsonSerialization" "git.tovijaeschke.xyz/tovi/SuddenImpactRecords/Database" "git.tovijaeschke.xyz/tovi/SuddenImpactRecords/Models" "git.tovijaeschke.xyz/tovi/SuddenImpactRecords/Util" ) func getPosts(w http.ResponseWriter, r *http.Request) { var ( posts []Models.Post returnJson []byte values url.Values page, pageSize int search string err error ) values = r.URL.Query() page, err = strconv.Atoi(values.Get("page")) if err != nil { log.Println("Could not parse page url argument") Util.JsonReturn(w, 500, "An error occured") return } pageSize, err = strconv.Atoi(values.Get("pageSize")) if err != nil { log.Println("Could not parse pageSize url argument") Util.JsonReturn(w, 500, "An error occured") return } search = values.Get("search") posts, err = Database.GetPosts(page, pageSize, search) if err != nil { log.Printf("An error occured: %s\n", err.Error()) Util.JsonReturn(w, 500, "An error occured") return } if len(posts) == 0 { Util.JsonReturn(w, 404, "No more data") return } returnJson, err = json.MarshalIndent(posts, "", " ") if err != nil { Util.JsonReturn(w, 500, "An error occured") return } // Return updated json w.WriteHeader(http.StatusOK) w.Write(returnJson) } func getPost(w http.ResponseWriter, r *http.Request) { var ( postData Models.Post returnJson []byte err error ) postData, err = Util.GetPostById(w, r) if err != nil { return } returnJson, err = json.MarshalIndent(postData, "", " ") if err != nil { Util.JsonReturn(w, 500, "An error occured") return } // Return updated json w.WriteHeader(http.StatusOK) w.Write(returnJson) } func createPost(w http.ResponseWriter, r *http.Request) { var ( requestBody []byte postData Models.Post returnJson []byte err error ) requestBody, err = ioutil.ReadAll(r.Body) if err != nil { log.Printf("Error encountered reading POST body: %s\n", err.Error()) Util.JsonReturn(w, 500, "An error occured") return } postData, err = JsonSerialization.DeserializePost(requestBody, []string{ "id", "links", "images", "videos", "audios", }, false) if err != nil { log.Printf("Invalid data provided to posts API: %s\n", err.Error()) Util.JsonReturn(w, 405, "Invalid data") return } err = Database.CreatePost(&postData) if err != nil { Util.JsonReturn(w, 405, "Invalid data") } returnJson, err = json.MarshalIndent(postData, "", " ") if err != nil { log.Printf("An error occured: %s\n", err.Error()) Util.JsonReturn(w, 500, "An error occured") return } // Return updated json w.WriteHeader(http.StatusOK) w.Write(returnJson) } func updatePost(w http.ResponseWriter, r *http.Request) { var ( postData Models.Post requestBody []byte returnJson []byte id string err error ) id, err = Util.GetPostId(r) if err != nil { log.Printf("Error encountered getting id\n") Util.JsonReturn(w, 500, "An error occured") return } requestBody, err = ioutil.ReadAll(r.Body) if err != nil { log.Printf("Error encountered reading POST body: %s\n", err.Error()) Util.JsonReturn(w, 500, "An error occured") return } postData, err = JsonSerialization.DeserializePost(requestBody, []string{}, true) if err != nil { log.Printf("Invalid data provided to posts API: %s\n", err.Error()) Util.JsonReturn(w, 405, "Invalid data") return } postData, err = Database.UpdatePost(id, &postData) if err != nil { log.Printf("An error occured: %s\n", err.Error()) Util.JsonReturn(w, 500, "An error occured") return } returnJson, err = json.MarshalIndent(postData, "", " ") if err != nil { log.Printf("An error occured: %s\n", err.Error()) Util.JsonReturn(w, 500, "An error occured") return } // Return updated json w.WriteHeader(http.StatusOK) w.Write(returnJson) } func publishPost(w http.ResponseWriter, r *http.Request) { var ( now time.Time = time.Now() postData Models.Post returnJson []byte err error ) postData, err = Util.GetPostById(w, r) if err != nil { log.Printf("Error encountered getting id\n") Util.JsonReturn(w, 500, "An error occured") return } if postData.PublishedAt == nil { postData.PublishedAt = &now } else { postData.PublishedAt = nil } postData, err = Database.UpdatePost(postData.ID.String(), &postData) if err != nil { log.Printf("An error occured: %s\n", err.Error()) Util.JsonReturn(w, 500, "An error occured") return } returnJson, err = json.MarshalIndent(postData, "", " ") if err != nil { log.Printf("An error occured: %s\n", err.Error()) Util.JsonReturn(w, 500, "An error occured") return } // Return updated json w.WriteHeader(http.StatusOK) w.Write(returnJson) } func deletePost(w http.ResponseWriter, r *http.Request) { var ( postData Models.Post err error ) postData, err = Util.GetPostById(w, r) if err != nil { return } err = Database.DeletePost(&postData) if err != nil { log.Printf("An error occured: %s\n", err.Error()) Util.JsonReturn(w, 500, "An error occured") return } // Return updated json w.WriteHeader(http.StatusOK) }