feat: unify owned and competitor work analysis
This commit is contained in:
@@ -585,17 +585,17 @@ func registerCreatorWithServices(app *fiber.App, store *creator.Store, phaseASto
|
||||
}
|
||||
|
||||
func workFilter(c fiber.Ctx) (creator.WorkFilter, error) {
|
||||
filter := creator.WorkFilter{Platform: c.Query("platform"), SourceID: c.Query("source_id"), SourceType: c.Query("source_type"), PublishedAtStatus: c.Query("published_at_status")}
|
||||
filter := creator.WorkFilter{Platform: c.Query("platform"), SourceID: c.Query("source_id"), SourceType: c.Query("source_type"), PublishedAtStatus: c.Query("published_at_status"), SortBy: c.Query("sort_by"), SortOrder: c.Query("sort_order")}
|
||||
for _, field := range []struct {
|
||||
name string
|
||||
target **int64
|
||||
}{{"min_likes", &filter.MinLikes}, {"min_comments", &filter.MinComments}, {"min_shares", &filter.MinShares}} {
|
||||
}{{"min_likes", &filter.MinLikes}, {"min_comments", &filter.MinComments}, {"min_shares", &filter.MinShares}, {"min_collect_count", &filter.MinCollectCount}, {"min_play_count", &filter.MinPlayCount}} {
|
||||
value := c.Query(field.name)
|
||||
if value == "" {
|
||||
continue
|
||||
}
|
||||
parsed, err := strconv.ParseInt(value, 10, 64)
|
||||
if err != nil {
|
||||
if err != nil || parsed < 0 {
|
||||
return creator.WorkFilter{}, creator.ErrInvalid
|
||||
}
|
||||
*field.target = &parsed
|
||||
|
||||
@@ -2,6 +2,7 @@ package api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
@@ -97,12 +98,20 @@ func TestWorkFilterParsesNumericAndTimeFilters(t *testing.T) {
|
||||
}
|
||||
return c.JSON(filter)
|
||||
})
|
||||
request := httptest.NewRequest(http.MethodGet, "/?platform=douyin&source_id=source-1&source_type=owned&published_at_status=published&min_likes=1&min_comments=2&min_shares=3&published_after=2026-09-17T00:00:00Z&published_before=2026-09-18T00:00:00Z", nil)
|
||||
request := httptest.NewRequest(http.MethodGet, "/?platform=douyin&source_id=source-1&source_type=owned&published_at_status=published&min_likes=1&min_comments=2&min_shares=3&min_collect_count=4&min_play_count=0&sort_by=likes&sort_order=asc&published_after=2026-09-17T00:00:00Z&published_before=2026-09-18T00:00:00Z", nil)
|
||||
response, err := app.Test(request)
|
||||
if err != nil || response.StatusCode != http.StatusOK {
|
||||
t.Fatalf("valid work filter status = %d, err = %v", response.StatusCode, err)
|
||||
}
|
||||
for _, query := range []string{"min_likes=bad", "min_comments=bad", "min_shares=bad", "published_after=bad", "published_before=bad"} {
|
||||
var got creator.WorkFilter
|
||||
if err := json.NewDecoder(response.Body).Decode(&got); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_ = response.Body.Close()
|
||||
if got.SortBy != "likes" || got.SortOrder != "asc" || got.MinCollectCount == nil || *got.MinCollectCount != 4 || got.MinPlayCount == nil || *got.MinPlayCount != 0 {
|
||||
t.Fatalf("analysis query not propagated: %+v", got)
|
||||
}
|
||||
for _, query := range []string{"min_likes=bad", "min_comments=bad", "min_shares=bad", "min_collect_count=bad", "min_play_count=bad", "min_likes=-1", "min_collect_count=-1", "min_play_count=-1", "published_after=bad", "published_before=bad"} {
|
||||
response, err := app.Test(httptest.NewRequest(http.MethodGet, "/?"+query, nil))
|
||||
if err != nil || response.StatusCode != http.StatusBadRequest {
|
||||
t.Errorf("invalid work filter %q status = %d, err = %v", query, response.StatusCode, err)
|
||||
|
||||
Reference in New Issue
Block a user