add endpoint to update blog article
This commit is contained in:
+44
-1
@@ -41,6 +41,8 @@ type ArticleFile struct {
|
||||
Data []byte
|
||||
}
|
||||
|
||||
const maxArticleFormSize = 10 * 1024 * 1024
|
||||
|
||||
func ParseArticle(reader io.Reader, filePrefix string) (*Article, error) {
|
||||
tarFiles := make(map[string][]byte)
|
||||
tarReader := tar.NewReader(reader)
|
||||
@@ -197,7 +199,7 @@ func (h *ApiHandler) ServeBlogGet(writer http.ResponseWriter, request *http.Requ
|
||||
}
|
||||
|
||||
func (h *ApiHandler) ServeBlogPut(writer http.ResponseWriter, request *http.Request) {
|
||||
err := request.ParseMultipartForm(10 * 1024 * 1024)
|
||||
err := request.ParseMultipartForm(maxArticleFormSize)
|
||||
if err != nil {
|
||||
WriteError(writer, http.StatusBadRequest, "failed to parse multipart form", nil)
|
||||
return
|
||||
@@ -259,6 +261,47 @@ func (h *ApiHandler) ServeBlogGetSingle(writer http.ResponseWriter, request *htt
|
||||
WriteResponse(writer, http.StatusOK, article)
|
||||
}
|
||||
|
||||
func (h *ApiHandler) ServeBlogPatch(writer http.ResponseWriter, request *http.Request) {
|
||||
idStr := request.PathValue("id")
|
||||
id, err := strconv.ParseInt(idStr, 10, 64)
|
||||
if err != nil {
|
||||
WriteError(writer, http.StatusBadRequest, "invalid id", err)
|
||||
return
|
||||
}
|
||||
|
||||
err = request.ParseMultipartForm(maxArticleFormSize)
|
||||
if err != nil {
|
||||
WriteError(writer, http.StatusBadRequest, "failed to parse multipart form", nil)
|
||||
return
|
||||
}
|
||||
|
||||
file, _, err := request.FormFile("file")
|
||||
if err != nil {
|
||||
WriteError(writer, http.StatusBadRequest, "failed to parse file", nil)
|
||||
return
|
||||
}
|
||||
defer func() {
|
||||
_ = file.Close()
|
||||
}()
|
||||
|
||||
article, err := ParseArticle(file, "/api/blog/"+strconv.FormatInt(id, 10)+"/file/")
|
||||
if err != nil {
|
||||
WriteError(writer, http.StatusInternalServerError, "failed to parse article: "+err.Error(), nil)
|
||||
return
|
||||
}
|
||||
|
||||
article.Id = id
|
||||
err = h.db.UpdateBlogArticle(article)
|
||||
if err != nil {
|
||||
WriteError(writer, http.StatusInternalServerError, "failed to write database", err)
|
||||
return
|
||||
}
|
||||
|
||||
log.Printf("updated blog article '%s' with id %d", article.Title, article.Id)
|
||||
|
||||
WriteResponse(writer, http.StatusOK, map[string]interface{}{})
|
||||
}
|
||||
|
||||
func (h *ApiHandler) ServeBlogDelete(writer http.ResponseWriter, request *http.Request) {
|
||||
idStr := request.PathValue("id")
|
||||
id, err := strconv.ParseInt(idStr, 10, 64)
|
||||
|
||||
Reference in New Issue
Block a user