...
1 package database
2
3 import (
4 "context"
5 "log"
6
7 . "codeberg.org/tslocum/sriracha/model"
8 "github.com/jackc/pgx/v5"
9 )
10
11 func (db *DB) AddPage(p *Page) {
12 _, err := db.conn.Exec(context.Background(), "INSERT INTO page VALUES (DEFAULT, $1, $2)",
13 p.Path,
14 p.Content,
15 )
16 if err != nil {
17 log.Fatalf("failed to insert page: %s", err)
18 }
19 err = db.conn.QueryRow(context.Background(), "SELECT id FROM page WHERE path = $1", p.Path).Scan(&p.ID)
20 if err != nil {
21 log.Fatalf("failed to select id of added page: %s", err)
22 } else if p.ID == 0 {
23 log.Fatal("failed to select id of added page")
24 }
25 }
26
27 func (db *DB) PageByID(id int) *Page {
28 p := &Page{}
29 err := scanPage(p, db.conn.QueryRow(context.Background(), "SELECT * FROM page WHERE id = $1", id))
30 if err == pgx.ErrNoRows {
31 return nil
32 } else if err != nil {
33 log.Fatalf("failed to select page: %s", err)
34 }
35 return p
36 }
37
38 func (db *DB) PageByPath(path string) *Page {
39 p := &Page{}
40 err := scanPage(p, db.conn.QueryRow(context.Background(), "SELECT * FROM page WHERE path = $1", path))
41 if err == pgx.ErrNoRows {
42 return nil
43 } else if err != nil {
44 log.Fatalf("failed to select page: %s", err)
45 }
46 return p
47 }
48
49 func (db *DB) AllPages() []*Page {
50 rows, err := db.conn.Query(context.Background(), "SELECT * FROM page ORDER BY path ASC")
51 if err != nil {
52 log.Fatalf("failed to select all pages: %s", err)
53 }
54 var pages []*Page
55 for rows.Next() {
56 p := &Page{}
57 err := scanPage(p, rows)
58 if err != nil {
59 log.Fatalf("failed to select all pages: %s", err)
60 }
61 pages = append(pages, p)
62 }
63 return pages
64 }
65
66 func (db *DB) UpdatePage(p *Page) {
67 if p.ID <= 0 {
68 log.Fatalf("invalid page ID %d", p.ID)
69 }
70 _, err := db.conn.Exec(context.Background(), "UPDATE page SET path = $1, content = $2 WHERE id = $3",
71 p.Path,
72 p.Content,
73 p.ID,
74 )
75 if err != nil {
76 log.Fatalf("failed to update page: %s", err)
77 }
78 }
79
80 func (db *DB) DeletePage(id int) {
81 if id == 0 {
82 return
83 }
84 _, err := db.conn.Exec(context.Background(), "DELETE FROM page WHERE id = $1", id)
85 if err != nil {
86 log.Fatalf("failed to delete page: %s", err)
87 }
88 }
89
90 func scanPage(p *Page, row pgx.Row) error {
91 return row.Scan(
92 &p.ID,
93 &p.Path,
94 &p.Content,
95 )
96 }
97
View as plain text