Skip to content

Commit

Permalink
Added a storage next game id with starport.
Browse files Browse the repository at this point in the history
starport scaffold single nextGame idValue:uint --module checkers --no-message
Then changed the genesis value.
  • Loading branch information
xavierlepretre committed Sep 9, 2021
1 parent 995fda0 commit 463968f
Show file tree
Hide file tree
Showing 21 changed files with 1,555 additions and 744 deletions.
933 changes: 220 additions & 713 deletions docs/static/openapi.yml

Large diffs are not rendered by default.

5 changes: 3 additions & 2 deletions go.mod
Expand Up @@ -5,6 +5,7 @@ go 1.16
require (
github.com/cosmos/cosmos-sdk v0.42.6
github.com/gogo/protobuf v1.3.3
github.com/golang/protobuf v1.5.2
github.com/google/go-cmp v0.5.6 // indirect
github.com/gorilla/mux v1.8.0
github.com/grpc-ecosystem/grpc-gateway v1.16.0
Expand All @@ -14,8 +15,8 @@ require (
github.com/tendermint/spm v0.1.4
github.com/tendermint/tendermint v0.34.11
github.com/tendermint/tm-db v0.6.4
google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced
google.golang.org/grpc v1.38.0
google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83
google.golang.org/grpc v1.40.0
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
)

Expand Down
9 changes: 5 additions & 4 deletions go.sum
Expand Up @@ -786,7 +786,7 @@ golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapK
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
Expand Down Expand Up @@ -821,8 +821,8 @@ google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6D
google.golang.org/genproto v0.0.0-20201111145450-ac7456db90a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201119123407-9b1e624d6bc4/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210114201628-6edceaf6022f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced h1:c5geK1iMU3cDKtFrCVQIcjR3W+JOZMuhIyICMCTbtus=
google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24=
google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83 h1:3V2dxSZpz4zozWWUq36vUxXEKnSYitEH2LdsAx+RUmg=
google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
Expand All @@ -836,8 +836,9 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
Expand Down
2 changes: 2 additions & 0 deletions proto/checkers/genesis.proto
Expand Up @@ -2,11 +2,13 @@ syntax = "proto3";
package xavierlepretre.checkers.checkers;

// this line is used by starport scaffolding # genesis/proto/import
import "checkers/next_game.proto";

option go_package = "github.com/xavierlepretre/checkers/x/checkers/types";

// GenesisState defines the checkers module's genesis state.
message GenesisState {
// this line is used by starport scaffolding # genesis/proto/state
NextGame nextGame = 1; // this line is used by starport scaffolding # genesis/proto/stateField
// this line is used by starport scaffolding # ibc/genesis/proto
}
11 changes: 11 additions & 0 deletions proto/checkers/next_game.proto
@@ -0,0 +1,11 @@
syntax = "proto3";
package xavierlepretre.checkers.checkers;

option go_package = "github.com/xavierlepretre/checkers/x/checkers/types";

import "gogoproto/gogo.proto";

message NextGame {
string creator = 1;
uint64 idValue = 2;
}
12 changes: 12 additions & 0 deletions proto/checkers/query.proto
Expand Up @@ -4,12 +4,24 @@ package xavierlepretre.checkers.checkers;
import "google/api/annotations.proto";
import "cosmos/base/query/v1beta1/pagination.proto";
// this line is used by starport scaffolding # 1
import "checkers/next_game.proto";

option go_package = "github.com/xavierlepretre/checkers/x/checkers/types";

// Query defines the gRPC querier service.
service Query {
// this line is used by starport scaffolding # 2

// Queries a nextGame by index.
rpc NextGame(QueryGetNextGameRequest) returns (QueryGetNextGameResponse) {
option (google.api.http).get = "/xavierlepretre/checkers/checkers/nextGame";
}

}

// this line is used by starport scaffolding # 3
message QueryGetNextGameRequest {}

message QueryGetNextGameResponse {
NextGame NextGame = 1;
}
2 changes: 2 additions & 0 deletions x/checkers/client/cli/query.go
Expand Up @@ -26,5 +26,7 @@ func GetQueryCmd(queryRoute string) *cobra.Command {

// this line is used by starport scaffolding # 1

cmd.AddCommand(CmdShowNextGame())

return cmd
}
36 changes: 36 additions & 0 deletions x/checkers/client/cli/query_next_game.go
@@ -0,0 +1,36 @@
package cli

import (
"context"

"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/flags"
"github.com/spf13/cobra"
"github.com/xavierlepretre/checkers/x/checkers/types"
)

func CmdShowNextGame() *cobra.Command {
cmd := &cobra.Command{
Use: "show-next-game",
Short: "shows nextGame",
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx := client.GetClientContextFromCmd(cmd)

queryClient := types.NewQueryClient(clientCtx)

params := &types.QueryGetNextGameRequest{}

res, err := queryClient.NextGame(context.Background(), params)
if err != nil {
return err
}

return clientCtx.PrintProto(res)
},
}

flags.AddQueryFlagsToCmd(cmd)

return cmd
}
67 changes: 67 additions & 0 deletions x/checkers/client/cli/query_next_game_test.go
@@ -0,0 +1,67 @@
package cli_test

