add endpoint to update blog article

This commit is contained in:
2026-05-24 16:06:52 +02:00
parent 617f4a7175
commit b22d328c75
3 changed files with 151 additions and 35 deletions
+44 -1
View File
@@ -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)