...

Source file src/codeberg.org/tslocum/sriracha/internal/database/database_log.go

Documentation: codeberg.org/tslocum/sriracha/internal/database

     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