github.com/lino-network/lino@v0.6.11/x/post/client/cli/tx.go (about)

     1  package cli
     2  
     3  import (
     4  	"github.com/cosmos/cosmos-sdk/codec"
     5  	"github.com/spf13/cobra"
     6  	"github.com/spf13/viper"
     7  
     8  	"github.com/lino-network/lino/client"
     9  	linotypes "github.com/lino-network/lino/types"
    10  	"github.com/lino-network/lino/x/post/types"
    11  )
    12  
    13  const (
    14  	FlagAuthor  = "author"
    15  	FlagPostID  = "post-id"
    16  	FlagTitle   = "title"
    17  	FlagContent = "content"
    18  	FlagPreauth = "preauth"
    19  
    20  	FlagDonator = "donator"
    21  	FlagAmount  = "amount"
    22  	FlagMemo    = "memo"
    23  	FlagApp     = "app"
    24  	FlagSigner  = "signer"
    25  )
    26  
    27  func GetTxCmd(cdc *codec.Codec) *cobra.Command {
    28  	cmd := &cobra.Command{
    29  		Use:                        types.ModuleName,
    30  		Short:                      "Post tx subcommands",
    31  		DisableFlagParsing:         true,
    32  		SuggestionsMinimumDistance: 2,
    33  		RunE:                       client.ValidateCmd,
    34  	}
    35  
    36  	cmd.AddCommand(client.PostCommands(
    37  		GetCmdCreatePost(cdc),
    38  		GetCmdDeletePost(cdc),
    39  		GetCmdUpdatePost(cdc),
    40  		GetCmdDonate(cdc),
    41  		GetCmdIDADonate(cdc),
    42  	)...)
    43  
    44  	return cmd
    45  }
    46  
    47  // GetCmdCreatePost - create post.
    48  func GetCmdCreatePost(cdc *codec.Codec) *cobra.Command {
    49  	cmd := &cobra.Command{
    50  		Use:   "create ",
    51  		Short: "create <created-by> --author <author> --post-id <id> --title <title> --content <content> --preauth=true/false",
    52  		Args:  cobra.ExactArgs(1),
    53  		RunE: func(cmd *cobra.Command, args []string) error {
    54  			ctx := client.NewCoreContextFromViper().WithTxEncoder(linotypes.TxEncoder(cdc))
    55  			createdBy := linotypes.AccountKey(args[0])
    56  			msg := types.CreatePostMsg{
    57  				Author:    linotypes.AccountKey(viper.GetString(FlagAuthor)),
    58  				PostID:    viper.GetString(FlagPostID),
    59  				Title:     viper.GetString(FlagTitle),
    60  				Content:   viper.GetString(FlagContent),
    61  				CreatedBy: createdBy,
    62  				Preauth:   viper.GetBool(FlagPreauth),
    63  			}
    64  			return ctx.DoTxPrintResponse(msg)
    65  		},
    66  	}
    67  	cmd.Flags().String(FlagAuthor, "", "author of this post")
    68  	cmd.Flags().String(FlagPostID, "", "post id to identify this post for the author")
    69  	cmd.Flags().String(FlagTitle, "", "title for the post")
    70  	cmd.Flags().String(FlagContent, "", "content for the post")
    71  	cmd.Flags().Bool(FlagPreauth, false, "application(developer) that creates the post")
    72  	for _, v := range []string{FlagAuthor, FlagPostID, FlagPreauth} {
    73  		_ = cmd.MarkFlagRequired(v)
    74  	}
    75  	return cmd
    76  }
    77  
    78  // GetCmdUpdatePost - update post info.
    79  func GetCmdUpdatePost(cdc *codec.Codec) *cobra.Command {
    80  	cmd := &cobra.Command{
    81  		Use:   "update",
    82  		Short: "update <author> <postid> --title <title> --content <content>",
    83  		Args:  cobra.ExactArgs(2),
    84  		RunE: func(cmd *cobra.Command, args []string) error {
    85  			ctx := client.NewCoreContextFromViper().WithTxEncoder(linotypes.TxEncoder(cdc))
    86  			author := linotypes.AccountKey(args[0])
    87  			postid := args[1]
    88  
    89  			msg := types.UpdatePostMsg{
    90  				Author:  author,
    91  				PostID:  postid,
    92  				Title:   viper.GetString(FlagTitle),
    93  				Content: viper.GetString(FlagContent),
    94  			}
    95  			return ctx.DoTxPrintResponse(msg)
    96  		},
    97  	}
    98  	cmd.Flags().String(FlagTitle, "", "title for the post")
    99  	cmd.Flags().String(FlagContent, "", "content for the post")
   100  	return cmd
   101  }
   102  
   103  // GetCmdDeletePost -
   104  func GetCmdDeletePost(cdc *codec.Codec) *cobra.Command {
   105  	cmd := &cobra.Command{
   106  		Use:   "delete",
   107  		Short: "delete <author> <postid>",
   108  		Args:  cobra.ExactArgs(2),
   109  		RunE: func(cmd *cobra.Command, args []string) error {
   110  			ctx := client.NewCoreContextFromViper().WithTxEncoder(linotypes.TxEncoder(cdc))
   111  			author := linotypes.AccountKey(args[0])
   112  			postid := args[1]
   113  			msg := types.DeletePostMsg{
   114  				Author: author,
   115  				PostID: postid,
   116  			}
   117  			return ctx.DoTxPrintResponse(msg)
   118  		},
   119  	}
   120  	return cmd
   121  }
   122  
   123  // GetCmdDonate -
   124  func GetCmdDonate(cdc *codec.Codec) *cobra.Command {
   125  	cmd := &cobra.Command{
   126  		Use:   "donate",
   127  		Short: "donate <donator> --amount <amount> --author <author> --post-id <id> --app <app> --memo <memo>",
   128  		Args:  cobra.ExactArgs(1),
   129  		RunE: func(cmd *cobra.Command, args []string) error {
   130  			ctx := client.NewCoreContextFromViper().WithTxEncoder(linotypes.TxEncoder(cdc))
   131  			from := linotypes.AccountKey(args[0])
   132  			msg := types.DonateMsg{
   133  				Username: from,
   134  				Amount:   viper.GetString(FlagAmount),
   135  				Author:   linotypes.AccountKey(viper.GetString(FlagAuthor)),
   136  				PostID:   viper.GetString(FlagPostID),
   137  				FromApp:  linotypes.AccountKey(viper.GetString(FlagApp)),
   138  				Memo:     viper.GetString(FlagMemo),
   139  			}
   140  			return ctx.DoTxPrintResponse(msg)
   141  		},
   142  	}
   143  	cmd.Flags().String(FlagAuthor, "", "author of this post")
   144  	cmd.Flags().String(FlagPostID, "", "post id to identify this post for the author")
   145  	cmd.Flags().String(FlagAmount, "", "amount of the donation")
   146  	cmd.Flags().String(FlagMemo, "", "memo of this donation")
   147  	cmd.Flags().String(FlagApp, "", "donation comes from app")
   148  	for _, v := range []string{FlagAuthor, FlagPostID, FlagAmount} {
   149  		_ = cmd.MarkFlagRequired(v)
   150  	}
   151  	return cmd
   152  }
   153  
   154  // GetCmdIDADonate -
   155  func GetCmdIDADonate(cdc *codec.Codec) *cobra.Command {
   156  	cmd := &cobra.Command{
   157  		Use:   "ida-donate",
   158  		Short: "ida-donate <signer> --amount <amount> --author <author> --post-id <id> --app <app> --memo <memo> --donator <donator>",
   159  		Args:  cobra.ExactArgs(1),
   160  		RunE: func(cmd *cobra.Command, args []string) error {
   161  			ctx := client.NewCoreContextFromViper().WithTxEncoder(linotypes.TxEncoder(cdc))
   162  			signer := linotypes.AccountKey(args[0])
   163  			msg := types.IDADonateMsg{
   164  				Username: linotypes.AccountKey(viper.GetString(FlagDonator)),
   165  				App:      linotypes.AccountKey(viper.GetString(FlagApp)),
   166  				Amount:   linotypes.IDAStr(viper.GetString(FlagAmount)),
   167  				Author:   linotypes.AccountKey(viper.GetString(FlagAuthor)),
   168  				PostID:   viper.GetString(FlagPostID),
   169  				Memo:     viper.GetString(FlagMemo),
   170  				Signer:   signer,
   171  			}
   172  			return ctx.DoTxPrintResponse(msg)
   173  		},
   174  	}
   175  	cmd.Flags().String(FlagDonator, "", "donator of this transaction")
   176  	cmd.Flags().String(FlagAuthor, "", "author of the target post")
   177  	cmd.Flags().String(FlagPostID, "", "post id of the target post")
   178  	cmd.Flags().String(FlagAmount, "", "amount of the donation")
   179  	cmd.Flags().String(FlagMemo, "", "memo of this donation")
   180  	cmd.Flags().String(FlagApp, "", "App's IDA")
   181  	for _, v := range []string{FlagDonator, FlagAuthor, FlagPostID, FlagAmount, FlagApp} {
   182  		_ = cmd.MarkFlagRequired(v)
   183  	}
   184  	return cmd
   185  }