diff --git a/go.mod b/go.mod index 4305efc..bd6c5f5 100644 --- a/go.mod +++ b/go.mod @@ -8,6 +8,7 @@ require ( github.com/gin-gonic/gin v1.11.0 github.com/go-playground/assert/v2 v2.2.0 github.com/golang-jwt/jwt/v5 v5.3.0 + github.com/google/uuid v1.3.0 golang.org/x/crypto v0.43.0 ) @@ -25,7 +26,6 @@ require ( github.com/go-playground/validator/v10 v10.27.0 // indirect github.com/goccy/go-json v0.10.2 // indirect github.com/goccy/go-yaml v1.18.0 // indirect - github.com/google/uuid v1.3.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/json-iterator/go v1.1.12 // indirect diff --git a/handlers/workspace.go b/handlers/workspace.go index 8ad74e5..5b23d21 100644 --- a/handlers/workspace.go +++ b/handlers/workspace.go @@ -3,11 +3,13 @@ package handlers import ( "fmt" "net/http" + "os" "slices" "strconv" "gitea.tecamino.com/paadi/access-handler/models" "github.com/gin-gonic/gin" + "github.com/google/uuid" ) func (aH *AccessHandler) AddWorkspaceTable() error { @@ -30,10 +32,26 @@ func (aH *AccessHandler) AddWorkspace(c *gin.Context) { return } + uid, err := uuid.NewUUID() + if err != nil { + aH.logger.Error("AddWorkspace", err) + c.JSON(http.StatusBadRequest, models.NewJsonErrorResponse(err)) + return + } + + // create new folder + err = os.MkdirAll(uid.String(), 0644) + if err != nil { + aH.logger.Error("AddWorkspace", err) + c.JSON(http.StatusBadRequest, models.NewJsonErrorResponse(err)) + return + } + // Insert new workspace with provided permissions aH.dbHandler.AddNewColum(&models.Workspace{ Name: workspace.Name, Description: workspace.Description, + Uuid: uid, }) c.JSON(http.StatusOK, gin.H{ diff --git a/models/workspace.go b/models/workspace.go index 9654ccf..32e4559 100644 --- a/models/workspace.go +++ b/models/workspace.go @@ -1,8 +1,11 @@ package models +import "github.com/google/uuid" + type Workspace struct { - Id uint `gorm:"primaryKey" json:"id"` - Name string `gorm:"column:name" json:"name"` - Description string `gorm:"type:json" json:"description"` - Users []*User `gorm:"many2many:users_workspaces;" ` + Id uint `gorm:"primaryKey" json:"id"` + Name string `gorm:"column:name" json:"name"` + Description string `gorm:"type:json" json:"description"` + Uuid uuid.UUID `gorm:"type:text" json:"uuid"` + Users []*User `gorm:"many2many:users_workspaces;" ` }