123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- package handlers
- import (
- "fmt"
- "net/http"
- "git.linuxforward.com/byop/byop-engine/models"
- "git.linuxforward.com/byop/byop-engine/services"
- "github.com/gin-gonic/gin"
- )
- // ClientHandler handles client-related operations
- type ClientHandler struct {
- service *services.ClientService
- }
- // NewClientHandler creates a new ClientHandler
- func NewClientHandler(service *services.ClientService) *ClientHandler {
- return &ClientHandler{
- service: service,
- }
- }
- // ListClients returns all clients
- func (h *ClientHandler) ListClients(c *gin.Context) {
- filter := make(map[string]interface{})
- // Attempt to bind query parameters, but allow empty filters
- if err := c.ShouldBindQuery(&filter); err != nil && len(filter) > 0 {
- c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid query parameters"})
- return
- }
- clients, err := h.service.ListClients(nil)
- if err != nil {
- c.JSON(http.StatusInternalServerError, gin.H{"error": fmt.Sprintf("Failed to fetch clients: %v", err)})
- return
- }
- c.JSON(http.StatusOK, clients)
- }
- // CreateClient creates a new client
- func (h *ClientHandler) CreateClient(c *gin.Context) {
- var client models.Client
- if err := c.ShouldBindJSON(&client); err != nil {
- c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request body"})
- return
- }
- if err := h.service.CreateClient(&client); err != nil {
- c.JSON(http.StatusInternalServerError, gin.H{"error": fmt.Sprintf("Failed to create client: %v", err)})
- return
- }
- c.JSON(http.StatusCreated, client)
- }
- // GetClient returns a specific client
- func (h *ClientHandler) GetClient(c *gin.Context) {
- id := c.Param("id")
- client, err := h.service.GetClient(id)
- if err != nil {
- c.JSON(http.StatusInternalServerError, gin.H{"error": fmt.Sprintf("Failed to fetch client: %v", err)})
- return
- }
- if client == nil {
- c.JSON(http.StatusNotFound, gin.H{"error": "Client not found"})
- return
- }
- c.JSON(http.StatusOK, client)
- }
- // UpdateClient updates a client
- func (h *ClientHandler) UpdateClient(c *gin.Context) {
- id := c.Param("id")
- // Parse updated client data
- var updatedClient models.Client
- if err := c.ShouldBindJSON(&updatedClient); err != nil {
- c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request body"})
- return
- }
- // Set the ID to ensure it matches the URL parameter
- updatedClient.ID = id
- if err := h.service.UpdateClient(&updatedClient); err != nil {
- c.JSON(http.StatusInternalServerError, gin.H{"error": fmt.Sprintf("Failed to update client: %v", err)})
- return
- }
- c.JSON(http.StatusOK, updatedClient)
- }
- // DeleteClient deletes a client
- func (h *ClientHandler) DeleteClient(c *gin.Context) {
- id := c.Param("id")
- if err := h.service.DeleteClient(id); err != nil {
- c.JSON(http.StatusInternalServerError, gin.H{"error": fmt.Sprintf("Failed to delete client: %v", err)})
- return
- }
- c.Status(http.StatusNoContent)
- }
- // GetClientDeployments returns all deployments for a client
- func (h *ClientHandler) GetClientDeployments(c *gin.Context) {
- id := c.Param("id")
- // Check if client exists
- client, err := h.service.GetClient(id)
- if err != nil {
- c.JSON(http.StatusInternalServerError, gin.H{"error": fmt.Sprintf("Failed to fetch client: %v", err)})
- return
- }
- if client == nil {
- c.JSON(http.StatusNotFound, gin.H{"error": "Client not found"})
- return
- }
- // TODO: Retrieve deployments - this likely requires a separate repository or service
- // For now, return an empty list
- deployments := []models.Deployment{}
- c.JSON(http.StatusOK, deployments)
- }
|