feat: get support chain api

This commit is contained in:
Ginta
2026-04-15 01:44:38 +08:00
parent 70f8ed4ea0
commit d46bc7793e
2 changed files with 35 additions and 0 deletions
+24
View File
@@ -21,6 +21,20 @@ func AddSupportedAsset(network, token string, status int64) (*mdb.SupportedAsset
if exist.ID > 0 { if exist.ID > 0 {
return nil, constant.SupportedAssetAlreadyExists return nil, constant.SupportedAssetAlreadyExists
} }
deleted, err := getSupportedAssetByNetworkAndTokenUnscoped(network, token)
if err != nil {
return nil, err
}
if deleted.ID > 0 && deleted.DeletedAt.Valid {
deleted.Status = status
deleted.DeletedAt.Valid = false
if err := dao.Mdb.Unscoped().Save(deleted).Error; err != nil {
return nil, err
}
return deleted, nil
}
asset := &mdb.SupportedAsset{ asset := &mdb.SupportedAsset{
Network: network, Network: network,
Token: token, Token: token,
@@ -30,6 +44,16 @@ func AddSupportedAsset(network, token string, status int64) (*mdb.SupportedAsset
return asset, err return asset, err
} }
func getSupportedAssetByNetworkAndTokenUnscoped(network, token string) (*mdb.SupportedAsset, error) {
network, token = normalizeNetworkToken(network, token)
asset := new(mdb.SupportedAsset)
err := dao.Mdb.Unscoped().Model(asset).
Where("network = ?", network).
Where("token = ?", token).
Limit(1).Find(asset).Error
return asset, err
}
func GetSupportedAssetByNetworkAndToken(network, token string) (*mdb.SupportedAsset, error) { func GetSupportedAssetByNetworkAndToken(network, token string) (*mdb.SupportedAsset, error) {
network, token = normalizeNetworkToken(network, token) network, token = normalizeNetworkToken(network, token)
asset := new(mdb.SupportedAsset) asset := new(mdb.SupportedAsset)
+11
View File
@@ -322,6 +322,17 @@ func TestSupportedAssetCRUD(t *testing.T) {
if resp["status_code"].(float64) != 200 { if resp["status_code"].(float64) != 200 {
t.Fatalf("delete supported asset failed: %v", resp) t.Fatalf("delete supported asset failed: %v", resp)
} }
// recreate after delete should restore soft-deleted row, not unique-conflict
rec = doPostWithToken(e, "/payments/gmpay/v1/supported-assets/add", map[string]interface{}{
"network": "arbitrum",
"token": "usdc",
"status": 1,
})
resp = parseResp(t, rec)
if resp["status_code"].(float64) != 200 {
t.Fatalf("recreate after delete failed: %v", resp)
}
} }
// TestWalletAddAndList tests adding wallets via API and listing them. // TestWalletAddAndList tests adding wallets via API and listing them.