From 3c237fc659c2829042407697ca7aa3e1442a5719 Mon Sep 17 00:00:00 2001 From: Samuel Johnson Date: Tue, 25 Nov 2025 19:47:20 -0500 Subject: Add post editing interface --- cmd/parser/main.go | 55 ++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 16 deletions(-) (limited to 'cmd/parser') diff --git a/cmd/parser/main.go b/cmd/parser/main.go index 3d0b132..44fca42 100644 --- a/cmd/parser/main.go +++ b/cmd/parser/main.go @@ -32,56 +32,79 @@ func writeErr(w http.ResponseWriter, errcode int, msg string) { func mdServe(w http.ResponseWriter, r *http.Request) { if r.Method != "POST" { - writeErr(w, 405, "Method Not Allowed") + writeErr(w, http.StatusMethodNotAllowed, "Method Not Allowed") return } - + err := r.ParseMultipartForm(4 << 20) if err != nil { - writeErr(w, 500, "Failed to retrieve form data") + writeErr(w, http.StatusUnprocessableEntity, fmt.Sprintf("Failed to retrieve form data: %v", err)) return } - var buf bytes.Buffer + var longBuf bytes.Buffer + var shortBuf bytes.Buffer + md := r.Form.Get("raw") + userId := r.Form.Get("user_id") - md := r.PostForm.Get("raw") + shouldCreateShort := len(md) > 255 - err = mdParser.Convert([]byte(md), &buf) + err = mdParser.Convert([]byte(md), &longBuf) if err != nil { - writeErr(w, 500, fmt.Sprintf("Failed to compile markdown into html: %v", err)) + writeErr(w, http.StatusUnprocessableEntity, fmt.Sprintf("Failed to compile markdown into html: %v", err)) return } + + var shortMd string + if shouldCreateShort { + shortMd = md[0:249] + err = mdParser.Convert([]byte(shortMd), &shortBuf) + + if err != nil { + writeErr(w, http.StatusUnprocessableEntity, fmt.Sprintf("Failed to compile markdown into html: %v", err)) + return + } + } ctx, cancel := context.WithTimeout(r.Context(), 5 * time.Second) defer cancel() tx, err := db.BeginTx(ctx, nil) if err != nil { - writeErr(w, 500, fmt.Sprintf("Failed to initialize transaction: %v", err)) + writeErr(w, http.StatusInternalServerError, fmt.Sprintf("Failed to initialize transaction: %v", err)) return } defer tx.Rollback() - stmt, err := tx.PrepareContext(ctx, "INSERT INTO posts (name, content) VALUES ($1, $2);") + stmt, err := tx.PrepareContext(ctx, "INSERT INTO posts (user_id, brief, content) VALUES ($1, $2, $3);") if err != nil { - writeErr(w, 500, fmt.Sprintf("Failed to prepare DB statement: %v", err)) + writeErr(w, http.StatusInternalServerError, fmt.Sprintf("Failed to prepare DB statement: %v", err)) return } defer stmt.Close() - _, err = stmt.ExecContext(ctx, os.Getenv("webmaster"), buf.Bytes()) + userIdInt, err := strconv.ParseUint(userId, 10, 64) if err != nil { - writeErr(w, 500, fmt.Sprintf("Failed to execute statement: %v", err)) + writeErr(w, http.StatusUnprocessableEntity, fmt.Sprintf("Failed to parse userId: %v\n", err)) return } - err = tx.Commit() + if shouldCreateShort { + _, err = stmt.ExecContext(ctx, userIdInt, shortBuf.Bytes(), longBuf.Bytes()) + } else { + _, err = stmt.ExecContext(ctx, userIdInt, longBuf.Bytes(), longBuf.Bytes()) + } + if err != nil { - writeErr(w, 500, fmt.Sprintf("Failed to commit DB transaction: %v", err)) + writeErr(w, http.StatusInternalServerError, fmt.Sprintf("Failed to execute statement: %v", err)) + return } - w.WriteHeader(200) - w.Write([]byte("Successfully parsed and stored markdown")) + err = tx.Commit() + if err != nil { + writeErr(w, http.StatusInternalServerError, fmt.Sprintf("Failed to commit DB transaction: %v", err)) + return + } } func main() { -- cgit v1.2.3