github.com/grokify/go-ringcentral-client@v0.3.31/engagedigital/v1/examples/team_create/main.go (about)

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"log"
     7  	"time"
     8  
     9  	"github.com/antihax/optional"
    10  	"github.com/grokify/mogo/fmt/fmtutil"
    11  	"github.com/jessevdk/go-flags"
    12  
    13  	engagedigital "github.com/grokify/go-ringcentral-client/engagedigital/v1/client"
    14  	utils "github.com/grokify/go-ringcentral-client/engagedigital/v1/util"
    15  )
    16  
    17  type options struct {
    18  	Site   string `short:"s" long:"site" description:"A site" required:"true"`
    19  	Token  string `short:"t" long:"token" description:"A token" required:"true"`
    20  	Update []bool `short:"u" long:"update" description:"Update team"`
    21  	//Object string `short:"o" long:"object" description:"An object" required:"true"`
    22  	//Id     string `short:"i" long:"id" description:"An object id" required:"false"`
    23  }
    24  
    25  func getUsers(client *engagedigital.APIClient) (engagedigital.GetAllUsersResponse, error) {
    26  	apiResp := engagedigital.GetAllUsersResponse{}
    27  	info, resp, err := client.UsersApi.GetAllUsers(context.Background(), nil)
    28  	if err != nil {
    29  		log.Fatal(err)
    30  		return apiResp, err
    31  	} else if resp.StatusCode != 200 {
    32  		return apiResp, fmt.Errorf("API Response [%v]", resp.StatusCode)
    33  	}
    34  	return info, nil
    35  }
    36  
    37  func getTeams(client *engagedigital.APIClient) (engagedigital.GetAllTeamsResponse, error) {
    38  	apiResp := engagedigital.GetAllTeamsResponse{}
    39  	info, resp, err := client.TeamsApi.GetAllTeams(context.Background(), nil)
    40  	if err != nil {
    41  		log.Fatal(err)
    42  		return apiResp, err
    43  	} else if resp.StatusCode != 200 {
    44  		return apiResp, fmt.Errorf("API Response [%v]", resp.StatusCode)
    45  	}
    46  	return info, nil
    47  }
    48  
    49  func main() {
    50  	opts := options{}
    51  	_, err := flags.Parse(&opts)
    52  	if err != nil {
    53  		log.Fatal(err)
    54  	}
    55  
    56  	client := utils.NewApiClient(opts.Site, opts.Token)
    57  
    58  	usersApiResp, err := getUsers(client)
    59  	if err != nil {
    60  		log.Fatal(err)
    61  	}
    62  
    63  	t := time.Now()
    64  	teamName := fmt.Sprintf("TestTeam:%s", t.Format(time.RFC3339))
    65  
    66  	leaderIds := []string{}
    67  	userIds := []string{}
    68  
    69  	for i, user := range usersApiResp.Records {
    70  		if i == 0 {
    71  			leaderIds = append(leaderIds, user.Id)
    72  		} else {
    73  			userIds = append(userIds, user.Id)
    74  		}
    75  	}
    76  
    77  	if len(opts.Update) == 0 {
    78  		apiOpts := engagedigital.CreateTeamOpts{
    79  			Name:      optional.NewString(teamName),
    80  			LeaderIds: optional.NewInterface(leaderIds)}
    81  		if len(userIds) > 0 {
    82  			apiOpts.UserIds = optional.NewInterface(userIds)
    83  		}
    84  
    85  		info, resp, err := client.TeamsApi.CreateTeam(context.Background(), &apiOpts)
    86  		if err != nil {
    87  			log.Fatal(err)
    88  		} else if resp.StatusCode != 200 {
    89  			log.Fatal(resp.StatusCode)
    90  		}
    91  		fmt.Println("CREATE_TEAM")
    92  		fmtutil.PrintJSON(info)
    93  	} else {
    94  		teamsApiResp, err := getTeams(client)
    95  		if err != nil {
    96  			log.Fatal(err)
    97  		}
    98  		if len(teamsApiResp.Records) == 0 {
    99  			log.Fatal("E_NO_TEAMS_TO_UPDATE")
   100  		}
   101  		team1 := teamsApiResp.Records[0]
   102  		teamId := team1.Id
   103  		apiOpts := engagedigital.UpdateTeamOpts{
   104  			Name:      optional.NewString(teamName),
   105  			LeaderIds: optional.NewInterface(leaderIds)}
   106  		if len(userIds) > 0 {
   107  			apiOpts.UserIds = optional.NewInterface(userIds)
   108  		}
   109  
   110  		info, resp, err := client.TeamsApi.UpdateTeam(context.Background(), teamId, &apiOpts)
   111  		if err != nil {
   112  			log.Fatal(err)
   113  		} else if resp.StatusCode != 200 {
   114  			log.Fatal(resp.StatusCode)
   115  		}
   116  		fmt.Println("UPDATE_TEAM")
   117  		fmtutil.PrintJSON(info)
   118  	}
   119  
   120  	fmt.Println("DONE")
   121  }