Skip to content

Commit 81d395e

Browse files
authored
Merge pull request #28 from iver-wharf/feature/add-put-provider
Add endpoint PUT /provider
2 parents 396a092 + 63c2c49 commit 81d395e

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ This project tries to follow [SemVer 2.0.0](https://semver.org/).
1414

1515
## v4.1.0 (WIP)
1616

17+
- Added endpoint `PUT /provider` as an idempotent way of creating a
18+
provider. (#28)
19+
1720
- Added environment var for setting bind address and port. (#29)
1821

1922
- Fixed missing `failed` field from `main.TestsResults` in

provider.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ func (m ProviderModule) Register(g *gin.RouterGroup) {
3939
{
4040
provider.GET("/:providerid", m.getProviderHandler)
4141
provider.POST("", m.postProviderHandler)
42+
provider.PUT("", m.putProviderHandler)
4243
}
4344
}
4445

@@ -185,3 +186,31 @@ func (m ProviderModule) postProviderHandler(c *gin.Context) {
185186

186187
c.JSON(http.StatusCreated, provider)
187188
}
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

Comments
 (0)