team.go

  1package cmd
  2
  3import (
  4	"github.com/charmbracelet/soft-serve/pkg/backend"
  5	"github.com/charmbracelet/soft-serve/pkg/proto"
  6	"github.com/spf13/cobra"
  7)
  8
  9// TeamCommand returns a command for managing teams.
 10func TeamCommand() *cobra.Command {
 11	cmd := &cobra.Command{
 12		Use:     "team",
 13		Aliases: []string{"teams"},
 14		Short:   "Manage teams",
 15	}
 16
 17	cmd.AddCommand(&cobra.Command{
 18		Use:   "create ORG NAME",
 19		Short: "Create a new team",
 20		Args:  cobra.ExactArgs(2),
 21		RunE: func(cmd *cobra.Command, args []string) error {
 22			ctx := cmd.Context()
 23			be := backend.FromContext(ctx)
 24			user := proto.UserFromContext(ctx)
 25			if user == nil {
 26				return proto.ErrUnauthorized
 27			}
 28
 29			org, err := be.FindOrganization(ctx, user, args[0])
 30			if err != nil {
 31				return err
 32			}
 33
 34			team, err := be.CreateTeam(ctx, org, user, args[1])
 35			if err != nil {
 36				return err
 37			}
 38
 39			cmd.Println("Created", team.Name())
 40
 41			return err
 42		},
 43	})
 44
 45	cmd.AddCommand(&cobra.Command{
 46		Use:   "list",
 47		Short: "List teams",
 48		Args:  cobra.NoArgs,
 49		RunE: func(cmd *cobra.Command, _ []string) error {
 50			ctx := cmd.Context()
 51			be := backend.FromContext(ctx)
 52			user := proto.UserFromContext(ctx)
 53			if user == nil {
 54				return proto.ErrUnauthorized
 55			}
 56			teams, err := be.ListTeams(ctx, user)
 57			if err != nil {
 58				return err
 59			}
 60			for _, o := range teams {
 61				cmd.Println(o.Name())
 62			}
 63			return nil
 64		},
 65	})
 66
 67	cmd.AddCommand(&cobra.Command{
 68		Use:   "delete ORG NAME",
 69		Short: "Delete team",
 70		Args:  cobra.ExactArgs(2),
 71		RunE: func(cmd *cobra.Command, args []string) error {
 72			ctx := cmd.Context()
 73			be := backend.FromContext(ctx)
 74			user := proto.UserFromContext(ctx)
 75			if user == nil {
 76				return proto.ErrUnauthorized
 77			}
 78
 79			org, err := be.FindOrganization(ctx, user, args[0])
 80			if err != nil {
 81				return err
 82			}
 83
 84			team, err := be.GetTeam(ctx, user, org, args[1])
 85			if err != nil {
 86				return err
 87			}
 88
 89			return be.DeleteTeam(ctx, user, team)
 90		},
 91	})
 92
 93	cmd.AddCommand(&cobra.Command{
 94		Use:   "get ORG NAME",
 95		Short: "Show team",
 96		Args:  cobra.ExactArgs(2),
 97		RunE: func(cmd *cobra.Command, args []string) error {
 98			ctx := cmd.Context()
 99			be := backend.FromContext(ctx)
100			user := proto.UserFromContext(ctx)
101			if user == nil {
102				return proto.ErrUnauthorized
103			}
104
105			org, err := be.FindOrganization(ctx, user, args[0])
106			if err != nil {
107				return err
108			}
109
110			team, err := be.GetTeam(ctx, user, org, args[1])
111			if err != nil {
112				return err
113			}
114
115			cmd.Println(org.Handle(), "/", team.Name())
116			return nil
117		},
118	})
119
120	return cmd
121}