Implement dynamically getting board data
This commit is contained in:
Binary file not shown.
@@ -0,0 +1,34 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
)
|
||||
|
||||
func GetBoards(db *sql.DB) ([]Board, error) {
|
||||
rows, err := db.Query(`select id, name, slug, tag from boards order by slug`)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var result []Board
|
||||
for rows.Next() {
|
||||
var b Board
|
||||
err := rows.Scan(&b.Id, &b.Name, &b.Slug, &b.Tag)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result = append(result, b)
|
||||
}
|
||||
|
||||
return result, rows.Err()
|
||||
}
|
||||
|
||||
func GetBoard(db *sql.DB, slug string) (Board, error) {
|
||||
row := db.QueryRow(`SELECT id, name, slug, tag FROM boards WHERE slug = ?`, slug)
|
||||
|
||||
var result Board
|
||||
row.Scan(&result.Id, &result.Name, &result.Slug, &result.Tag)
|
||||
|
||||
return result, row.Err()
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package database
|
||||
|
||||
import "time"
|
||||
|
||||
type Board struct {
|
||||
Id int
|
||||
Slug string
|
||||
Name string
|
||||
Tag string
|
||||
}
|
||||
|
||||
type Thread struct {
|
||||
Id int
|
||||
BoardId int
|
||||
Subject string
|
||||
CreatedAt time.Time
|
||||
BumpedAt time.Time
|
||||
}
|
||||
|
||||
type Post struct {
|
||||
Id int
|
||||
ThreadId int
|
||||
Author string
|
||||
Body string
|
||||
CreatedAt time.Time
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
PRAGMA foreign_keys = ON;
|
||||
|
||||
-- ======================
|
||||
-- Tables
|
||||
-- ======================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS boards (
|
||||
id INTEGER PRIMARY KEY,
|
||||
slug TEXT NOT NULL UNIQUE,
|
||||
name TEXT NOT NULL,
|
||||
tag TEXT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS threads (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
board_id INTEGER NOT NULL,
|
||||
subject TEXT NOT NULL DEFAULT '',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
bumped_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (board_id) REFERENCES boards(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS posts (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
thread_id INTEGER NOT NULL,
|
||||
author TEXT DEFAULT 'Anonymous',
|
||||
body TEXT NOT NULL,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (thread_id) REFERENCES threads(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
-- ======================
|
||||
-- Seed data
|
||||
-- ======================
|
||||
|
||||
-- Boards
|
||||
|
||||
INSERT INTO boards (slug, name, tag) VALUES
|
||||
('comfy', 'Comfy', 'Be comfy, fren'),
|
||||
('g', 'Technology', 'Beep boop');
|
||||
|
||||
-- Welcome threads
|
||||
|
||||
-- /comfy/
|
||||
INSERT INTO threads (board_id, subject) VALUES (
|
||||
(SELECT id FROM boards WHERE slug='comfy'),
|
||||
'Welcome to /comfy/.'
|
||||
);
|
||||
INSERT INTO posts (thread_id, body) VALUES (
|
||||
(SELECT id FROM threads WHERE subject LIKE 'Welcome to /comfy/.%'),
|
||||
'Post comfy. Be nice.'
|
||||
);
|
||||
Reference in New Issue
Block a user