Fix swagger errors
Some checks failed
Build Docker and Deploy / Build Docker Container (push) Successful in 1m27s
Build Docker and Deploy / Run Unit-Tests (push) Successful in 8m57s
Build Docker and Deploy / Deploy to Server (push) Failing after 8s

This commit is contained in:
2025-11-02 23:13:31 +01:00
parent b6944d1dbb
commit 31a45bc4c3
4 changed files with 236 additions and 16 deletions

View File

@@ -1,19 +1,20 @@
package handler package handler
import ( import (
"database/sql"
"errors"
"fmt"
"net/http"
"strings"
"blackforestbytes.com/simplecloudnotifier/api/apierr" "blackforestbytes.com/simplecloudnotifier/api/apierr"
"blackforestbytes.com/simplecloudnotifier/api/ginresp" "blackforestbytes.com/simplecloudnotifier/api/ginresp"
ct "blackforestbytes.com/simplecloudnotifier/db/cursortoken" ct "blackforestbytes.com/simplecloudnotifier/db/cursortoken"
"blackforestbytes.com/simplecloudnotifier/logic" "blackforestbytes.com/simplecloudnotifier/logic"
"blackforestbytes.com/simplecloudnotifier/models" "blackforestbytes.com/simplecloudnotifier/models"
"database/sql"
"errors"
"fmt"
"git.blackforestbytes.com/BlackForestBytes/goext/ginext" "git.blackforestbytes.com/BlackForestBytes/goext/ginext"
"git.blackforestbytes.com/BlackForestBytes/goext/langext" "git.blackforestbytes.com/BlackForestBytes/goext/langext"
"git.blackforestbytes.com/BlackForestBytes/goext/mathext" "git.blackforestbytes.com/BlackForestBytes/goext/mathext"
"net/http"
"strings"
) )
// ListChannels swaggerdoc // ListChannels swaggerdoc
@@ -487,7 +488,7 @@ func (h APIHandler) ListChannelMessages(pctx ginext.PreContext) ginext.HTTPRespo
// @Failure 404 {object} ginresp.apiError "channel not found" // @Failure 404 {object} ginresp.apiError "channel not found"
// @Failure 500 {object} ginresp.apiError "internal server error" // @Failure 500 {object} ginresp.apiError "internal server error"
// //
// @Router /api/v2/users/{uid}/channels/{cid} [PATCH] // @Router /api/v2/users/{uid}/channels/{cid} [DELETE]
func (h APIHandler) DeleteChannel(pctx ginext.PreContext) ginext.HTTPResponse { func (h APIHandler) DeleteChannel(pctx ginext.PreContext) ginext.HTTPResponse {
type uri struct { type uri struct {
UserID models.UserID `uri:"uid" binding:"entityid"` UserID models.UserID `uri:"uid" binding:"entityid"`

View File

@@ -1,12 +1,13 @@
package handler package handler
import ( import (
"net/http"
"blackforestbytes.com/simplecloudnotifier/api/apierr" "blackforestbytes.com/simplecloudnotifier/api/apierr"
"blackforestbytes.com/simplecloudnotifier/api/ginresp" "blackforestbytes.com/simplecloudnotifier/api/ginresp"
"blackforestbytes.com/simplecloudnotifier/logic" "blackforestbytes.com/simplecloudnotifier/logic"
"blackforestbytes.com/simplecloudnotifier/models" "blackforestbytes.com/simplecloudnotifier/models"
"git.blackforestbytes.com/BlackForestBytes/goext/ginext" "git.blackforestbytes.com/BlackForestBytes/goext/ginext"
"net/http"
) )
// ListUserSenderNames swaggerdoc // ListUserSenderNames swaggerdoc
@@ -23,7 +24,7 @@ import (
// @Failure 404 {object} ginresp.apiError "message not found" // @Failure 404 {object} ginresp.apiError "message not found"
// @Failure 500 {object} ginresp.apiError "internal server error" // @Failure 500 {object} ginresp.apiError "internal server error"
// //
// @Router /api/v2/users/{uid}/keys [GET] // @Router /api/v2/users/{uid}/sender-names [GET]
func (h APIHandler) ListUserSenderNames(pctx ginext.PreContext) ginext.HTTPResponse { func (h APIHandler) ListUserSenderNames(pctx ginext.PreContext) ginext.HTTPResponse {
type uri struct { type uri struct {
UserID models.UserID `uri:"uid" binding:"entityid"` UserID models.UserID `uri:"uid" binding:"entityid"`

View File

@@ -1656,7 +1656,7 @@
} }
} }
}, },
"patch": { "delete": {
"tags": [ "tags": [
"API-v2" "API-v2"
], ],
@@ -1710,6 +1710,85 @@
} }
} }
} }
},
"patch": {
"tags": [
"API-v2"
],
"summary": "(Partially) update a channel",
"operationId": "api-channels-update",
"parameters": [
{
"type": "string",
"description": "UserID",
"name": "uid",
"in": "path",
"required": true
},
{
"type": "string",
"description": "ChannelID",
"name": "cid",
"in": "path",
"required": true
},
{
"description": "Send `true` to create a new subscribe_key",
"name": "subscribe_key",
"in": "body",
"schema": {
"type": "string"
}
},
{
"description": "Send `true` to create a new send_key",
"name": "send_key",
"in": "body",
"schema": {
"type": "string"
}
},
{
"description": "Change the cahnnel display-name (only chnages to lowercase/uppercase are allowed - internal_name must stay the same)",
"name": "display_name",
"in": "body",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/models.ChannelWithSubscription"
}
},
"400": {
"description": "supplied values/parameters cannot be parsed / are invalid",
"schema": {
"$ref": "#/definitions/ginresp.apiError"
}
},
"401": {
"description": "user is not authorized / has missing permissions",
"schema": {
"$ref": "#/definitions/ginresp.apiError"
}
},
"404": {
"description": "channel not found",
"schema": {
"$ref": "#/definitions/ginresp.apiError"
}
},
"500": {
"description": "internal server error",
"schema": {
"$ref": "#/definitions/ginresp.apiError"
}
}
}
} }
}, },
"/api/v2/users/{uid}/channels/{cid}/messages": { "/api/v2/users/{uid}/channels/{cid}/messages": {
@@ -2122,11 +2201,12 @@
}, },
"/api/v2/users/{uid}/keys": { "/api/v2/users/{uid}/keys": {
"get": { "get": {
"description": "The request must be done with an ADMIN key, the returned keys are without their token.",
"tags": [ "tags": [
"API-v2" "API-v2"
], ],
"summary": "List sender-names (of allthe messages of this user)", "summary": "List keys of the user",
"operationId": "api-usersendernames-list", "operationId": "api-tokenkeys-list",
"parameters": [ "parameters": [
{ {
"type": "string", "type": "string",
@@ -2461,6 +2541,56 @@
} }
} }
}, },
"/api/v2/users/{uid}/sender-names": {
"get": {
"tags": [
"API-v2"
],
"summary": "List sender-names (of allthe messages of this user)",
"operationId": "api-usersendernames-list",
"parameters": [
{
"type": "string",
"description": "UserID",
"name": "uid",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/handler.ListUserKeys.response"
}
},
"400": {
"description": "supplied values/parameters cannot be parsed / are invalid",
"schema": {
"$ref": "#/definitions/ginresp.apiError"
}
},
"401": {
"description": "user is not authorized / has missing permissions",
"schema": {
"$ref": "#/definitions/ginresp.apiError"
}
},
"404": {
"description": "message not found",
"schema": {
"$ref": "#/definitions/ginresp.apiError"
}
},
"500": {
"description": "internal server error",
"schema": {
"$ref": "#/definitions/ginresp.apiError"
}
}
}
}
},
"/api/v2/users/{uid}/subscriptions": { "/api/v2/users/{uid}/subscriptions": {
"get": { "get": {
"description": "The possible values for 'direction' are:\n- \"outgoing\" Subscriptions with the user as subscriber (= subscriptions he can use to read channels)\n- \"incoming\" Subscriptions to channels of this user (= incoming subscriptions and subscription requests)\n- \"both\" Combines \"outgoing\" and \"incoming\" (default)\n\nThe possible values for 'confirmation' are:\n- \"confirmed\" Confirmed (active) subscriptions\n- \"unconfirmed\" Unconfirmed (pending) subscriptions\n- \"all\" Combines \"confirmed\" and \"unconfirmed\" (default)\n\nThe possible values for 'external' are:\n- \"true\" Subscriptions with subscriber_user_id != channel_owner_user_id (subscriptions from other users)\n- \"false\" Subscriptions with subscriber_user_id == channel_owner_user_id (subscriptions from this user to his own channels)\n- \"all\" Combines \"external\" and \"internal\" (default)\n\nThe `subscriber_user_id` parameter can be used to additionally filter the subscriber_user_id (return subscribtions from a specific user)\n\nThe `channel_owner_user_id` parameter can be used to additionally filter the channel_owner_user_id (return subscribtions to a specific user)", "description": "The possible values for 'direction' are:\n- \"outgoing\" Subscriptions with the user as subscriber (= subscriptions he can use to read channels)\n- \"incoming\" Subscriptions to channels of this user (= incoming subscriptions and subscription requests)\n- \"both\" Combines \"outgoing\" and \"incoming\" (default)\n\nThe possible values for 'confirmation' are:\n- \"confirmed\" Confirmed (active) subscriptions\n- \"unconfirmed\" Unconfirmed (pending) subscriptions\n- \"all\" Combines \"confirmed\" and \"unconfirmed\" (default)\n\nThe possible values for 'external' are:\n- \"true\" Subscriptions with subscriber_user_id != channel_owner_user_id (subscriptions from other users)\n- \"false\" Subscriptions with subscriber_user_id == channel_owner_user_id (subscriptions from this user to his own channels)\n- \"all\" Combines \"external\" and \"internal\" (default)\n\nThe `subscriber_user_id` parameter can be used to additionally filter the subscriber_user_id (return subscribtions from a specific user)\n\nThe `channel_owner_user_id` parameter can be used to additionally filter the channel_owner_user_id (return subscribtions to a specific user)",

View File

@@ -1954,6 +1954,43 @@ paths:
tags: tags:
- API-v2 - API-v2
/api/v2/users/{uid}/channels/{cid}: /api/v2/users/{uid}/channels/{cid}:
delete:
operationId: api-channels-delete
parameters:
- description: UserID
in: path
name: uid
required: true
type: string
- description: ChannelID
in: path
name: cid
required: true
type: string
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.Channel'
"400":
description: supplied values/parameters cannot be parsed / are invalid
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
description: user is not authorized / has missing permissions
schema:
$ref: '#/definitions/ginresp.apiError'
"404":
description: channel not found
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
description: internal server error
schema:
$ref: '#/definitions/ginresp.apiError'
summary: delete a channel (including all messages, subscriptions, etc)
tags:
- API-v2
get: get:
operationId: api-channels-get operationId: api-channels-get
parameters: parameters:
@@ -1992,7 +2029,7 @@ paths:
tags: tags:
- API-v2 - API-v2
patch: patch:
operationId: api-channels-delete operationId: api-channels-update
parameters: parameters:
- description: UserID - description: UserID
in: path in: path
@@ -2004,11 +2041,27 @@ paths:
name: cid name: cid
required: true required: true
type: string type: string
- description: Send `true` to create a new subscribe_key
in: body
name: subscribe_key
schema:
type: string
- description: Send `true` to create a new send_key
in: body
name: send_key
schema:
type: string
- description: Change the cahnnel display-name (only chnages to lowercase/uppercase
are allowed - internal_name must stay the same)
in: body
name: display_name
schema:
type: string
responses: responses:
"200": "200":
description: OK description: OK
schema: schema:
$ref: '#/definitions/models.Channel' $ref: '#/definitions/models.ChannelWithSubscription'
"400": "400":
description: supplied values/parameters cannot be parsed / are invalid description: supplied values/parameters cannot be parsed / are invalid
schema: schema:
@@ -2025,7 +2078,7 @@ paths:
description: internal server error description: internal server error
schema: schema:
$ref: '#/definitions/ginresp.apiError' $ref: '#/definitions/ginresp.apiError'
summary: delete a channel (including all messages, subscriptions, etc) summary: (Partially) update a channel
tags: tags:
- API-v2 - API-v2
/api/v2/users/{uid}/channels/{cid}/messages: /api/v2/users/{uid}/channels/{cid}/messages:
@@ -2305,7 +2358,9 @@ paths:
- API-v2 - API-v2
/api/v2/users/{uid}/keys: /api/v2/users/{uid}/keys:
get: get:
operationId: api-usersendernames-list description: The request must be done with an ADMIN key, the returned keys are
without their token.
operationId: api-tokenkeys-list
parameters: parameters:
- description: UserID - description: UserID
in: path in: path
@@ -2333,7 +2388,7 @@ paths:
description: internal server error description: internal server error
schema: schema:
$ref: '#/definitions/ginresp.apiError' $ref: '#/definitions/ginresp.apiError'
summary: List sender-names (of allthe messages of this user) summary: List keys of the user
tags: tags:
- API-v2 - API-v2
post: post:
@@ -2533,6 +2588,39 @@ paths:
summary: Get the key currently used by this request summary: Get the key currently used by this request
tags: tags:
- API-v2 - API-v2
/api/v2/users/{uid}/sender-names:
get:
operationId: api-usersendernames-list
parameters:
- description: UserID
in: path
name: uid
required: true
type: string
responses:
"200":
description: OK
schema:
$ref: '#/definitions/handler.ListUserKeys.response'
"400":
description: supplied values/parameters cannot be parsed / are invalid
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
description: user is not authorized / has missing permissions
schema:
$ref: '#/definitions/ginresp.apiError'
"404":
description: message not found
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
description: internal server error
schema:
$ref: '#/definitions/ginresp.apiError'
summary: List sender-names (of allthe messages of this user)
tags:
- API-v2
/api/v2/users/{uid}/subscriptions: /api/v2/users/{uid}/subscriptions:
get: get:
description: |- description: |-