org.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// OrgCommand returns a command for managing organizations.
10func OrgCommand() *cobra.Command {
11	cmd := &cobra.Command{
12		Use:     "org",
13		Aliases: []string{"orgs", "organization", "organizations"},
14		Short:   "Manage organizations",
15	}
16
17	cmd.AddCommand(&cobra.Command{
18		Use:   "create NAME EMAIL",
19		Short: "Create a new organization",
20		Args:  cobra.ExactArgs(2),
21		RunE: func(cmd *cobra.Command, args []string) error {
22			ctx := cmd.Context()
23			be := backend.FromContext(ctx)
24			owner := proto.UserFromContext(ctx)
25			if owner == nil {
26				return proto.ErrUnauthorized
27			}
28			_, err := be.CreateOrg(ctx, owner, args[0], args[1])
29			return err
30		},
31	})
32	cmd.AddCommand(&cobra.Command{
33		Use:   "list",
34		Short: "List organizations",
35		Args:  cobra.NoArgs,
36		RunE: func(cmd *cobra.Command, _ []string) error {
37			ctx := cmd.Context()
38			be := backend.FromContext(ctx)
39			user := proto.UserFromContext(ctx)
40			if user == nil {
41				return proto.ErrUnauthorized
42			}
43			orgs, err := be.ListOrgs(ctx, user)
44			if err != nil {
45				return err
46			}
47			for _, o := range orgs {
48				cmd.Println(o.Name())
49			}
50			return nil
51		},
52	})
53
54	cmd.AddCommand(&cobra.Command{
55		Use:   "delete NAME",
56		Short: "Delete organization",
57		Args:  cobra.ExactArgs(1),
58		RunE: func(cmd *cobra.Command, args []string) error {
59			ctx := cmd.Context()
60			be := backend.FromContext(ctx)
61			user := proto.UserFromContext(ctx)
62			if user == nil {
63				return proto.ErrUnauthorized
64			}
65			return be.DeleteOrganization(ctx, user, args[0])
66		},
67	})
68
69	cmd.AddCommand(&cobra.Command{
70		Use:   "get NAME",
71		Short: "Show organization",
72		Args:  cobra.ExactArgs(1),
73		RunE: func(cmd *cobra.Command, args []string) error {
74			ctx := cmd.Context()
75			be := backend.FromContext(ctx)
76			user := proto.UserFromContext(ctx)
77			if user == nil {
78				return proto.ErrUnauthorized
79			}
80			org, err := be.FindOrganization(ctx, user, args[0])
81			if err != nil {
82				return err
83			}
84			cmd.Println(org.Name())
85			return nil
86		},
87	})
88
89	return cmd
90}