main pico / pkg / db / postgres / access_logs.go
Antonio Mika  ·  2026-10-10
 1package postgres
 2
 3import (
 4	"time"
 5
 6	"github.com/picosh/pico/pkg/db"
 7)
 8
 9func (me *PsqlDB) FindAccessLogs(userID string, fromDate *time.Time) ([]*db.AccessLog, error) {
10	var logs []*db.AccessLog
11	err := me.Db.Select(&logs, `SELECT * FROM access_logs WHERE user_id=$1 AND created_at >= $2 ORDER BY created_at ASC`, userID, fromDate)
12	if err != nil {
13		return nil, err
14	}
15	return logs, nil
16}
17
18func (me *PsqlDB) FindAccessLogsByPubkey(pubkey string, fromDate *time.Time) ([]*db.AccessLog, error) {
19	var logs []*db.AccessLog
20	err := me.Db.Select(&logs, `SELECT * FROM access_logs WHERE pubkey=$1 AND created_at >= $2 ORDER BY created_at ASC`, pubkey, fromDate)
21	if err != nil {
22		return nil, err
23	}
24	return logs, nil
25}
26
27func (me *PsqlDB) FindPubkeysInAccessLogs(userID string) ([]string, error) {
28	var pubkeys []string
29	err := me.Db.Select(&pubkeys, `SELECT DISTINCT(pubkey) FROM access_logs WHERE user_id=$1`, userID)
30	if err != nil {
31		return nil, err
32	}
33	return pubkeys, nil
34}
35
36func (me *PsqlDB) InsertAccessLog(log *db.AccessLog) error {
37	_, err := me.Db.Exec(
38		`INSERT INTO access_logs (user_id, service, pubkey, identity) VALUES ($1, $2, $3, $4);`,
39		log.UserID,
40		log.Service,
41		log.Pubkey,
42		log.Identity,
43	)
44	return err
45}