package models import ( "database/sql" "time" ) type Thread struct { ID int BoardID int Title string Type string // "classic", "chat", "question" CreatedAt time.Time UpdatedAt time.Time CreatedByUserID int AcceptedAnswerPostID *int } func GetThreadByID(db *sql.DB, id int) (*Thread, error) { query := "SELECT id, board_id, title, type, created_at, updated_at, created_by_user_id, accepted_answer_post_id FROM threads WHERE id = ?" row := db.QueryRow(query, id) thread := &Thread{} err := row.Scan(&thread.ID, &thread.BoardID, &thread.Title, &thread.Type, &thread.CreatedAt, &thread.UpdatedAt, &thread.CreatedByUserID, &thread.AcceptedAnswerPostID) if err == sql.ErrNoRows { return nil, nil } if err != nil { return nil, err } return thread, nil } func GetThreadsByBoardID(db *sql.DB, boardID int) ([]Thread, error) { query := "SELECT id, board_id, title, type, created_at, updated_at, created_by_user_id, accepted_answer_post_id FROM threads WHERE board_id = ? ORDER BY updated_at DESC" rows, err := db.Query(query, boardID) if err != nil { return nil, err } defer rows.Close() var threads []Thread for rows.Next() { thread := Thread{} err := rows.Scan(&thread.ID, &thread.BoardID, &thread.Title, &thread.Type, &thread.CreatedAt, &thread.UpdatedAt, &thread.CreatedByUserID, &thread.AcceptedAnswerPostID) if err != nil { return nil, err } threads = append(threads, thread) } return threads, nil } func CreateThread(db *sql.DB, thread Thread) error { query := "INSERT INTO threads (board_id, title, type, created_by_user_id, created_at, updated_at) VALUES (?, ?, ?, ?, NOW(), NOW())" _, err := db.Exec(query, thread.BoardID, thread.Title, thread.Type, thread.CreatedByUserID) return err }