workspace.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package handlers
  2. import (
  3. "net/http"
  4. "git.linuxforward.com/byom/byom-core/common"
  5. "git.linuxforward.com/byom/byom-core/logger"
  6. "git.linuxforward.com/byom/byom-core/store"
  7. "github.com/gin-gonic/gin"
  8. "github.com/google/uuid"
  9. "github.com/sirupsen/logrus"
  10. )
  11. type WorkspaceHandler struct {
  12. store *store.DataStore
  13. logger *logrus.Entry
  14. }
  15. func NewWorkspaceHandler(db *store.DataStore) *WorkspaceHandler {
  16. return &WorkspaceHandler{
  17. store: db,
  18. logger: logger.NewLogger("workspace-handler"),
  19. }
  20. }
  21. // Workspace Management
  22. func (h *WorkspaceHandler) Create(c *gin.Context) {
  23. var req common.WorkspaceCreateRequest
  24. if err := c.ShouldBindJSON(&req); err != nil {
  25. c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request"})
  26. return
  27. }
  28. workspace := &common.Workspace{
  29. ID: uuid.New(),
  30. Name: req.Name,
  31. }
  32. if err := h.store.CreateWorkspace(c, workspace); err != nil {
  33. h.logger.WithError(err).Error("failed to create workspace")
  34. c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to create workspace"})
  35. return
  36. }
  37. c.JSON(http.StatusCreated, common.WorkspaceCreateResponse{
  38. ID: workspace.ID,
  39. Name: workspace.Name,
  40. })
  41. }
  42. func (h *WorkspaceHandler) Get(c *gin.Context) {
  43. id := c.Param("id")
  44. if id == "" {
  45. c.JSON(http.StatusBadRequest, gin.H{"error": "Workspace ID is required"})
  46. return
  47. }
  48. workspaceID, err := uuid.Parse(id)
  49. if err != nil {
  50. c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid workspace ID format"})
  51. return
  52. }
  53. workspace, err := h.store.GetWorkspace(c, workspaceID.String())
  54. if err != nil {
  55. h.logger.WithError(err).Error("failed to get workspace")
  56. c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to get workspace"})
  57. return
  58. }
  59. c.JSON(http.StatusOK, workspace)
  60. }