mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-12-09 21:18:07 -06:00
[feature] Implement Filter API v2 (#2936)
* Use correct entity name * We support server-side filters now * Document filter v1 methods that can throw a 409 * Validate v1 filter phrase as filter title * Always check v1 filter API status codes in tests * Document keyword minimum requirement on filter API v1 * Make it possible to specify filter keyword update columns per filter keyword * Implement v2 filter API * Fix lint and tests * Update Swagger spec * Fix filter update test * Update Swagger spec *correctly* * Update actual files Swagger spec was generated from * Remove keywords_attributes and statuses_attributes * Add test for serialization of empty filter * More helpful messages when object is owned by wrong account
This commit is contained in:
parent
4db596b8b9
commit
61a8d36255
66 changed files with 5601 additions and 55 deletions
|
|
@ -19,6 +19,7 @@ package bundb
|
|||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"slices"
|
||||
"time"
|
||||
|
||||
|
|
@ -197,10 +198,14 @@ func (f *filterDB) UpdateFilter(
|
|||
ctx context.Context,
|
||||
filter *gtsmodel.Filter,
|
||||
filterColumns []string,
|
||||
filterKeywordColumns []string,
|
||||
filterKeywordColumns [][]string,
|
||||
deleteFilterKeywordIDs []string,
|
||||
deleteFilterStatusIDs []string,
|
||||
) error {
|
||||
if len(filter.Keywords) != len(filterKeywordColumns) {
|
||||
return errors.New("number of filter keywords must match number of lists of filter keyword columns")
|
||||
}
|
||||
|
||||
updatedAt := time.Now()
|
||||
filter.UpdatedAt = updatedAt
|
||||
for _, filterKeyword := range filter.Keywords {
|
||||
|
|
@ -214,8 +219,10 @@ func (f *filterDB) UpdateFilter(
|
|||
if len(filterColumns) > 0 {
|
||||
filterColumns = append(filterColumns, "updated_at")
|
||||
}
|
||||
if len(filterKeywordColumns) > 0 {
|
||||
filterKeywordColumns = append(filterKeywordColumns, "updated_at")
|
||||
for i := range filterKeywordColumns {
|
||||
if len(filterKeywordColumns[i]) > 0 {
|
||||
filterKeywordColumns[i] = append(filterKeywordColumns[i], "updated_at")
|
||||
}
|
||||
}
|
||||
|
||||
// Update database.
|
||||
|
|
@ -229,11 +236,11 @@ func (f *filterDB) UpdateFilter(
|
|||
return err
|
||||
}
|
||||
|
||||
if len(filter.Keywords) > 0 {
|
||||
for i, filterKeyword := range filter.Keywords {
|
||||
if _, err := NewUpsert(tx).
|
||||
Model(&filter.Keywords).
|
||||
Model(filterKeyword).
|
||||
Constraint("id").
|
||||
Column(filterKeywordColumns...).
|
||||
Column(filterKeywordColumns[i]...).
|
||||
Exec(ctx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ func (suite *FilterTestSuite) TestFilterCRUD() {
|
|||
}
|
||||
check.Statuses = append(check.Statuses, newStatus)
|
||||
|
||||
if err := suite.db.UpdateFilter(ctx, check, nil, nil, nil, nil); err != nil {
|
||||
if err := suite.db.UpdateFilter(ctx, check, nil, [][]string{nil, nil}, nil, nil); err != nil {
|
||||
t.Fatalf("error updating filter: %v", err)
|
||||
}
|
||||
// Now fetch newly updated filter.
|
||||
|
|
@ -175,7 +175,7 @@ func (suite *FilterTestSuite) TestFilterCRUD() {
|
|||
check.Keywords = []*gtsmodel.FilterKeyword{filterKeyword}
|
||||
check.Statuses = nil
|
||||
|
||||
if err := suite.db.UpdateFilter(ctx, check, nil, nil, []string{newKeyword.ID}, nil); err != nil {
|
||||
if err := suite.db.UpdateFilter(ctx, check, nil, [][]string{{"whole_word"}}, []string{newKeyword.ID}, nil); err != nil {
|
||||
t.Fatalf("error updating filter: %v", err)
|
||||
}
|
||||
check, err = suite.db.GetFilterByID(ctx, filter.ID)
|
||||
|
|
@ -222,7 +222,7 @@ func (suite *FilterTestSuite) TestFilterCRUD() {
|
|||
StatusID: newStatus.StatusID,
|
||||
}
|
||||
check.Statuses = []*gtsmodel.FilterStatus{redundantStatus}
|
||||
if err := suite.db.UpdateFilter(ctx, check, nil, nil, nil, nil); err != nil {
|
||||
if err := suite.db.UpdateFilter(ctx, check, nil, [][]string{nil}, nil, nil); err != nil {
|
||||
t.Fatalf("error updating filter: %v", err)
|
||||
}
|
||||
check, err = suite.db.GetFilterByID(ctx, filter.ID)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue