Skip to content

Commit

Permalink
database: add top/trending extensions parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
ice-dionysos committed Feb 16, 2025
1 parent 64d8b1a commit c8f8abb
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 2 deletions.
8 changes: 8 additions & 0 deletions database/query/query_where_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,12 @@ const (
whereBuilderNoSoftDeleted = "e.deleted=0"
)

const (
rankUndef rank = iota
rankTOP
rankTrending
)

const (
sqlOpCodeNONE = iota
sqlOpCodeAND
Expand All @@ -35,6 +41,7 @@ var (
)

type (
rank int
whereBuilder struct {
Params map[string]any
Dependencies []*filterDependencies
Expand All @@ -51,6 +58,7 @@ type (
References *bool
TagMarkers []databaseFilterMarker
Dependencies []*filterDependencies
Rank rank
}
databaseFilterDelete struct {
Author string
Expand Down
21 changes: 21 additions & 0 deletions database/query/query_where_builder_filter.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,8 @@ func parseNostrFilterDependencies(f *databaseFilterSearch) (*databaseFilterSearc
depStrEnd := strings.Index(f.Search[depStrStart:], " ")
if depStrEnd == -1 {
depStrEnd = len(f.Search)
} else {
depStrEnd += depStrStart
}
dep, err := parseDepRequest(f.Search[depStrStart+len(dependenciesPrefix) : depStrEnd])
if err != nil {
Expand Down Expand Up @@ -130,6 +132,24 @@ func parseNostrFilterText(f *databaseFilterSearch) *databaseFilterSearch {
return f
}

func parseRank(f *databaseFilterSearch) *databaseFilterSearch {
f.Rank = rankUndef
for _, r := range []string{"top", "trending"} {
start := strings.Index(f.Search, r)
if start == -1 {
continue
}
switch r {
case "top":
f.Rank = rankTOP
case "trending":
f.Rank = rankTrending
}
f.Search = strings.TrimSpace(f.Search[:start] + f.Search[start+len(r):])
}
return f
}

func parseNostrFilter(filter model.Filter) (*databaseFilterSearch, error) {
f := parseNostrFilterText(&databaseFilterSearch{
Filter: filter,
Expand All @@ -141,6 +161,7 @@ func parseNostrFilter(filter model.Filter) (*databaseFilterSearch, error) {
if err != nil {
return nil, err
}
f = parseRank(f)

if f.Expiration != nil && *f.Expiration {
f.Dependencies = append(f.Dependencies, &filterDependencies{
Expand Down
6 changes: 4 additions & 2 deletions database/query/query_where_builder_stmt_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@ func TestParseNostrFilter(t *testing.T) {
})
t.Run("Image with dependencies", func(t *testing.T) {
f, err := parseNostrFilter(model.Filter{
Search: "images:true some content here include:dependencies:kind1>kind2",
Search: "images:true some content here include:dependencies:kind1>kind2 top",
})
require.NoError(t, err)
require.NotNil(t, f.Images)
Expand All @@ -317,11 +317,12 @@ func TestParseNostrFilter(t *testing.T) {
Kinds: []int{2},
},
}, f.Dependencies[0])
require.Equal(t, rankTOP, f.Rank)
require.Equal(t, "some content here", f.Filter.Search)
})
t.Run("Image with dependencies in the beginning", func(t *testing.T) {
f, err := parseNostrFilter(model.Filter{
Search: "include:dependencies:kind1>kind3 some content here2 images:false",
Search: "include:dependencies:kind1>kind3 trending some content here2 images:false",
})
require.NoError(t, err)
require.NotNil(t, f.Images)
Expand All @@ -335,6 +336,7 @@ func TestParseNostrFilter(t *testing.T) {
Kinds: []int{3},
},
}, f.Dependencies[0])
require.Equal(t, rankTrending, f.Rank)
require.Equal(t, "some content here2", f.Filter.Search)
})
t.Run("Image with dependencies in the beginning and search", func(t *testing.T) {
Expand Down

0 comments on commit c8f8abb

Please sign in to comment.