Skip to content

Commit

Permalink
cli: Add users_bookmarks command
Browse files Browse the repository at this point in the history
  • Loading branch information
nicholaspcr committed Feb 6, 2024
1 parent a87b670 commit c60bc82
Showing 1 changed file with 194 additions and 0 deletions.
194 changes: 194 additions & 0 deletions cmd/ttn-lw-cli/commands/users_bookmarks.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
// Copyright © 2024 The Things Network Foundation, The Things Industries B.V.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package commands

import (
"os"

"github.com/spf13/cobra"
"github.com/spf13/pflag"
"go.thethings.network/lorawan-stack/v3/cmd/internal/io"
"go.thethings.network/lorawan-stack/v3/cmd/ttn-lw-cli/internal/api"
"go.thethings.network/lorawan-stack/v3/cmd/ttn-lw-cli/internal/util"
"go.thethings.network/lorawan-stack/v3/pkg/ttnpb"
)

var entityIDFlags = util.NormalizedFlagSet()

var userBookmarks = &cobra.Command{
Use: "bookmarks",
Aliases: []string{"bm", "bookmark"},
Short: "Manage user bookmarks",
}

func getEntityID(flags *pflag.FlagSet) *ttnpb.EntityIdentifiers {
if s, err := flags.GetString("entity-ids.application-id"); s != "" && err == nil {
if devID, err := flags.GetString("entity-ids.device-id"); devID != "" && err == nil {
return (&ttnpb.EndDeviceIdentifiers{
ApplicationIds: &ttnpb.ApplicationIdentifiers{ApplicationId: s},
DeviceId: devID,
}).GetEntityIdentifiers()
}

return (&ttnpb.ApplicationIdentifiers{ApplicationId: s}).GetEntityIdentifiers()
}
if s, err := flags.GetString("entity-ids.client-id"); s != "" && err == nil {
return (&ttnpb.ClientIdentifiers{ClientId: s}).GetEntityIdentifiers()
}
if s, err := flags.GetString("entity-ids.device-id"); s != "" && err == nil {
if appID, err := flags.GetString("entity-ids.application-id"); appID != "" && err == nil {
return (&ttnpb.EndDeviceIdentifiers{
ApplicationIds: &ttnpb.ApplicationIdentifiers{ApplicationId: appID},
DeviceId: s,
}).GetEntityIdentifiers()
}
}
if s, err := flags.GetString("entity-ids.gateway-id"); s != "" && err == nil {
return (&ttnpb.GatewayIdentifiers{GatewayId: s}).GetEntityIdentifiers()
}
if s, err := flags.GetString("entity-ids.organization-id"); s != "" && err == nil {
return (&ttnpb.OrganizationIdentifiers{OrganizationId: s}).GetEntityIdentifiers()
}
if s, err := flags.GetString("entity-ids.user-id"); s != "" && err == nil {
return (&ttnpb.UserIdentifiers{UserId: s}).GetEntityIdentifiers()
}
return nil
}

var (
userBookmarksCreate = &cobra.Command{
Use: "create",
Short: "Create a new user bookmark",
RunE: func(cmd *cobra.Command, args []string) error {
usrID := getUserID(cmd.Flags(), args)
if usrID == nil {
return errNoUserID.New()
}

entityID := getEntityID(cmd.Flags())

is, err := api.Dial(ctx, config.IdentityServerGRPCAddress)
if err != nil {
return err
}
res, err := ttnpb.NewUserBookmarkRegistryClient(is).Create(ctx, &ttnpb.CreateUserBookmarkRequest{
UserIds: usrID,
EntityIds: entityID,
})
if err != nil {
return err
}

return io.Write(os.Stdout, config.OutputFormat, res)
},
}

userBookmarksList = &cobra.Command{
Use: "list",
Short: "List user's bookmarks",
RunE: func(cmd *cobra.Command, args []string) error {
usrID := getUserID(cmd.Flags(), args)
if usrID == nil {
return errNoUserID.New()
}
req := &ttnpb.ListUserBookmarksRequest{UserIds: usrID}
_, err := req.SetFromFlags(cmd.Flags(), "")
if err != nil {
return err
}

is, err := api.Dial(ctx, config.IdentityServerGRPCAddress)
if err != nil {
return err
}
res, err := ttnpb.NewUserBookmarkRegistryClient(is).List(ctx, req)
if err != nil {
return err
}

return io.Write(os.Stdout, config.OutputFormat, res)
},
}

userBookmarksDelete = &cobra.Command{
Use: "delete",
Short: "Delete a user's bookmarks",
RunE: func(cmd *cobra.Command, args []string) error {
usrID := getUserID(cmd.Flags(), args)
if usrID == nil {
return errNoUserID.New()
}

entityID := getEntityID(cmd.Flags())

is, err := api.Dial(ctx, config.IdentityServerGRPCAddress)
if err != nil {
return err
}
res, err := ttnpb.NewUserBookmarkRegistryClient(is).Delete(ctx, &ttnpb.DeleteUserBookmarkRequest{
UserIds: usrID,
EntityIds: entityID,
})
if err != nil {
return err
}

return io.Write(os.Stdout, config.OutputFormat, res)
},
}

userBookmarksDeleteAll = &cobra.Command{
Use: "delete-all",
Short: "Delete all user's bookmarks",
RunE: func(cmd *cobra.Command, args []string) error {
usrID := getUserID(cmd.Flags(), args)
if usrID == nil {
return errNoUserID.New()
}

is, err := api.Dial(ctx, config.IdentityServerGRPCAddress)
if err != nil {
return err
}
res, err := ttnpb.NewUserBookmarkRegistryClient(is).DeleteAll(ctx, usrID)
if err != nil {
return err
}

return io.Write(os.Stdout, config.OutputFormat, res)
},
}
)

func init() {
entityIDFlags.String("entity-ids.application-id", "", "Application ID")
entityIDFlags.String("entity-ids.client-id", "", "Client ID")
entityIDFlags.String("entity-ids.gateway-id", "", "Gateway ID")
entityIDFlags.String("entity-ids.organization-id", "", "Organization ID")
entityIDFlags.String("entity-ids.user-id", "", "User ID")
entityIDFlags.String("entity-ids.device-id", "", "User ID")
userBookmarksCreate.Flags().AddFlagSet(userIDFlags())
userBookmarksCreate.Flags().AddFlagSet(entityIDFlags)
userBookmarks.AddCommand(userBookmarksCreate)
ttnpb.AddSetFlagsForListUserBookmarksRequest(userBookmarksList.Flags(), "", false)
userBookmarksList.Flags().AddFlagSet(userIDFlags())
userBookmarks.AddCommand(userBookmarksList)
userBookmarksDelete.Flags().AddFlagSet(entityIDFlags)
userBookmarksDelete.Flags().AddFlagSet(userIDFlags())
userBookmarks.AddCommand(userBookmarksDelete)
userBookmarksDeleteAll.Flags().AddFlagSet(userIDFlags())
userBookmarks.AddCommand(userBookmarksDeleteAll)
usersCommand.AddCommand(userBookmarks)
}

0 comments on commit c60bc82

Please sign in to comment.