import (
"fmt"
"testing"

clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli"
"github.com/stretchr/testify/require"
tmcli "github.com/tendermint/tendermint/libs/cli"
"google.golang.org/grpc/status"

"github.com/xavierlepretre/checkers/testutil/network"
"github.com/xavierlepretre/checkers/x/checkers/client/cli"
"github.com/xavierlepretre/checkers/x/checkers/types"
)

func networkWithNextGameObjects(t *testing.T) (*network.Network, *types.NextGame) {
t.Helper()
cfg := network.DefaultConfig()
state := types.GenesisState{}
require.NoError(t, cfg.Codec.UnmarshalJSON(cfg.GenesisState[types.ModuleName], &state))

state.NextGame = &types.NextGame{Creator: "ANY"}
buf, err := cfg.Codec.MarshalJSON(&state)
require.NoError(t, err)
cfg.GenesisState[types.ModuleName] = buf
return network.New(t, cfg), state.NextGame
}

func TestShowNextGame(t *testing.T) {
net, obj := networkWithNextGameObjects(t)

ctx := net.Validators[0].ClientCtx
common := []string{
fmt.Sprintf("--%s=json", tmcli.OutputFlag),
}
for _, tc := range []struct {
desc string
args []string
err error
obj *types.NextGame
}{
{
desc: "get",
args: common,
obj: obj,
},
} {
tc := tc
t.Run(tc.desc, func(t *testing.T) {
var args []string
args = append(args, tc.args...)
out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdShowNextGame(), args)
if tc.err != nil {
stat, ok := status.FromError(tc.err)
require.True(t, ok)
require.ErrorIs(t, stat.Err(), tc.err)
} else {
require.NoError(t, err)
var resp types.QueryGetNextGameResponse
require.NoError(t, net.Config.Codec.UnmarshalJSON(out.Bytes(), &resp))
require.NotNil(t, resp.NextGame)
require.Equal(t, tc.obj, resp.NextGame)
}
})
}
}
9 changes: 9 additions & 0 deletions x/checkers/genesis.go
Expand Up @@ -10,6 +10,10 @@ import (
// state.
func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) {
// this line is used by starport scaffolding # genesis/module/init
// Set if defined
if genState.NextGame != nil {
k.SetNextGame(ctx, *genState.NextGame)
}

// this line is used by starport scaffolding # ibc/genesis/init
}
Expand All @@ -19,6 +23,11 @@ func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState {
genesis := types.DefaultGenesis()

// this line is used by starport scaffolding # genesis/module/export
// Get all nextGame
nextGame, found := k.GetNextGame(ctx)
if found {
genesis.NextGame = &nextGame
}

// this line is used by starport scaffolding # ibc/genesis/export

Expand Down
24 changes: 24 additions & 0 deletions x/checkers/keeper/grpc_query_next_game.go
@@ -0,0 +1,24 @@
package keeper

import (
"context"

sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/xavierlepretre/checkers/x/checkers/types"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)

func (k Keeper) NextGame(c context.Context, req *types.QueryGetNextGameRequest) (*types.QueryGetNextGameResponse, error) {
if req == nil {
return nil, status.Error(codes.InvalidArgument, "invalid request")
}
ctx := sdk.UnwrapSDKContext(c)

val, found := k.GetNextGame(ctx)
if !found {
return nil, status.Error(codes.InvalidArgument, "not found")
}

return &types.QueryGetNextGameResponse{NextGame: &val}, nil
}
44 changes: 44 additions & 0 deletions x/checkers/keeper/grpc_query_next_game_test.go
@@ -0,0 +1,44 @@
package keeper

import (
"testing"

sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/stretchr/testify/require"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"

"github.com/xavierlepretre/checkers/x/checkers/types"
)

func TestNextGameQuery(t *testing.T) {
keeper, ctx := setupKeeper(t)
wctx := sdk.WrapSDKContext(ctx)
item := createTestNextGame(keeper, ctx)
for _, tc := range []struct {
desc string
request *types.QueryGetNextGameRequest
response *types.QueryGetNextGameResponse
err error
}{
{
desc: "First",
request: &types.QueryGetNextGameRequest{},
response: &types.QueryGetNextGameResponse{NextGame: &item},
},
{
desc: "InvalidRequest",
err: status.Error(codes.InvalidArgument, "invalid request"),
},
} {
tc := tc
t.Run(tc.desc, func(t *testing.T) {
response, err := keeper.NextGame(wctx, tc.request)
if tc.err != nil {
require.ErrorIs(t, err, tc.err)
} else {
require.Equal(t, tc.response, response)
}
})
}
}
33 changes: 33 additions & 0 deletions x/checkers/keeper/next_game.go
@@ -0,0 +1,33 @@
package keeper

import (
"github.com/cosmos/cosmos-sdk/store/prefix"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/xavierlepretre/checkers/x/checkers/types"
)

// SetNextGame set nextGame in the store
func (k Keeper) SetNextGame(ctx sdk.Context, nextGame types.NextGame) {
store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.NextGameKey))
b := k.cdc.MustMarshalBinaryBare(&nextGame)
store.Set([]byte{0}, b)
}

