package blockchainservicelogic import ( app_cloudep_blockchain "blockchain/gen_result/pb/code.30cm.net/digimon/app-cloudep-blockchain" "blockchain/internal/svc" "context" "code.30cm.net/digimon/library-go/errs" "github.com/zeromicro/go-zero/core/logx" ) type ListSymbolsLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewListSymbolsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ListSymbolsLogic { return &ListSymbolsLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } // ListSymbols retrieves all available trading symbols. func (l *ListSymbolsLogic) ListSymbols(_ *app_cloudep_blockchain.ListSymbolsRequest) (*app_cloudep_blockchain.ListSymbolsResponse, error) { result, err := l.svcCtx.BinanceDataSource.GetSymbols(l.ctx) if err != nil { return nil, err } rpy := make([]*app_cloudep_blockchain.Symbol, 0, len(result)) for _, item := range result { if item != nil { const maxInt32 = 1<<31 - 1 ap := &app_cloudep_blockchain.Symbol{ Symbol: item.Symbol, Status: item.Status, BaseAsset: item.BaseAsset, QuoteAsset: item.QuoteAsset, } if item.BaseAssetPrecision > maxInt32 || item.BaseAssetPrecision < -maxInt32-1 { return nil, errs.InvalidFormat("BaseAssetPrecision overflow") } ap.BaseAssetPrecision = int32(item.BaseAssetPrecision) if item.QuoteAssetPrecision > maxInt32 || item.QuoteAssetPrecision < -maxInt32-1 { return nil, errs.InvalidFormat("QuoteAssetPrecision overflow") } ap.QuoteAssetPrecision = int32(item.QuoteAssetPrecision) rpy = append(rpy, ap) } } return &app_cloudep_blockchain.ListSymbolsResponse{ Symbols: rpy, }, nil }