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 editCmd = &cobra.Command{ Use: "edit [flags] (group) (field) (value)", Short: "Edit details for a group", Long: `Edit details, such as name or description, for a locally stored project group. Specify group by ID or name, which can be found with 'group list'. Specify either 'name' or 'description' as field. Specify new desired value as value.`, Args: cobra.ExactArgs(3), RunE: editExecute, } func editExecute(cmd *cobra.Command, args []string) error { groupId := args[0] field := args[1] value := args[2] if len(value) > 255 { return fmt.Errorf("given value is too long (%d): maximum allowed length is 255", len(value)) } db := database.DB() ctx := context.Background() group, err := gorm.G[models.ProjectGroup](db).Where("id = ?", groupId).First(ctx) if err == gorm.ErrRecordNotFound { group, err = gorm.G[models.ProjectGroup](db).Where("name = ?", groupId).First(ctx) if err == gorm.ErrRecordNotFound { return fmt.Errorf("no group with given name or ID found") } } switch field { case "name": group.Name = value case "description": group.Description = value default: return fmt.Errorf("uknown field '%s': expected 'name' or 'description'", field) } db.Save(&group) fmt.Println("Edited project!") return nil }