aboutsummaryrefslogtreecommitdiff
path: root/cmd/parser/main.go
diff options
context:
space:
mode:
authorSamuel Johnson <[email protected]>2025-11-25 19:47:20 -0500
committerSamuel Johnson <[email protected]>2025-11-25 19:47:20 -0500
commit3c237fc659c2829042407697ca7aa3e1442a5719 (patch)
tree6557b2faa27eb9880ef96c8755bed3f8a461d2ae /cmd/parser/main.go
parent368a462bc744d8e9084eacfaddeb9afcaf7f7133 (diff)
Add post editing interface
Diffstat (limited to 'cmd/parser/main.go')
-rw-r--r--cmd/parser/main.go55
1 files changed, 39 insertions, 16 deletions
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() {