worktime/internal/cli/commands/group/add.go
2025-11-07 13:40:22 +01:00

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
}