57 lines
1.9 KiB
Go
57 lines
1.9 KiB
Go
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
|
|
} |