summaryrefslogtreecommitdiff
path: root/srv/src/post/post.go
diff options
context:
space:
mode:
Diffstat (limited to 'srv/src/post/post.go')
-rw-r--r--srv/src/post/post.go27
1 files changed, 27 insertions, 0 deletions
diff --git a/srv/src/post/post.go b/srv/src/post/post.go
index bf851af..29a984f 100644
--- a/srv/src/post/post.go
+++ b/srv/src/post/post.go
@@ -68,6 +68,9 @@ type Store interface {
// descending, or empty slice.
GetByTag(tag string) ([]StoredPost, error)
+ // GetTags returns all tags which have at least one Post using them.
+ GetTags() ([]string, error)
+
// Delete will delete the StoredPost with the given ID.
Delete(id string) error
}
@@ -340,6 +343,30 @@ func (s *store) GetByTag(tag string) ([]StoredPost, error) {
return posts, err
}
+func (s *store) GetTags() ([]string, error) {
+
+ rows, err := s.db.Query(`SELECT tag FROM post_tags GROUP BY tag`)
+ if err != nil {
+ return nil, fmt.Errorf("querying all tags: %w", err)
+ }
+ defer rows.Close()
+
+ var tags []string
+
+ for rows.Next() {
+
+ var tag string
+
+ if err := rows.Scan(&tag); err != nil {
+ return nil, fmt.Errorf("scanning tag: %w", err)
+ }
+
+ tags = append(tags, tag)
+ }
+
+ return tags, nil
+}
+
func (s *store) Delete(id string) error {
tx, err := s.db.Begin()