Skip to content

Commit d3de85e

Browse files
Swopxvzf
authored andcommitted
feat: use fiber handler utils in existing handlers + add payload validation
1 parent be6b00a commit d3de85e

File tree

4 files changed

+74
-29
lines changed

4 files changed

+74
-29
lines changed

internal/server/handlers/acquire.go

+26-14
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,41 @@
11
package handlers
22

33
import (
4-
"fmt"
54
"github.com/ankorstore/gh-action-mq-lease-service/internal/lease"
5+
"github.com/go-playground/validator/v10"
66
"github.com/gofiber/fiber/v2"
7-
"github.com/rs/zerolog/log"
87
)
98

10-
func Acquire(orchestrator lease.LeaseProviderOrchestrator) func(c *fiber.Ctx) error {
9+
func Acquire(orchestrator lease.ProviderOrchestrator) func(c *fiber.Ctx) error {
10+
type acquireRequest struct {
11+
HeadSHA string `json:"head_sha" validate:"required,min=1"`
12+
Priority int `json:"priority" validate:"required,number,min=1"`
13+
}
14+
15+
validate := validator.New()
16+
1117
return func(c *fiber.Ctx) error {
12-
leaseRequest := &lease.LeaseRequest{}
13-
14-
if err := c.BodyParser(leaseRequest); err != nil {
15-
errMsg := "Error when parsing acquire request body"
16-
log.Error().Err(err).Msg(errMsg)
17-
return c.Status(fiber.StatusUnprocessableEntity).JSON(fiber.Map{
18-
"error": errMsg,
19-
})
18+
provider, fiberErr := getLeaseProviderOrFail(c, orchestrator)
19+
if provider == nil {
20+
return fiberErr
2021
}
2122

22-
fmt.Println(leaseRequest)
23+
input := new(acquireRequest)
24+
if ok, err := parseBodyOrFail(c, input); !ok {
25+
return err
26+
}
27+
if ok, err := validateInputOrFail(c, validate, input); !ok {
28+
return err
29+
}
30+
31+
leaseRequest := &lease.Request{
32+
HeadSHA: input.HeadSHA,
33+
Priority: input.Priority,
34+
}
2335

24-
leaseRequestResponse, err := orchestrator.Get(c.Params("owner"), c.Params("repo"), c.Params("baseRef")).Acquire(leaseRequest)
36+
leaseRequestResponse, err := provider.Acquire(c.UserContext(), leaseRequest)
2537
if err != nil {
26-
return c.SendStatus(fiber.StatusConflict)
38+
return apiError(c, fiber.StatusConflict, "Couldn't acquire the lock", err.Error())
2739
}
2840

2941
return c.Status(fiber.StatusOK).JSON(leaseRequestResponse)

internal/server/handlers/provider_details.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@ import (
55
"github.com/gofiber/fiber/v2"
66
)
77

8-
func ProviderDetails(orchestrator lease.LeaseProviderOrchestrator) func(c *fiber.Ctx) error {
8+
func ProviderDetails(orchestrator lease.ProviderOrchestrator) func(c *fiber.Ctx) error {
99
return func(c *fiber.Ctx) error {
10-
provider := orchestrator.Get(c.Params("owner"), c.Params("repo"), c.Params("baseRef"))
10+
provider, fiberErr := getLeaseProviderOrFail(c, orchestrator)
11+
if provider == nil {
12+
return fiberErr
13+
}
1114
return c.Status(fiber.StatusOK).JSON(provider.GetKnown())
1215
}
1316
}
+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package handlers
2+
3+
import (
4+
"github.com/ankorstore/gh-action-mq-lease-service/internal/lease"
5+
"github.com/gofiber/fiber/v2"
6+
)
7+
8+
func ProviderList(orchestrator lease.ProviderOrchestrator) func(c *fiber.Ctx) error {
9+
return func(c *fiber.Ctx) error {
10+
list := fiber.Map{}
11+
for id, provider := range orchestrator.GetAll() {
12+
list[id] = provider.GetKnown()
13+
}
14+
return c.Status(fiber.StatusOK).JSON(list)
15+
}
16+
}

internal/server/handlers/release.go

+27-13
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,41 @@ package handlers
22

33
import (
44
"github.com/ankorstore/gh-action-mq-lease-service/internal/lease"
5+
"github.com/go-playground/validator/v10"
56
"github.com/gofiber/fiber/v2"
6-
"github.com/rs/zerolog/log"
77
)
88

9-
func Release(orchestrator lease.LeaseProviderOrchestrator) func(c *fiber.Ctx) error {
9+
func Release(orchestrator lease.ProviderOrchestrator) func(c *fiber.Ctx) error {
10+
type releaseRequest struct {
11+
HeadSHA string `json:"head_sha" validate:"required,min=1"`
12+
Priority int `json:"priority" validate:"required,number,min=1"`
13+
Status string `json:"status" validate:"required,oneof=success failure"`
14+
}
15+
16+
validate := validator.New()
17+
1018
return func(c *fiber.Ctx) error {
11-
leaseRequest := &lease.LeaseRequest{}
19+
provider, fiberErr := getLeaseProviderOrFail(c, orchestrator)
20+
if provider == nil {
21+
return fiberErr
22+
}
1223

13-
if err := c.BodyParser(leaseRequest); err != nil {
14-
errMsg := "Error when parsing acquire request body"
15-
log.Error().Err(err).Msg(errMsg)
16-
return c.Status(fiber.StatusUnprocessableEntity).JSON(fiber.Map{
17-
"error": errMsg,
18-
})
24+
input := new(releaseRequest)
25+
if ok, err := parseBodyOrFail(c, input); !ok {
26+
return err
27+
}
28+
if ok, err := validateInputOrFail(c, validate, input); !ok {
29+
return err
30+
}
31+
leaseRequest := &lease.Request{
32+
HeadSHA: input.HeadSHA,
33+
Priority: input.Priority,
34+
Status: &input.Status,
1935
}
2036

21-
leaseRequestResponse, err := orchestrator.Get(c.Params("owner"), c.Params("repo"), c.Params("baseRef")).Release(leaseRequest)
37+
leaseRequestResponse, err := provider.Release(c.UserContext(), leaseRequest)
2238
if err != nil {
23-
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
24-
"error": err.Error(),
25-
})
39+
return apiError(c, fiber.StatusBadRequest, "Couldn't release the lock", err.Error())
2640
}
2741

2842
return c.Status(fiber.StatusOK).JSON(leaseRequestResponse)

0 commit comments

Comments
 (0)