package handlers import ( "net/http" "git.linuxforward.com/byom/byom-core/common" "git.linuxforward.com/byom/byom-core/logger" "git.linuxforward.com/byom/byom-core/store" "github.com/gin-gonic/gin" "github.com/google/uuid" "github.com/sirupsen/logrus" ) type WorkspaceHandler struct { store *store.DataStore logger *logrus.Entry } func NewWorkspaceHandler(db *store.DataStore) *WorkspaceHandler { return &WorkspaceHandler{ store: db, logger: logger.NewLogger("workspace-handler"), } } // Workspace Management func (h *WorkspaceHandler) Create(c *gin.Context) { var req common.WorkspaceCreateRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request"}) return } workspace := &common.Workspace{ ID: uuid.New(), Name: req.Name, } if err := h.store.CreateWorkspace(c, workspace); err != nil { h.logger.WithError(err).Error("failed to create workspace") c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to create workspace"}) return } c.JSON(http.StatusCreated, common.WorkspaceCreateResponse{ ID: workspace.ID, Name: workspace.Name, }) } func (h *WorkspaceHandler) Get(c *gin.Context) { id := c.Param("id") if id == "" { c.JSON(http.StatusBadRequest, gin.H{"error": "Workspace ID is required"}) return } workspaceID, err := uuid.Parse(id) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid workspace ID format"}) return } workspace, err := h.store.GetWorkspace(c, workspaceID.String()) if err != nil { h.logger.WithError(err).Error("failed to get workspace") c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to get workspace"}) return } c.JSON(http.StatusOK, workspace) }