Antonio Mika
·
2026-10-10
1package postgres
2
3import (
4 "github.com/picosh/pico/pkg/db"
5)
6
7func (me *PsqlDB) FindUserByToken(token string) (*db.User, error) {
8 user := &db.User{}
9 err := me.Db.Get(user, `
10 SELECT app_users.id, app_users.name, app_users.created_at
11 FROM app_users
12 LEFT JOIN tokens ON tokens.user_id = app_users.id
13 WHERE tokens.token = $1 AND tokens.expires_at > NOW()`, token)
14 if err != nil {
15 return nil, err
16 }
17 return user, nil
18}
19
20func (me *PsqlDB) InsertToken(userID, name string) (string, error) {
21 var token string
22 err := me.Db.QueryRow(`INSERT INTO tokens (user_id, name) VALUES($1, $2) RETURNING token;`, userID, name).Scan(&token)
23 if err != nil {
24 return "", err
25 }
26 return token, nil
27}
28
29func (me *PsqlDB) UpsertToken(userID, name string) (string, error) {
30 token, _ := me.findTokenByName(userID, name)
31 if token != "" {
32 return token, nil
33 }
34
35 token, err := me.InsertToken(userID, name)
36 return token, err
37}
38
39func (me *PsqlDB) findTokenByName(userID, name string) (string, error) {
40 var token string
41 err := me.Db.QueryRow(`SELECT token FROM tokens WHERE user_id = $1 AND name = $2`, userID, name).Scan(&token)
42 if err != nil {
43 return "", err
44 }
45 return token, nil
46}
47
48func (me *PsqlDB) RemoveToken(tokenID string) error {
49 _, err := me.Db.Exec(`DELETE FROM tokens WHERE id = $1`, tokenID)
50 return err
51}
52
53func (me *PsqlDB) FindTokensByUser(userID string) ([]*db.Token, error) {
54 var tokens []*db.Token
55 err := me.Db.Select(&tokens, `SELECT * FROM tokens WHERE user_id = $1`, userID)
56 if err != nil {
57 return nil, err
58 }
59 return tokens, nil
60}