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}