Files
sablier/internal/api/start_dynamic.go
2024-11-22 00:07:53 -05:00

49 lines
1.1 KiB
Go

package api
import (
"github.com/gin-gonic/gin"
"github.com/sablierapp/sablier/pkg/sablier"
"net/http"
"time"
)
type DynamicRequest struct {
Names []string `form:"names"`
Group string `form:"group"`
SessionDuration time.Duration `form:"session_duration"`
Timeout time.Duration `form:"timeout"`
}
func StartDynamic(router *gin.RouterGroup, s *sablier.Sablier) {
router.GET("/dynamic", func(c *gin.Context) {
request := BlockingRequest{
// Timeout: s.StrategyConfig.Blocking.DefaultTimeout,
}
if err := c.ShouldBind(&request); err != nil {
_ = c.AbortWithError(http.StatusBadRequest, err)
return
}
opts := sablier.StartSessionOptions{
Wait: false,
StartOptions: sablier.StartOptions{
DesiredReplicas: 1,
ExpiresAfter: request.SessionDuration,
ConsiderReadyAfter: 0,
Timeout: request.Timeout,
},
}
session, err := s.StartSessionByGroup(c, request.Group, opts)
if err != nil {
_ = c.AbortWithError(http.StatusBadRequest, err)
return
}
AddSablierHeader(c, session)
c.JSON(http.StatusOK, map[string]interface{}{"session": session})
})
}