Add gitservers to backend

This commit is contained in:
2026-05-02 17:37:36 +02:00
parent 38d2083d06
commit 76e3454c4c
6 changed files with 311 additions and 0 deletions
+123
View File
@@ -0,0 +1,123 @@
package handlers
import (
"database/sql"
"errors"
"log"
"quay/app/models"
"quay/app/repository"
"github.com/gofiber/fiber/v3"
)
type GitServerHandler struct {
Repo repository.GitServerRepository
}
func NewGitServerHandler(repo repository.GitServerRepository) *GitServerHandler {
return &GitServerHandler{Repo: repo}
}
func (h *GitServerHandler) GetGitServers(c fiber.Ctx) error {
gs, err := h.Repo.ListGitServers()
if err != nil {
log.Println("Error listing gitservers: ", err)
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while listing git servers"})
}
if gs == nil {
gs = []models.GitServer{}
}
return c.JSON(gs)
}
func (h *GitServerHandler) GetGitServer(c fiber.Ctx) error {
id := c.Params("id")
g, err := h.Repo.GetGitServer(id)
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{Message: "Git server not found"})
}
log.Println("Error getting gitserver: ", err)
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while getting git server"})
}
if g == nil {
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{Message: "Git server not found"})
}
return c.JSON(g)
}
func validateIncomingGitServer(gs *models.GitServer) error {
return models.ValidateGitServer(gs)
}
func (h *GitServerHandler) PostGitServer(c fiber.Ctx) error {
var gs models.GitServer
if err := c.Bind().Body(&gs); err != nil {
log.Println("Error parsing body: ", err)
return c.Status(fiber.StatusBadRequest).JSON(&models.APIError{Message: "Invalid request body"})
}
if err := validateIncomingGitServer(&gs); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(&models.APIError{Message: "Invalid request body: " + err.Error()})
}
if err := h.Repo.CreateGitServer(&gs); err != nil {
log.Println("Error creating gitserver: ", err)
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while creating git server"})
}
return c.JSON(gs)
}
func (h *GitServerHandler) PutGitServer(c fiber.Ctx) error {
id := c.Params("id")
if _, err := h.Repo.GetGitServer(id); err != nil {
if errors.Is(err, sql.ErrNoRows) {
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{Message: "Git server not found"})
}
log.Println("Error checking gitserver before update: ", err)
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while updating git server"})
}
var gs models.GitServer
if err := c.Bind().Body(&gs); err != nil {
log.Println("Error parsing body: ", err)
return c.Status(fiber.StatusBadRequest).JSON(&models.APIError{Message: "Invalid request body"})
}
if err := validateIncomingGitServer(&gs); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(&models.APIError{Message: "Invalid request body: " + err.Error()})
}
gs.ID = id
if err := h.Repo.UpdateGitServer(&gs); err != nil {
log.Println("Error updating gitserver: ", err)
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while updating git server"})
}
updated, err := h.Repo.GetGitServer(id)
if err != nil {
log.Println("Error getting updated gitserver: ", err)
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Git server was updated but could not be retrieved"})
}
return c.JSON(updated)
}
func (h *GitServerHandler) DeleteGitServer(c fiber.Ctx) error {
id := c.Params("id")
if _, err := h.Repo.GetGitServer(id); err != nil {
if errors.Is(err, sql.ErrNoRows) {
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{Message: "Git server not found"})
}
log.Println("Error checking gitserver before delete: ", err)
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while deleting git server"})
}
if err := h.Repo.DeleteGitServer(id); err != nil {
log.Println("Error deleting gitserver: ", err)
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while deleting git server"})
}
return c.SendStatus(fiber.StatusNoContent)
}