// GetNextGame returns nextGame
func (k Keeper) GetNextGame(ctx sdk.Context) (val types.NextGame, found bool) {
store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.NextGameKey))

b := store.Get([]byte{0})
if b == nil {
return val, false
}

k.cdc.MustUnmarshalBinaryBare(b, &val)
return val, true
}

// RemoveNextGame removes nextGame from the store
func (k Keeper) RemoveNextGame(ctx sdk.Context) {
store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.NextGameKey))
store.Delete([]byte{0})
}
33 changes: 33 additions & 0 deletions x/checkers/keeper/next_game_test.go
@@ -0,0 +1,33 @@
package keeper

import (
"testing"

sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/stretchr/testify/assert"

"github.com/xavierlepretre/checkers/x/checkers/types"
)

func createTestNextGame(keeper *Keeper, ctx sdk.Context) types.NextGame {
item := types.NextGame{
Creator: "any",
}
keeper.SetNextGame(ctx, item)
return item
}

func TestNextGameGet(t *testing.T) {
keeper, ctx := setupKeeper(t)
item := createTestNextGame(keeper, ctx)
rst, found := keeper.GetNextGame(ctx)
assert.True(t, found)
assert.Equal(t, item, rst)
}
func TestNextGameRemove(t *testing.T) {
keeper, ctx := setupKeeper(t)
createTestNextGame(keeper, ctx)
keeper.RemoveNextGame(ctx)
_, found := keeper.GetNextGame(ctx)
assert.False(t, found)
}
4 changes: 2 additions & 2 deletions x/checkers/module.go
@@ -1,9 +1,9 @@
package checkers

import (
"context"
"encoding/json"
"fmt"
// this line is used by starport scaffolding # 1

"github.com/gorilla/mux"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
Expand Down Expand Up @@ -79,7 +79,7 @@ func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Rout

// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module.
func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) {
// this line is used by starport scaffolding # 2
types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx))
}

// GetTxCmd returns the capability module's root tx command.
Expand Down

0 comments on commit 463968f

Please sign in to comment.