aboutsummaryrefslogtreecommitdiffstats
path: root/internal/store/files.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/store/files.go')
-rw-r--r--internal/store/files.go22
1 files changed, 22 insertions, 0 deletions
diff --git a/internal/store/files.go b/internal/store/files.go
index 287b4d7..a4a4fb3 100644
--- a/internal/store/files.go
+++ b/internal/store/files.go
@@ -79,6 +79,28 @@ func (bs *BlogStore) ListFiles(ctx context.Context, kind, q string, limit, offse
return out, total, rows.Err()
}
+// GalleryImages lists the images a gallery page shows, newest first: every
+// library image but the page's hidden ones and except (the theme's logo and
+// favicon, which the caller knows).
+func (bs *BlogStore) GalleryImages(ctx context.Context, pageID int64, except []uuid.UUID) ([]File, error) {
+ rows, err := bs.db.Query(ctx, `SELECT `+fileCols+` FROM files WHERE kind = 'image' AND id <> ALL($2)
+ AND NOT EXISTS (SELECT 1 FROM page_hidden_files h WHERE h.page_id=$1 AND h.file_id=files.id)
+ ORDER BY created_at DESC, id DESC`, pageID, except)
+ if err != nil {
+ return nil, err
+ }
+ defer rows.Close()
+ var out []File
+ for rows.Next() {
+ f, err := scanFile(rows)
+ if err != nil {
+ return nil, err
+ }
+ out = append(out, *f)
+ }
+ return out, rows.Err()
+}
+
// FileMeta loads a file without its bytes.
func (bs *BlogStore) FileMeta(ctx context.Context, id uuid.UUID) (*File, error) {
return scanFile(bs.db.QueryRow(ctx, `SELECT `+fileCols+` FROM files WHERE id=$1`, id))