...
1 package database
2
3 import (
4 "context"
5 "log"
6 "time"
7
8 . "codeberg.org/tslocum/sriracha/model"
9 "github.com/jackc/pgx/v5"
10 )
11
12 const LogPageSize = 25
13
14 func (db *DB) AddLog(l *Log) {
15 if l.Message == "" {
16 return
17 }
18
19 var accountID *int
20 if l.Account != nil {
21 accountID = &l.Account.ID
22 }
23 var boardID *int
24 if l.Board != nil {
25 boardID = &l.Board.ID
26 }
27 _, err := db.conn.Exec(context.Background(), "INSERT INTO log VALUES (DEFAULT, $1, $2, $3, $4, $5)",
28 accountID,
29 boardID,
30 time.Now().Unix(),
31 l.Message,
32 l.Changes,
33 )
34 if err != nil {
35 log.Fatalf("failed to insert log: %s", err)
36 }
37 }
38
39 func (db *DB) LogCount() int {
40 var count int
41 err := db.conn.QueryRow(context.Background(), "SELECT COUNT(*) FROM log").Scan(&count)
42 if err == pgx.ErrNoRows {
43 return 0
44 } else if err != nil {
45 log.Fatalf("failed to select log count: %s", err)
46 }
47 return count
48 }
49
50 func (db *DB) LogsByPage(page int) []*Log {
51 offset := page * LogPageSize
52 rows, err := db.conn.Query(context.Background(), "SELECT * FROM log ORDER BY id DESC LIMIT $1 OFFSET $2", LogPageSize, offset)
53 if err != nil {
54 log.Fatalf("failed to select all logs: %s", err)
55 }
56 var logs []*Log
57 var accountIDs []int
58 var boardIDs []int
59 for rows.Next() {
60 l := &Log{}
61 var boardID *int
62 var accountID *int
63 err := rows.Scan(&l.ID, &accountID, &boardID, &l.Timestamp, &l.Message, &l.Changes)
64 if err != nil {
65 log.Fatalf("failed to select all logs: %s", err)
66 }
67 logs = append(logs, l)
68 if accountID == nil {
69 accountIDs = append(accountIDs, 0)
70 } else {
71 accountIDs = append(accountIDs, *accountID)
72 }
73 if boardID == nil {
74 boardIDs = append(boardIDs, 0)
75 } else {
76 boardIDs = append(boardIDs, *boardID)
77 }
78 }
79 for i, l := range logs {
80 accountID := accountIDs[i]
81 boardID := boardIDs[i]
82 if accountID > 0 {
83 l.Account = db.AccountByID(accountID)
84 }
85 if boardID > 0 {
86 l.Board = db.BoardByID(boardID)
87 }
88 }
89 return logs
90 }
91
View as plain text