diff --git a/ignite/templates/typed/list/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}.go.plush b/ignite/templates/typed/list/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}.go.plush index 270ab3f997..e12853ddc7 100644 --- a/ignite/templates/typed/list/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}.go.plush +++ b/ignite/templates/typed/list/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}.go.plush @@ -6,32 +6,36 @@ import ( "<%= ModulePath %>/x/<%= ModuleName %>/types" errorsmod "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) -func (k msgServer) Create<%= TypeName.UpperCamel %>(goCtx context.Context, msg *types.MsgCreate<%= TypeName.UpperCamel %>) (*types.MsgCreate<%= TypeName.UpperCamel %>Response, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - +func (k msgServer) Create<%= TypeName.UpperCamel %>(ctx context.Context, msg *types.MsgCreate<%= TypeName.UpperCamel %>) (*types.MsgCreate<%= TypeName.UpperCamel %>Response, error) { var <%= TypeName.LowerCamel %> = types.<%= TypeName.UpperCamel %>{ <%= MsgSigner.UpperCamel %>: msg.<%= MsgSigner.UpperCamel %>,<%= for (field) in Fields { %> <%= field.Name.UpperCamel %>: msg.<%= field.Name.UpperCamel %>,<% } %> } - id := k.Append<%= TypeName.UpperCamel %>( + nextId, err := k.<%= TypeName.UpperCamel %>Seq.Next(ctx) + if err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "failed to get next id") + } + + err = k.<%= TypeName.UpperCamel %>.Set( ctx, + nextId, <%= TypeName.LowerCamel %>, ) + if err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "failed to set <%= TypeName.LowerCamel %>") + } return &types.MsgCreate<%= TypeName.UpperCamel %>Response{ - Id: id, + Id: nextId, }, nil } -func (k msgServer) Update<%= TypeName.UpperCamel %>(goCtx context.Context, msg *types.MsgUpdate<%= TypeName.UpperCamel %>) (*types.MsgUpdate<%= TypeName.UpperCamel %>Response, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - +func (k msgServer) Update<%= TypeName.UpperCamel %>(ctx context.Context, msg *types.MsgUpdate<%= TypeName.UpperCamel %>) (*types.MsgUpdate<%= TypeName.UpperCamel %>Response, error) { var <%= TypeName.LowerCamel %> = types.<%= TypeName.UpperCamel %>{ <%= MsgSigner.UpperCamel %>: msg.<%= MsgSigner.UpperCamel %>, Id: msg.Id,<%= for (field) in Fields { %> @@ -39,9 +43,13 @@ func (k msgServer) Update<%= TypeName.UpperCamel %>(goCtx context.Context, msg } // Checks that the element exists - val, found := k.Get<%= TypeName.UpperCamel %>(ctx, msg.Id) - if !found { - return nil, errorsmod.Wrap(sdkerrors.ErrKeyNotFound, fmt.Sprintf("key %d doesn't exist", msg.Id)) + val, err := k.<%= TypeName.UpperCamel %>.Get(ctx, msg.Id) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, errorsmod.Wrap(sdkerrors.ErrKeyNotFound, fmt.Sprintf("key %d doesn't exist", msg.Id)) + } + + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "failed to get <%= TypeName.LowerCamel %>") } // Checks if the msg <%= MsgSigner.LowerCamel %> is the same as the current owner @@ -49,18 +57,22 @@ func (k msgServer) Update<%= TypeName.UpperCamel %>(goCtx context.Context, msg return nil, errorsmod.Wrap(sdkerrors.ErrUnauthorized, "incorrect owner") } - k.Set<%= TypeName.UpperCamel %>(ctx, <%= TypeName.LowerCamel %>) + if err := k.<%= TypeName.UpperCamel %>.Set(ctx, msg.Id, <%= TypeName.LowerCamel %>); err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "failed to update <%= TypeName.LowerCamel %>") + } return &types.MsgUpdate<%= TypeName.UpperCamel %>Response{}, nil } -func (k msgServer) Delete<%= TypeName.UpperCamel %>(goCtx context.Context, msg *types.MsgDelete<%= TypeName.UpperCamel %>) (*types.MsgDelete<%= TypeName.UpperCamel %>Response, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - +func (k msgServer) Delete<%= TypeName.UpperCamel %>(ctx context.Context, msg *types.MsgDelete<%= TypeName.UpperCamel %>) (*types.MsgDelete<%= TypeName.UpperCamel %>Response, error) { // Checks that the element exists - val, found := k.Get<%= TypeName.UpperCamel %>(ctx, msg.Id) - if !found { - return nil, errorsmod.Wrap(sdkerrors.ErrKeyNotFound, fmt.Sprintf("key %d doesn't exist", msg.Id)) + val, err := k.<%= TypeName.UpperCamel %>.Get(ctx, msg.Id) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, errorsmod.Wrap(sdkerrors.ErrKeyNotFound, fmt.Sprintf("key %d doesn't exist", msg.Id)) + } + + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "failed to get <%= TypeName.LowerCamel %>") } // Checks if the msg <%= MsgSigner.LowerCamel %> is the same as the current owner @@ -68,7 +80,9 @@ func (k msgServer) Delete<%= TypeName.UpperCamel %>(goCtx context.Context, msg return nil, errorsmod.Wrap(sdkerrors.ErrUnauthorized, "incorrect owner") } - k.Remove<%= TypeName.UpperCamel %>(ctx, msg.Id) + if err := k.<%= TypeName.UpperCamel %>.Remove(ctx, msg.Id); err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "failed to delete <%= TypeName.LowerCamel %>") + } return &types.MsgDelete<%= TypeName.UpperCamel %>Response{}, nil } diff --git a/ignite/templates/typed/list/files/simapp/x/{{moduleName}}/simulation/{{typeName}}.go.plush b/ignite/templates/typed/list/files/simapp/x/{{moduleName}}/simulation/{{typeName}}.go.plush index 2b4b871bd7..2ef71cfb0b 100644 --- a/ignite/templates/typed/list/files/simapp/x/{{moduleName}}/simulation/{{typeName}}.go.plush +++ b/ignite/templates/typed/list/files/simapp/x/{{moduleName}}/simulation/{{typeName}}.go.plush @@ -53,9 +53,18 @@ func SimulateMsgUpdate<%= TypeName.UpperCamel %>( simAccount = simtypes.Account{} <%= TypeName.LowerCamel %> = types.<%= TypeName.UpperCamel %>{} msg = &types.MsgUpdate<%= TypeName.UpperCamel %>{} - all<%= TypeName.UpperCamel %> = k.GetAll<%= TypeName.UpperCamel %>(ctx) found = false ) + + var all<%= TypeName.UpperCamel %> []types.<%= TypeName.UpperCamel %> + err := k.<%= TypeName.UpperCamel %>.Walk(ctx, nil, func(key uint64, value types.<%= TypeName.UpperCamel %>) (stop bool, err error) { + all<%= TypeName.UpperCamel %> = append(all<%= TypeName.UpperCamel %>, value) + return false, nil + }) + if err != nil { + panic(err) + } + for _, obj := range all<%= TypeName.UpperCamel %> { simAccount, found = FindAccount(accs, obj.<%= MsgSigner.UpperCamel %>) if found { @@ -97,9 +106,18 @@ func SimulateMsgDelete<%= TypeName.UpperCamel %>( simAccount = simtypes.Account{} <%= TypeName.LowerCamel %> = types.<%= TypeName.UpperCamel %>{} msg = &types.MsgUpdate<%= TypeName.UpperCamel %>{} - all<%= TypeName.UpperCamel %> = k.GetAll<%= TypeName.UpperCamel %>(ctx) found = false ) + + var all<%= TypeName.UpperCamel %> []types.<%= TypeName.UpperCamel %> + err := k.<%= TypeName.UpperCamel %>.Walk(ctx, nil, func(key uint64, value types.<%= TypeName.UpperCamel %>) (stop bool, err error) { + all<%= TypeName.UpperCamel %> = append(all<%= TypeName.UpperCamel %>, value) + return false, nil + }) + if err != nil { + panic(err) + } + for _, obj := range all<%= TypeName.UpperCamel %> { simAccount, found = FindAccount(accs, obj.<%= MsgSigner.UpperCamel %>) if found { diff --git a/ignite/templates/typed/list/genesis.go b/ignite/templates/typed/list/genesis.go index b9bd4f81e8..eb5f1c7e54 100644 --- a/ignite/templates/typed/list/genesis.go +++ b/ignite/templates/typed/list/genesis.go @@ -123,11 +123,15 @@ func genesisModuleModify(replacer placeholder.Replacer, opts *typed.Options) gen templateModuleInit := `// Set all the %[2]v for _, elem := range genState.%[3]vList { - k.Set%[3]v(ctx, elem) + if err := k.%[3]v.Set(ctx, elem.Id, elem); err != nil { + panic(err) + } } // Set %[2]v count -k.Set%[3]vCount(ctx, genState.%[3]vCount) +if err := k.%[3]vSeq.Set(ctx, genState.%[3]vCount); err != nil { + panic(err) +} %[1]v` replacementModuleInit := fmt.Sprintf( templateModuleInit, @@ -137,8 +141,20 @@ k.Set%[3]vCount(ctx, genState.%[3]vCount) ) content := replacer.Replace(f.String(), typed.PlaceholderGenesisModuleInit, replacementModuleInit) - templateModuleExport := `genesis.%[2]vList = k.GetAll%[2]v(ctx) -genesis.%[2]vCount = k.Get%[2]vCount(ctx) + templateModuleExport := ` +err = k.%[2]v.Walk(ctx, nil, func(key uint64, elem types.%[2]v) (bool, error) { + genesis.%[2]vList = append(genesis.%[2]vList, elem) + return false, nil +}) +if err != nil { + panic(err) +} + +genesis.%[2]vCount, err = k.%[2]vSeq.Peek(ctx) +if err != nil { + panic(err) +} + %[1]v` replacementModuleExport := fmt.Sprintf( templateModuleExport, diff --git a/ignite/templates/typed/list/list.go b/ignite/templates/typed/list/list.go index 4f0555e1aa..5a488312af 100644 --- a/ignite/templates/typed/list/list.go +++ b/ignite/templates/typed/list/list.go @@ -18,6 +18,13 @@ import ( "github.com/ignite/cli/ignite/templates/typed" ) +/* +TODO add the following in keeper.go + + TypeNameSeq collections.Sequence + TypeName collections.Map[uint64, types.TypeName] +*/ + var ( //go:embed files/component/* files/component/**/* fsComponent embed.FS diff --git a/ignite/templates/typed/map/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}.go.plush b/ignite/templates/typed/map/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}.go.plush index 3a7cc6ea22..ed6aab9916 100644 --- a/ignite/templates/typed/map/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}.go.plush +++ b/ignite/templates/typed/map/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}.go.plush @@ -5,20 +5,19 @@ import ( "<%= ModulePath %>/x/<%= ModuleName %>/types" errorsmod "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) -func (k msgServer) Create<%= TypeName.UpperCamel %>(goCtx context.Context, msg *types.MsgCreate<%= TypeName.UpperCamel %>) (*types.MsgCreate<%= TypeName.UpperCamel %>Response, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - +func (k msgServer) Create<%= TypeName.UpperCamel %>(ctx context.Context, msg *types.MsgCreate<%= TypeName.UpperCamel %>) (*types.MsgCreate<%= TypeName.UpperCamel %>Response, error) { // Check if the value already exists - _, isFound := k.Get<%= TypeName.UpperCamel %>( + ok, err := k.<%= TypeName.UpperCamel %>.Has( ctx, <%= for (i, index) in Indexes { %>msg.<%= index.Name.UpperCamel %>, <% } %>) - if isFound { + if err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, err.Error()) + } else if ok { return nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "index already set") } @@ -29,16 +28,19 @@ func (k msgServer) Create<%= TypeName.UpperCamel %>(goCtx context.Context, msg <% } %> } - k.Set<%= TypeName.UpperCamel %>( + if err := k.Set<%= TypeName.UpperCamel %>( ctx, + <%= for (i, index) in Indexes { %>msg.<%= index.Name.UpperCamel %>, + <% } %> <%= TypeName.LowerCamel %>, - ) - return &types.MsgCreate<%= TypeName.UpperCamel %>Response{}, nil + ); err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "failed to set <%= index.Name.UpperCamel %>") + } + + return &types.MsgCreate<%= TypeName.UpperCamel %>Response{}, nil } -func (k msgServer) Update<%= TypeName.UpperCamel %>(goCtx context.Context, msg *types.MsgUpdate<%= TypeName.UpperCamel %>) (*types.MsgUpdate<%= TypeName.UpperCamel %>Response, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - +func (k msgServer) Update<%= TypeName.UpperCamel %>(ctx context.Context, msg *types.MsgUpdate<%= TypeName.UpperCamel %>) (*types.MsgUpdate<%= TypeName.UpperCamel %>Response, error) { // Check if the value exists valFound, isFound := k.Get<%= TypeName.UpperCamel %>( ctx, @@ -65,9 +67,7 @@ func (k msgServer) Update<%= TypeName.UpperCamel %>(goCtx context.Context, msg return &types.MsgUpdate<%= TypeName.UpperCamel %>Response{}, nil } -func (k msgServer) Delete<%= TypeName.UpperCamel %>(goCtx context.Context, msg *types.MsgDelete<%= TypeName.UpperCamel %>) (*types.MsgDelete<%= TypeName.UpperCamel %>Response, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - +func (k msgServer) Delete<%= TypeName.UpperCamel %>(ctx context.Context, msg *types.MsgDelete<%= TypeName.UpperCamel %>) (*types.MsgDelete<%= TypeName.UpperCamel %>Response, error) { // Check if the value exists valFound, isFound := k.Get<%= TypeName.UpperCamel %>( ctx, diff --git a/ignite/templates/typed/map/files/simapp/x/{{moduleName}}/simulation/{{typeName}}.go.plush b/ignite/templates/typed/map/files/simapp/x/{{moduleName}}/simulation/{{typeName}}.go.plush index fb2392f0d4..0c3fced73b 100644 --- a/ignite/templates/typed/map/files/simapp/x/{{moduleName}}/simulation/{{typeName}}.go.plush +++ b/ignite/templates/typed/map/files/simapp/x/{{moduleName}}/simulation/{{typeName}}.go.plush @@ -64,9 +64,18 @@ func SimulateMsgUpdate<%= TypeName.UpperCamel %>( simAccount = simtypes.Account{} <%= TypeName.LowerCamel %> = types.<%= TypeName.UpperCamel %>{} msg = &types.MsgUpdate<%= TypeName.UpperCamel %>{} - all<%= TypeName.UpperCamel %> = k.GetAll<%= TypeName.UpperCamel %>(ctx) found = false ) + + var all<%= TypeName.UpperCamel %> []types.<%= TypeName.UpperCamel %> + err := k.<%= TypeName.UpperCamel %>.Walk(ctx, nil, func(key uint64, value types.<%= TypeName.UpperCamel %>) (stop bool, err error) { + all<%= TypeName.UpperCamel %> = append(all<%= TypeName.UpperCamel %>, value) + return false, nil + }) + if err != nil { + panic(err) + } + for _, obj := range all<%= TypeName.UpperCamel %> { simAccount, found = FindAccount(accs, obj.<%= MsgSigner.UpperCamel %>) if found { @@ -109,9 +118,18 @@ func SimulateMsgDelete<%= TypeName.UpperCamel %>( simAccount = simtypes.Account{} <%= TypeName.LowerCamel %> = types.<%= TypeName.UpperCamel %>{} msg = &types.MsgUpdate<%= TypeName.UpperCamel %>{} - all<%= TypeName.UpperCamel %> = k.GetAll<%= TypeName.UpperCamel %>(ctx) found = false ) + + var all<%= TypeName.UpperCamel %> []types.<%= TypeName.UpperCamel %> + err := k.<%= TypeName.UpperCamel %>.Walk(ctx, nil, func(key uint64, value types.<%= TypeName.UpperCamel %>) (stop bool, err error) { + all<%= TypeName.UpperCamel %> = append(all<%= TypeName.UpperCamel %>, value) + return false, nil + }) + if err != nil { + panic(err) + } + for _, obj := range all<%= TypeName.UpperCamel %> { simAccount, found = FindAccount(accs, obj.<%= MsgSigner.UpperCamel %>) if found { diff --git a/ignite/templates/typed/map/map.go b/ignite/templates/typed/map/map.go index 9177fb7d43..772ade4b9f 100644 --- a/ignite/templates/typed/map/map.go +++ b/ignite/templates/typed/map/map.go @@ -19,6 +19,11 @@ import ( "github.com/ignite/cli/ignite/templates/typed" ) +/* +TODO add the following in keeper.go + TypeName collections.Map[string, types.TypeName] +*/ + var ( //go:embed files/messages/* files/messages/**/* fsMessages embed.FS