57 lines
1.4 KiB
Go
57 lines
1.4 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 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
|
|
}
|