Add update and delete for sites

This commit is contained in:
2026-04-02 21:47:43 +02:00
parent 18a030a0a8
commit e71530bb30
2 changed files with 99 additions and 0 deletions
+97
View File
@@ -174,3 +174,100 @@ func (h *SiteHandler) PostSite(c fiber.Ctx) error {
return c.JSON(site)
}
// PutSite godoc
// @Summary Update an existing site
// @Description Update an existing site by its ID
// @Tags Sites
// @Accept json
// @Produce json
// @Param id path string true "Site ID"
// @Param site body models.Site true "Updated site details"
// @Success 200 {object} models.Site
// @Failure 400 {object} models.APIError
// @Failure 404 {object} models.APIError
// @Failure 500 {object} models.APIError
// @Router /sites/{id} [put]
func (h *SiteHandler) PutSite(c fiber.Ctx) error {
id := c.Params("id")
if _, err := h.Repo.GetSite(id); err != nil {
if errors.Is(err, sql.ErrNoRows) {
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{
Message: "Site not found",
})
}
log.Println("Error checking site before update: ", err)
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{
Message: "Unexpected error while updating site",
})
}
var site models.Site
if err := c.Bind().Body(&site); err != nil {
log.Println("Error parsing body: ", err)
return c.Status(fiber.StatusBadRequest).JSON(&models.APIError{
Message: "Invalid request body",
})
}
if err := validateIncomingSite(&site); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(&models.APIError{
Message: "Invalid request body: " + err.Error(),
})
}
site.ID = id
if err := h.Repo.UpdateSite(&site); err != nil {
log.Println("Error updating site: ", err)
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{
Message: "Unexpected error while updating site",
})
}
updatedSite, err := h.Repo.GetSite(id)
if err != nil {
log.Println("Error getting updated site: ", err)
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{
Message: "Site was updated but could not be retrieved",
})
}
return c.JSON(updatedSite)
}
// DeleteSite godoc
// @Summary Delete a site
// @Description Delete a site by its ID
// @Tags Sites
// @Accept json
// @Produce json
// @Param id path string true "Site ID"
// @Success 204
// @Failure 404 {object} models.APIError
// @Failure 500 {object} models.APIError
// @Router /sites/{id} [delete]
func (h *SiteHandler) DeleteSite(c fiber.Ctx) error {
id := c.Params("id")
if _, err := h.Repo.GetSite(id); err != nil {
if errors.Is(err, sql.ErrNoRows) {
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{
Message: "Site not found",
})
}
log.Println("Error checking site before delete: ", err)
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{
Message: "Unexpected error while deleting site",
})
}
if err := h.Repo.DeleteSite(id); err != nil {
log.Println("Error deleting site: ", err)
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{
Message: "Unexpected error while deleting site",
})
}
return c.SendStatus(fiber.StatusNoContent)
}
+2
View File
@@ -26,6 +26,8 @@ func Register(app *fiber.App, cfg *config.Config, envCfg *envconfig.EnvConfig, d
api.Get("/sites", siteHandler.GetSites)
api.Get("/sites/:id", siteHandler.GetSite)
api.Post("/sites", siteHandler.PostSite)
api.Put("/sites/:id", siteHandler.PutSite)
api.Delete("/sites/:id", siteHandler.DeleteSite)
storagePath, err := filepath.Abs(envCfg.StoragePath)
if err != nil {