From eb770416d0e5cb24c5c2f2ef1b51a58a7ad67766 Mon Sep 17 00:00:00 2001 From: Dominic Ferrando Date: Wed, 23 Apr 2025 22:24:42 -0400 Subject: [PATCH] Redirect to thread on thread creation --- internal/database/handlers.go | 24 ++++++++++++------------ web/main.go | 12 +++++++++++- web/views/board.templ | 1 + 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/internal/database/handlers.go b/internal/database/handlers.go index 8226fcb..37bbd22 100644 --- a/internal/database/handlers.go +++ b/internal/database/handlers.go @@ -156,10 +156,10 @@ func GetOriginalPost(db *sql.DB, threadId int) (Post, error) { return r, row.Err() } -func PutThread(db *sql.DB, boardSlug string, subject string, body string, mediaPath string, thumbPath string, ip_hash string) error { +func PutThread(db *sql.DB, boardSlug string, subject string, body string, mediaPath string, thumbPath string, ip_hash string) (int, error) { tx, err := db.Begin() if err != nil { - return err + return -1, err } defer tx.Rollback() @@ -168,23 +168,23 @@ func PutThread(db *sql.DB, boardSlug string, subject string, body string, mediaP VALUES (?, ?) RETURNING id`, boardSlug, subject) if err != nil { - return err + return -1, err } - threadId, err := res.LastInsertId() + threadIdStr, err := res.LastInsertId() if err != nil { - return err + return -1, err } - if err := PutPost(tx, boardSlug, int(threadId), body, mediaPath, thumbPath, ip_hash); err != nil { - return err + if err := PutPost(tx, boardSlug, int(threadIdStr), body, mediaPath, thumbPath, ip_hash); err != nil { + return -1, err } row := tx.QueryRow("SELECT COUNT(*) FROM threads WHERE board_slug = ?", boardSlug) var threadCount int if err = row.Scan(&threadCount); err != nil { - return err + return -1, err } if threadCount > util.MAX_THREAD_COUNT { @@ -199,19 +199,19 @@ func PutThread(db *sql.DB, boardSlug string, subject string, body string, mediaP var pruneThreadId int err := row.Scan(&pruneThreadId) if err != nil { - return err + return -1, err } if err := DeleteThread(tx, pruneThreadId); err != nil { - return err + return -1, err } } if err = tx.Commit(); err != nil { - return err + return -1, err } - return nil + return int(threadIdStr), nil } func PutPost(db Queryer, boardSlug string, threadId int, body string, mediaPath string, thumbPath string, ip_hash string) error { diff --git a/web/main.go b/web/main.go index 52e7c8a..8fdb06e 100644 --- a/web/main.go +++ b/web/main.go @@ -239,13 +239,23 @@ func main() { return } - if err := database.PutThread(db, slug, subject, body, savedMediaPath, savedThumbPath, util.HashIp(ip)); err != nil { + threadId, err := database.PutThread(db, slug, subject, body, savedMediaPath, savedThumbPath, util.HashIp(ip)) + if err != nil { http.Error(w, "Failed to create thread", http.StatusInternalServerError) log.Printf("PutThread: %v", err) return } util.BeginCooldown(ip, util.ThreadCooldowns, util.THREAD_COOLDOWN) + + // Check if it's an HTMX request + redirectUrl := fmt.Sprintf("/%s/threads/%d", slug, threadId) + if r.Header.Get("HX-Request") == "true" { + w.Header().Set("HX-Redirect", redirectUrl) + w.WriteHeader(http.StatusOK) + } else { + http.Redirect(w, r, redirectUrl, http.StatusSeeOther) + } }) // CREATE POST diff --git a/web/views/board.templ b/web/views/board.templ index aee25fc..22e64ea 100644 --- a/web/views/board.templ +++ b/web/views/board.templ @@ -37,6 +37,7 @@ templ Board(board database.Board, isAdmin bool) { + [Refresh]