github.com/grokify/go-ringcentral-client@v0.3.31/engagedigital/v1/examples/role_create_update/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/errors/errorsutil"
    11  	"github.com/grokify/mogo/fmt/fmtutil"
    12  	"github.com/jessevdk/go-flags"
    13  
    14  	engagedigital "github.com/grokify/go-ringcentral-client/engagedigital/v1/client"
    15  	utils "github.com/grokify/go-ringcentral-client/engagedigital/v1/util"
    16  )
    17  
    18  type options struct {
    19  	Site   string `short:"s" long:"site" description:"A site" required:"true"`
    20  	Token  string `short:"t" long:"token" description:"A token" required:"true"`
    21  	Action string `short:"a" long:"action" description:"A action(create|update)" required:"true"`
    22  }
    23  
    24  func GetRole(client *engagedigital.APIClient, roleName string) (engagedigital.Role, error) {
    25  	info, resp, err := client.RolesApi.GetAllRoles(context.Background(), nil)
    26  	if err != nil {
    27  		err = errorsutil.Wrap(err, "E_GET_ALL_ROLES")
    28  		return engagedigital.Role{}, err
    29  	} else if resp.StatusCode != 200 {
    30  		return engagedigital.Role{}, fmt.Errorf("E_STATUS_CODE [%v]", resp.StatusCode)
    31  	}
    32  	for _, role := range info.Records {
    33  		if role.Label == roleName {
    34  			return role, nil
    35  		}
    36  	}
    37  	return engagedigital.Role{}, fmt.Errorf("E_ROLE_NOT_FOUND [%v]", roleName)
    38  }
    39  
    40  func main() {
    41  	opts := options{}
    42  	_, err := flags.Parse(&opts)
    43  	if err != nil {
    44  		log.Fatal(err)
    45  	}
    46  
    47  	client := utils.NewApiClient(opts.Site, opts.Token)
    48  
    49  	switch opts.Action {
    50  	case "create":
    51  		dt := time.Now()
    52  		roleLabel := "TestRole+" + dt.Format(time.RFC3339)
    53  		apiOpts := &engagedigital.CreateRoleOpts{
    54  			UseEmoji: optional.NewBool(true)}
    55  		info, resp, err := client.RolesApi.CreateRole(
    56  			context.Background(), roleLabel, apiOpts)
    57  		if err != nil {
    58  			log.Fatal(err)
    59  		} else if resp.StatusCode != 200 {
    60  			log.Fatal(resp.StatusCode)
    61  		}
    62  		fmtutil.PrintJSON(info)
    63  	case "update":
    64  		roleName := "Agent"
    65  		role, err := GetRole(client, roleName)
    66  		if err != nil {
    67  			log.Fatal(err)
    68  		}
    69  
    70  		apiOpts := &engagedigital.UpdateRoleOpts{}
    71  		if role.UseEmoji {
    72  			apiOpts.UseEmoji = optional.NewBool(false)
    73  		} else {
    74  			apiOpts.UseEmoji = optional.NewBool(true)
    75  		}
    76  
    77  		info, resp, err := client.RolesApi.UpdateRole(
    78  			context.Background(), role.Id, apiOpts)
    79  		if err != nil {
    80  			log.Fatal(err)
    81  		} else if resp.StatusCode != 200 {
    82  			log.Fatal(resp.StatusCode)
    83  		}
    84  		fmtutil.PrintJSON(info)
    85  	}
    86  	fmt.Println("DONE")
    87  }