From 61a8d362557c1787d534024ed2f14e999b785cc3 Mon Sep 17 00:00:00 2001 From: Vyr Cossont Date: Fri, 31 May 2024 03:55:56 -0700 Subject: [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 --- internal/typeutils/internaltofrontend.go | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) (limited to 'internal/typeutils/internaltofrontend.go') 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 -- cgit v1.2.3