52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package group
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"git.zervo.org/zervo/worktime/internal/database"
|
|
"git.zervo.org/zervo/worktime/internal/database/models"
|
|
"github.com/spf13/cobra"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
var addCmd = &cobra.Command{
|
|
Use: "add [flags] (name) [description]",
|
|
Short: "Add a group",
|
|
Long: `Create a new locally stored project group`,
|
|
Args: cobra.MatchAll(cobra.MinimumNArgs(1), cobra.MaximumNArgs(2)),
|
|
RunE: addExecute,
|
|
}
|
|
|
|
func addExecute(cmd *cobra.Command, args []string) error {
|
|
name := args[0]
|
|
desc := ""
|
|
|
|
if len(args) > 1 {
|
|
desc = args[1]
|
|
}
|
|
|
|
if len(name) > 255 {
|
|
return fmt.Errorf("given name is too long (%d): maximum allowed length is 255", len(name))
|
|
}
|
|
|
|
db := database.DB()
|
|
ctx := context.Background()
|
|
|
|
_, err := gorm.G[models.ProjectGroup](db).Where("name = ?", name).First(ctx)
|
|
if err != gorm.ErrRecordNotFound {
|
|
return fmt.Errorf("group with this name already exists")
|
|
}
|
|
|
|
group := models.ProjectGroup{
|
|
Name: name,
|
|
Description: desc,
|
|
}
|
|
|
|
err = gorm.G[models.ProjectGroup](db).Create(ctx, &group)
|
|
if err != nil {
|
|
return fmt.Errorf("could not add group: %v", err)
|
|
}
|
|
|
|
return nil
|
|
}
|