main pico / pkg / apps / pastes / db.go
Antonio Mika  ·  2026-10-11
 1package pastes
 2
 3import (
 4	"fmt"
 5
 6	"github.com/picosh/pico/pkg/db"
 7	"github.com/picosh/pico/pkg/db/postgres"
 8)
 9
10// DB is the storage pastes uses.
11type DB interface {
12	db.AuthDB
13	db.PostDB
14	FindExpiredPosts(space string) ([]*db.Post, error)
15}
16
17// PsqlDB is pastes's postgres storage: the queries apps share, and the ones
18// only pastes makes.
19type PsqlDB struct {
20	*postgres.PsqlDB
21}
22
23var _ DB = (*PsqlDB)(nil)
24
25func NewDB(base *postgres.PsqlDB) *PsqlDB {
26	return &PsqlDB{PsqlDB: base}
27}
28
29func (me *PsqlDB) FindExpiredPosts(space string) ([]*db.Post, error) {
30	var posts []*db.Post
31	query := fmt.Sprintf(`
32		SELECT %s
33		FROM posts
34		LEFT JOIN app_users ON app_users.id = posts.user_id
35		WHERE
36			cur_space = $1 AND
37			expires_at <= now();
38	`, postgres.SelectPost)
39	err := me.Db.Select(&posts, query, space)
40	if err != nil {
41		return nil, err
42	}
43	return posts, nil
44}