From 7f3245738d27ee27fa8d1b1f54c67fc11e20de43 Mon Sep 17 00:00:00 2001
From: tobi <31960611+tsmethurst@users.noreply.github.com>
Date: Sun, 5 Feb 2023 10:50:09 +0100
Subject: [PATCH] [chore] stub /api/v1/featured_tags endpoint (#1420)
---
docs/api/swagger.yaml | 37 ++++++++-
internal/api/client.go | 4 +
.../api/client/featuredtags/featuredtags.go | 44 +++++++++++
internal/api/client/featuredtags/get.go | 76 +++++++++++++++++++
4 files changed, 157 insertions(+), 4 deletions(-)
create mode 100644 internal/api/client/featuredtags/featuredtags.go
create mode 100644 internal/api/client/featuredtags/get.go
diff --git a/docs/api/swagger.yaml b/docs/api/swagger.yaml
index d2d2a08cb..05681733b 100644
--- a/docs/api/swagger.yaml
+++ b/docs/api/swagger.yaml
@@ -1373,14 +1373,14 @@ definitions:
x-go-package: github.com/superseriousbusiness/gotosocial/internal/api/model
instanceV1URLs:
properties:
- streaming_api:
+ streaming:
description: Websockets address for status and notification streaming.
example: wss://example.org
type: string
- x-go-name: StreamingAPI
- title: InstanceV1URLs models instance-relevant URLs for client application consumption.
+ x-go-name: Streaming
+ title: InstanceV2URLs models instance-relevant URLs for client application consumption.
type: object
- x-go-name: InstanceV1URLs
+ x-go-name: InstanceV2URLs
x-go-package: github.com/superseriousbusiness/gotosocial/internal/api/model
instanceV2:
properties:
@@ -4039,6 +4039,35 @@ paths:
summary: Get an array of statuses that the requesting account has favourited.
tags:
- favourites
+ /api/v1/featured_tags:
+ get:
+ description: 'THIS ENDPOINT IS CURRENTLY NOT FULLY IMPLEMENTED: it will always return an empty array.'
+ operationId: getFeaturedTags
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: ""
+ schema:
+ items:
+ type: object
+ type: array
+ "400":
+ description: bad request
+ "401":
+ description: unauthorized
+ "404":
+ description: not found
+ "406":
+ description: not acceptable
+ "500":
+ description: internal server error
+ security:
+ - OAuth2 Bearer:
+ - read:accounts
+ summary: Get an array of all hashtags that you currently have featured on your profile.
+ tags:
+ - featured_tags
/api/v1/follow_requests:
get:
description: Accounts will be sorted in order of follow request date descending (newest first).
diff --git a/internal/api/client.go b/internal/api/client.go
index 0ee46bba9..2ce3cdc97 100644
--- a/internal/api/client.go
+++ b/internal/api/client.go
@@ -29,6 +29,7 @@ import (
"github.com/superseriousbusiness/gotosocial/internal/api/client/bookmarks"
"github.com/superseriousbusiness/gotosocial/internal/api/client/customemojis"
"github.com/superseriousbusiness/gotosocial/internal/api/client/favourites"
+ "github.com/superseriousbusiness/gotosocial/internal/api/client/featuredtags"
filter "github.com/superseriousbusiness/gotosocial/internal/api/client/filters"
"github.com/superseriousbusiness/gotosocial/internal/api/client/followrequests"
"github.com/superseriousbusiness/gotosocial/internal/api/client/instance"
@@ -58,6 +59,7 @@ type Client struct {
bookmarks *bookmarks.Module // api/v1/bookmarks
customEmojis *customemojis.Module // api/v1/custom_emojis
favourites *favourites.Module // api/v1/favourites
+ featuredTags *featuredtags.Module // api/v1/featured_tags
filters *filter.Module // api/v1/filters
followRequests *followrequests.Module // api/v1/follow_requests
instance *instance.Module // api/v1/instance
@@ -93,6 +95,7 @@ func (c *Client) Route(r router.Router, m ...gin.HandlerFunc) {
c.bookmarks.Route(h)
c.customEmojis.Route(h)
c.favourites.Route(h)
+ c.featuredTags.Route(h)
c.filters.Route(h)
c.followRequests.Route(h)
c.instance.Route(h)
@@ -119,6 +122,7 @@ func NewClient(db db.DB, p processing.Processor) *Client {
bookmarks: bookmarks.New(p),
customEmojis: customemojis.New(p),
favourites: favourites.New(p),
+ featuredTags: featuredtags.New(p),
filters: filter.New(p),
followRequests: followrequests.New(p),
instance: instance.New(p),
diff --git a/internal/api/client/featuredtags/featuredtags.go b/internal/api/client/featuredtags/featuredtags.go
new file mode 100644
index 000000000..7cd61837c
--- /dev/null
+++ b/internal/api/client/featuredtags/featuredtags.go
@@ -0,0 +1,44 @@
+/*
+ GoToSocial
+ Copyright (C) 2021-2023 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+*/
+
+package featuredtags
+
+import (
+ "net/http"
+
+ "github.com/gin-gonic/gin"
+ "github.com/superseriousbusiness/gotosocial/internal/processing"
+)
+
+const (
+ BasePath = "/v1/featured_tags"
+)
+
+type Module struct {
+ processor processing.Processor
+}
+
+func New(processor processing.Processor) *Module {
+ return &Module{
+ processor: processor,
+ }
+}
+
+func (m *Module) Route(attachHandler func(method string, path string, f ...gin.HandlerFunc) gin.IRoutes) {
+ attachHandler(http.MethodGet, BasePath, m.FeaturedTagsGETHandler)
+}
diff --git a/internal/api/client/featuredtags/get.go b/internal/api/client/featuredtags/get.go
new file mode 100644
index 000000000..d5e949eaf
--- /dev/null
+++ b/internal/api/client/featuredtags/get.go
@@ -0,0 +1,76 @@
+/*
+ GoToSocial
+ Copyright (C) 2021-2023 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+*/
+
+package featuredtags
+
+import (
+ "net/http"
+
+ "github.com/gin-gonic/gin"
+ apiutil "github.com/superseriousbusiness/gotosocial/internal/api/util"
+ "github.com/superseriousbusiness/gotosocial/internal/gtserror"
+ "github.com/superseriousbusiness/gotosocial/internal/oauth"
+)
+
+// FeaturedTagsGETHandler swagger:operation GET /api/v1/featured_tags getFeaturedTags
+//
+// Get an array of all hashtags that you currently have featured on your profile.
+//
+// THIS ENDPOINT IS CURRENTLY NOT FULLY IMPLEMENTED: it will always return an empty array.
+//
+// ---
+// tags:
+// - featured_tags
+//
+// produces:
+// - application/json
+//
+// security:
+// - OAuth2 Bearer:
+// - read:accounts
+//
+// responses:
+// '200':
+// schema:
+// type: array
+// items:
+// type: object
+// '400':
+// description: bad request
+// '401':
+// description: unauthorized
+// '404':
+// description: not found
+// '406':
+// description: not acceptable
+// '500':
+// description: internal server error
+func (m *Module) FeaturedTagsGETHandler(c *gin.Context) {
+ _, err := oauth.Authed(c, true, true, true, true)
+ if err != nil {
+ apiutil.ErrorHandler(c, gtserror.NewErrorUnauthorized(err, err.Error()), m.processor.InstanceGetV1)
+ return
+ }
+
+ if _, err := apiutil.NegotiateAccept(c, apiutil.JSONAcceptHeaders...); err != nil {
+ apiutil.ErrorHandler(c, gtserror.NewErrorNotAcceptable(err, err.Error()), m.processor.InstanceGetV1)
+ return
+ }
+
+ c.JSON(http.StatusOK, []interface{}{})
+}