@@ -39,6 +39,7 @@ func (m ProviderModule) Register(g *gin.RouterGroup) {
39
39
{
40
40
provider .GET ("/:providerid" , m .getProviderHandler )
41
41
provider .POST ("" , m .postProviderHandler )
42
+ provider .PUT ("" , m .putProviderHandler )
42
43
}
43
44
}
44
45
@@ -185,3 +186,31 @@ func (m ProviderModule) postProviderHandler(c *gin.Context) {
185
186
186
187
c .JSON (http .StatusCreated , provider )
187
188
}
189
+
190
+ // putProviderHandler godoc
191
+ // @summary Put provider in database.
192
+ // @description Creates a new provider if a match is not found.
193
+ // @tags provider
194
+ // @accept json
195
+ // @produce json
196
+ // @param provider body Provider _ "provider object"
197
+ // @success 200 {object} Provider
198
+ // @failure 400 {object} problem.Response "Bad request"
199
+ // @failure 401 {object} problem.Response "Unauthorized or missing jwt token"
200
+ // @failure 502 {object} problem.Response "Database is unreachable"
201
+ // @router /provider [put]
202
+ func (m ProviderModule ) putProviderHandler (c * gin.Context ) {
203
+ var inputProvider Provider
204
+ if err := c .ShouldBindJSON (& inputProvider ); err != nil {
205
+ problem .WriteInvalidBindError (c , err , "One or more parameters failed to parse when reading the request body." )
206
+ return
207
+ }
208
+ var provider Provider
209
+ if err := m .Database .Where (inputProvider ).FirstOrCreate (& provider ).Error ; err != nil {
210
+ problem .WriteDBWriteError (c , err , fmt .Sprintf (
211
+ "Failed fetch or create on inputProvider with name %q." ,
212
+ inputProvider .Name ))
213
+ return
214
+ }
215
+ c .JSON (http .StatusOK , provider )
216
+ }
0 commit comments