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  | 
