@@ -27,6 +27,7 @@ func (m TokenModule) Register(g *gin.RouterGroup) {
27
27
{
28
28
token .GET ("/:tokenid" , m .getTokenHandler )
29
29
token .POST ("" , m .postTokenHandler )
30
+ token .PUT ("" , m .putTokenHandler )
30
31
}
31
32
}
32
33
@@ -73,6 +74,7 @@ func (m TokenModule) getTokenHandler(c *gin.Context) {
73
74
} else if err != nil {
74
75
problem .WriteDBReadError (c , err , fmt .Sprintf (
75
76
"Failed fetching token by ID %d from database." , tokenID ))
77
+ return
76
78
}
77
79
78
80
c .JSON (http .StatusOK , token )
@@ -122,7 +124,6 @@ type TokenWithProviderID struct {
122
124
// postTokenHandler godoc
123
125
// @summary Add token to database.
124
126
// @description Add token to database. Provider in post object has to exists or should be empty.
125
- // @description Provider will has to be updated token ID during this operation.
126
127
// @tags token
127
128
// @accept json
128
129
// @produce json
@@ -178,3 +179,31 @@ func (m TokenModule) postTokenHandler(c *gin.Context) {
178
179
179
180
c .JSON (http .StatusCreated , token )
180
181
}
182
+
183
+ // postTokenHandler godoc
184
+ // @summary Put token in database.
185
+ // @description Creates a new token if a match is not found.
186
+ // @tags token
187
+ // @accept json
188
+ // @produce json
189
+ // @param token body TokenWithProviderID _ "token object"
190
+ // @success 200 {object} Token
191
+ // @failure 400 {object} problem.Response "Bad request"
192
+ // @failure 401 {object} problem.Response "Unauthorized or missing jwt token"
193
+ // @failure 502 {object} problem.Response "Database is unreachable"
194
+ // @router /token [put]
195
+ func (m TokenModule ) putTokenHandler (c * gin.Context ) {
196
+ var inputToken Token
197
+ if err := c .ShouldBindJSON (& inputToken ); err != nil {
198
+ problem .WriteInvalidBindError (c , err , "One or more parameters failed to parse when reading the request body." )
199
+ return
200
+ }
201
+ var token Token
202
+ if err := m .Database .Where (inputToken ).FirstOrCreate (& token ).Error ; err != nil {
203
+ problem .WriteDBWriteError (c , err , fmt .Sprintf (
204
+ "Failed fetch or create on token by username %q and token value." ,
205
+ inputToken .UserName ))
206
+ return
207
+ }
208
+ c .JSON (http .StatusOK , token )
209
+ }
0 commit comments