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}