diff options
author | 2024-05-31 03:55:56 -0700 | |
---|---|---|
committer | 2024-05-31 12:55:56 +0200 | |
commit | 61a8d362557c1787d534024ed2f14e999b785cc3 (patch) | |
tree | f0ace4432170c0c88afa3233c2c327c808b7b92d /internal/typeutils | |
parent | [chore] little startup tweaks (#2941) (diff) | |
download | gotosocial-61a8d362557c1787d534024ed2f14e999b785cc3.tar.xz |
[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
Diffstat (limited to 'internal/typeutils')
-rw-r--r-- | internal/typeutils/frontendtointernal.go | 10 | ||||
-rw-r--r-- | internal/typeutils/internaltofrontend.go | 28 |
2 files changed, 29 insertions, 9 deletions
diff --git a/internal/typeutils/frontendtointernal.go b/internal/typeutils/frontendtointernal.go index 3bb0933f3..f194770df 100644 --- a/internal/typeutils/frontendtointernal.go +++ b/internal/typeutils/frontendtointernal.go @@ -47,3 +47,13 @@ func APIMarkerNameToMarkerName(m apimodel.MarkerName) gtsmodel.MarkerName { } return "" } + +func APIFilterActionToFilterAction(m apimodel.FilterAction) gtsmodel.FilterAction { + switch m { + case apimodel.FilterActionWarn: + return gtsmodel.FilterActionWarn + case apimodel.FilterActionHide: + return gtsmodel.FilterActionHide + } + return gtsmodel.FilterActionNone +} diff --git a/internal/typeutils/internaltofrontend.go b/internal/typeutils/internaltofrontend.go index d7f1fac6c..2b340a191 100644 --- a/internal/typeutils/internaltofrontend.go +++ b/internal/typeutils/internaltofrontend.go @@ -1852,19 +1852,12 @@ func (c *Converter) FilterKeywordToAPIFilterV1(ctx context.Context, filterKeywor func (c *Converter) FilterToAPIFilterV2(ctx context.Context, filter *gtsmodel.Filter) (*apimodel.FilterV2, error) { apiFilterKeywords := make([]apimodel.FilterKeyword, 0, len(filter.Keywords)) for _, filterKeyword := range filter.Keywords { - apiFilterKeywords = append(apiFilterKeywords, apimodel.FilterKeyword{ - ID: filterKeyword.ID, - Keyword: filterKeyword.Keyword, - WholeWord: util.PtrValueOr(filterKeyword.WholeWord, false), - }) + apiFilterKeywords = append(apiFilterKeywords, *c.FilterKeywordToAPIFilterKeyword(ctx, filterKeyword)) } apiFilterStatuses := make([]apimodel.FilterStatus, 0, len(filter.Keywords)) for _, filterStatus := range filter.Statuses { - apiFilterStatuses = append(apiFilterStatuses, apimodel.FilterStatus{ - ID: filterStatus.ID, - StatusID: filterStatus.StatusID, - }) + apiFilterStatuses = append(apiFilterStatuses, *c.FilterStatusToAPIFilterStatus(ctx, filterStatus)) } return &apimodel.FilterV2{ @@ -1915,6 +1908,23 @@ func filterActionToAPIFilterAction(m gtsmodel.FilterAction) apimodel.FilterActio return apimodel.FilterActionNone } +// FilterKeywordToAPIFilterKeyword converts a GTS model filter status into an API filter status. +func (c *Converter) FilterKeywordToAPIFilterKeyword(ctx context.Context, filterKeyword *gtsmodel.FilterKeyword) *apimodel.FilterKeyword { + return &apimodel.FilterKeyword{ + ID: filterKeyword.ID, + Keyword: filterKeyword.Keyword, + WholeWord: util.PtrValueOr(filterKeyword.WholeWord, false), + } +} + +// FilterStatusToAPIFilterStatus converts a GTS model filter status into an API filter status. +func (c *Converter) FilterStatusToAPIFilterStatus(ctx context.Context, filterStatus *gtsmodel.FilterStatus) *apimodel.FilterStatus { + return &apimodel.FilterStatus{ + ID: filterStatus.ID, + StatusID: filterStatus.StatusID, + } +} + // convertEmojisToAPIEmojis will convert a slice of GTS model emojis to frontend API model emojis, falling back to IDs if no GTS models supplied. func (c *Converter) convertEmojisToAPIEmojis(ctx context.Context, emojis []*gtsmodel.Emoji, emojiIDs []string) ([]apimodel.Emoji, error) { var errs gtserror.MultiError |