OSDN Git Service

add api get-asset
authoroysheng <oysheng@bytom.io>
Wed, 18 Apr 2018 12:32:31 +0000 (20:32 +0800)
committeroysheng <oysheng@bytom.io>
Wed, 18 Apr 2018 12:32:31 +0000 (20:32 +0800)
modify list-assets by adding inquire extassetDB

api/api.go
api/query.go
asset/asset.go
cmd/bytomcli/commands/asset.go
cmd/bytomcli/commands/bytomcli.go

index 8522e26..2e7bfdf 100644 (file)
@@ -177,6 +177,7 @@ func (a *API) buildHandler() {
 
                m.Handle("/create-asset", jsonHandler(a.createAsset))
                m.Handle("/update-asset-alias", jsonHandler(a.updateAssetAlias))
+               m.Handle("/get-asset", jsonHandler(a.getAsset))
                m.Handle("/list-assets", jsonHandler(a.listAssets))
 
                m.Handle("/create-key", jsonHandler(a.pseudohsmCreateKey))
index a4a790d..ed0459c 100644 (file)
@@ -31,11 +31,22 @@ func (a *API) listAccounts(ctx context.Context, filter struct {
        return NewSuccessResponse(annotatedAccounts)
 }
 
-// POST /list-assets
-func (a *API) listAssets(ctx context.Context, filter struct {
+// POST /get-asset
+func (a *API) getAsset(ctx context.Context, filter struct {
        ID string `json:"id"`
 }) Response {
-       assets, err := a.wallet.AssetReg.ListAssets(filter.ID)
+       asset, err := a.wallet.AssetReg.GetAsset(filter.ID)
+       if err != nil {
+               log.Errorf("getAsset: %v", err)
+               return NewErrorResponse(err)
+       }
+
+       return NewSuccessResponse(asset)
+}
+
+// POST /list-assets
+func (a *API) listAssets(ctx context.Context) Response {
+       assets, err := a.wallet.AssetReg.ListAssets()
        if err != nil {
                log.Errorf("listAssets: %v", err)
                return NewErrorResponse(err)
index e5eb9db..7c3cf44 100644 (file)
@@ -282,10 +282,28 @@ func (reg *Registry) GetAliasByID(id string) string {
        return *asset.Alias
 }
 
+// GetAsset get asset by assetID
+func (reg *Registry) GetAsset(id string) (*Asset, error) {
+       asset := &Asset{}
+       if interAsset := reg.db.Get([]byte(assetPrefix + id)); interAsset != nil {
+               if err := json.Unmarshal(interAsset, asset); err != nil {
+                       return nil, err
+               }
+               return asset, nil
+       }
+
+       if extAsset := reg.db.Get([]byte(ExternalAssetPrefix + id)); extAsset != nil {
+               if err := json.Unmarshal(extAsset, asset); err != nil {
+                       return nil, err
+               }
+       }
+       return asset, nil
+}
+
 // ListAssets returns the accounts in the db
-func (reg *Registry) ListAssets(id string) ([]*Asset, error) {
+func (reg *Registry) ListAssets() ([]*Asset, error) {
        assets := []*Asset{DefaultNativeAsset}
-       assetIter := reg.db.IteratorPrefix([]byte(assetPrefix + id))
+       assetIter := reg.db.IteratorPrefix([]byte(assetPrefix))
        defer assetIter.Release()
 
        for assetIter.Next() {
@@ -295,6 +313,18 @@ func (reg *Registry) ListAssets(id string) ([]*Asset, error) {
                }
                assets = append(assets, asset)
        }
+
+       extAssetIter := reg.db.IteratorPrefix([]byte(ExternalAssetPrefix))
+       defer extAssetIter.Release()
+
+       for extAssetIter.Next() {
+               asset := &Asset{}
+               if err := json.Unmarshal(extAssetIter.Value(), asset); err != nil {
+                       return nil, err
+               }
+               assets = append(assets, asset)
+       }
+
        return assets, nil
 }
 
index 11a6a8a..db50d97 100644 (file)
@@ -15,12 +15,9 @@ func init() {
        createAssetCmd.PersistentFlags().IntVarP(&assetQuorum, "quorom", "q", 1, "quorum must be greater than 0 and less than or equal to the number of signers")
        createAssetCmd.PersistentFlags().StringVarP(&assetToken, "access", "a", "", "access token")
        createAssetCmd.PersistentFlags().StringVarP(&assetDefiniton, "definition", "d", "", "definition for the asset")
-
-       listAssetsCmd.PersistentFlags().StringVar(&assetID, "id", "", "ID of asset")
 }
 
 var (
-       assetID        = ""
        assetQuorum    = 1
        assetToken     = ""
        assetDefiniton = ""
@@ -65,16 +62,30 @@ var createAssetCmd = &cobra.Command{
        },
 }
 
+var getAssetCmd = &cobra.Command{
+       Use:   "get-asset <assetID>",
+       Short: "get asset by assetID",
+       Args:  cobra.ExactArgs(1),
+       Run: func(cmd *cobra.Command, args []string) {
+               filter := struct {
+                       ID string `json:"id"`
+               }{ID: args[0]}
+
+               data, exitCode := util.ClientCall("/get-asset", &filter)
+               if exitCode != util.Success {
+                       os.Exit(exitCode)
+               }
+
+               printJSONList(data)
+       },
+}
+
 var listAssetsCmd = &cobra.Command{
        Use:   "list-assets",
        Short: "List the existing assets",
        Args:  cobra.NoArgs,
        Run: func(cmd *cobra.Command, args []string) {
-               filter := struct {
-                       ID string `json:"id"`
-               }{ID: assetID}
-
-               data, exitCode := util.ClientCall("/list-assets", &filter)
+               data, exitCode := util.ClientCall("/list-assets")
                if exitCode != util.Success {
                        os.Exit(exitCode)
                }
index afec764..b221bd7 100644 (file)
@@ -86,6 +86,7 @@ func AddCommands() {
        BytomcliCmd.AddCommand(validateAddressCmd)
 
        BytomcliCmd.AddCommand(createAssetCmd)
+       BytomcliCmd.AddCommand(getAssetCmd)
        BytomcliCmd.AddCommand(listAssetsCmd)
        BytomcliCmd.AddCommand(updateAssetAliasCmd)