feat: handle template conflict error

This commit is contained in:
2024-12-03 11:32:21 +00:00
parent cb8822e280
commit ee776f4c6e
7 changed files with 116 additions and 62 deletions

View File

@@ -56,36 +56,21 @@ func fetchTemplate(c echo.Context) error {
return c.JSON(http.StatusOK, template)
}
func createOrUpdateTemplate(c echo.Context) error {
mgr := templateManagerFrom(c)
exists, err := mgr.hasTemplate(c.Request().Context(), c.Param("templateName"))
if err != nil {
return err
}
if !exists {
return createTemplate(c)
}
var body postTemplateRequestBody
err = json.NewDecoder(c.Request().Body).Decode(&body)
if err != nil {
return err
}
if body.ImageTag != nil || body.BuildArgs != nil {
return buildTemplate(c, body)
}
return updateTemplate(c, body)
}
func createTemplate(c echo.Context) error {
mgr := templateManagerFrom(c)
name := c.Param("templateName")
mgr := templateManagerFrom(c)
exists, err := mgr.hasTemplate(c.Request().Context(), name)
if err != nil {
return err
}
if exists {
return echo.NewHTTPError(http.StatusConflict)
}
var body createTemplateRequestBody
err := json.NewDecoder(c.Request().Body).Decode(&body)
if err != nil {
if err = json.NewDecoder(c.Request().Body).Decode(&body); err != nil {
return err
}
@@ -101,6 +86,29 @@ func createTemplate(c echo.Context) error {
return c.JSON(http.StatusOK, createdTemplate)
}
func updateOrBuildTemplate(c echo.Context) error {
mgr := templateManagerFrom(c)
exists, err := mgr.hasTemplate(c.Request().Context(), c.Param("templateName"))
if err != nil {
return err
}
if !exists {
return echo.NewHTTPError(http.StatusNotFound)
}
var body postTemplateRequestBody
err = json.NewDecoder(c.Request().Body).Decode(&body)
if err != nil {
return err
}
if body.ImageTag != nil || body.BuildArgs != nil {
return buildTemplate(c, body)
}
return updateTemplate(c, body)
}
func updateTemplate(c echo.Context, body postTemplateRequestBody) error {
name := c.Param("templateName")
mgr := templateManagerFrom(c)

View File

@@ -9,7 +9,8 @@ func DefineRoutes(g *echo.Group, services service.Services) {
g.Use(newTemplateManagerMiddleware(services))
g.GET("/templates", fetchAllTemplates)
g.GET("/templates/:templateName", fetchTemplate, validateTemplateName)
g.POST("/templates/:templateName", createOrUpdateTemplate, validateTemplateName)
g.PUT("/templates/:templateName", createTemplate, validateTemplateName)
g.POST("/templates/:templateName", updateOrBuildTemplate, validateTemplateName)
g.DELETE("/templates/:templateName", deleteTemplate, validateTemplateName)
g.GET("/templates/:templateName/:filePath", fetchTemplateFile, validateTemplateName, validateTemplateFilePath)
g.POST("/templates/:templateName/:filePath", updateTemplateFile, validateTemplateName, validateTemplateFilePath)

View File

@@ -41,6 +41,7 @@ type buildTemplateOptions struct {
}
var errTemplateNotFound = errors.New("template not found")
var errTemplateExists = errors.New("template already exists")
var errBaseTemplateNotFound = errors.New("base template not found")
var errTemplateFileNotFound = errors.New("template file not found")