From 399d2b969d904fc7f3761f879bbf055a7fe1b670 Mon Sep 17 00:00:00 2001 From: Dominic Ferrando Date: Sat, 19 Apr 2025 14:47:11 -0400 Subject: [PATCH] Optimize catalog view --- internal/database/handlers.go | 16 +++++++++++++++- web/main.go | 14 ++++++++------ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/internal/database/handlers.go b/internal/database/handlers.go index 82b97eb..bd3503f 100644 --- a/internal/database/handlers.go +++ b/internal/database/handlers.go @@ -70,7 +70,7 @@ func GetThread(db *sql.DB, threadId int) (Thread, error) { } func GetPosts(db *sql.DB, threadId int) ([]Post, error) { - rows, err := db.Query(`SELECT id, thread_id, author, body, created_at, media_path FROM posts where thread_id = ?`, threadId) + rows, err := db.Query(`SELECT id, thread_id, author, body, created_at, media_path FROM posts WHERE thread_id = ?`, threadId) if err != nil { return nil, err } @@ -89,6 +89,20 @@ func GetPosts(db *sql.DB, threadId int) ([]Post, error) { return result, rows.Err() } +func GetOriginalPost(db *sql.DB, threadId int) (Post, error) { + row := db.QueryRow(`SELECT id, thread_id, author, body, created_at, media_path + FROM posts + WHERE thread_id = ? + ORDER BY created_at ASC LIMIT 1`, threadId) + + var result Post + err := row.Scan(&result.Id, &result.ThreadId, &result.Author, &result.Body, &result.CreatedAt, &result.MediaPath) + if err != nil { + return Post{}, err + } + return result, row.Err() +} + func PutThread(db *sql.DB, boardSlug string, subject string, body string, mediaPath string) error { tx, err := db.Begin() if err != nil { diff --git a/web/main.go b/web/main.go index a378dcf..8de6c33 100644 --- a/web/main.go +++ b/web/main.go @@ -235,24 +235,26 @@ func main() { previews := make([]views.CatalogThreadPreview, 0, len(threads)) for _, thread := range threads { - posts, err := database.GetPosts(db, thread.Id) + op, err := database.GetOriginalPost(db, thread.Id) if err != nil { http.Error(w, "Failed to get posts", http.StatusBadRequest) - log.Printf("GetPosts: %v", err) + log.Printf("GetOriginalPost: %v", err) return } - if len(posts) == 0 || posts[0].MediaPath == "" { + log.Printf("OP: %+v", op) + + if op.MediaPath == "" { http.Error(w, "Malformed thread", http.StatusInternalServerError) - log.Printf("Thread %d has no posts or no OP image", thread.Id) + log.Printf("Thread %d has no OP image", thread.Id) return } previews = append(previews, views.CatalogThreadPreview{ Subject: thread.Subject, - Body: posts[0].Body, + Body: op.Body, ThreadURL: fmt.Sprintf("/%s/threads/%d", slug, thread.Id), - MediaPath: posts[0].MediaPath, + MediaPath: op.MediaPath, }) }