package usecase import ( "blockchain/internal/domain/blockchain" "blockchain/internal/domain/repository" "blockchain/internal/domain/usecase" "context" "code.30cm.net/digimon/library-go/errs" "github.com/zeromicro/go-zero/core/logx" ) type BinanceUseCaseParam struct { BinanceRepo repository.DataSourceRepository } type BinanceUseCase struct { BinanceUseCaseParam } func MustBinanceUseCase(param BinanceUseCaseParam) usecase.DataSourceUseCase { return &BinanceUseCase{ BinanceUseCaseParam: param, } } // GetSymbols implements usecase.DataSourceUseCase. func (use *BinanceUseCase) GetSymbols(ctx context.Context) ([]*usecase.Symbol, error) { result, err := use.BinanceRepo.GetSymbols(ctx) if err != nil { e := errs.ThirdPartyErrorL( blockchain.CodeBlockchain, blockchain.FailedToGetSymbolFormBinanceErrorCode, logx.WithContext(ctx), []logx.LogField{ {Key: "func", Value: "BinanceUseCase.ThirdPartyErrorL"}, {Key: "err", Value: err.Error()}, }, "failed to get symbols from binance").Wrap(err) return nil, e } rpy := make([]*usecase.Symbol, 0, len(result)) for _, item := range result { rpy = append(rpy, &usecase.Symbol{ Symbol: item.Symbol, Status: item.Status, BaseAsset: item.BaseAsset, BaseAssetPrecision: item.BaseAssetPrecision, QuoteAsset: item.QuoteAsset, QuoteAssetPrecision: item.QuoteAssetPrecision, }) } return rpy, nil } func (use *BinanceUseCase) UpsertKline(ctx context.Context, data usecase.QueryKline) error { origianData, err := use.BinanceRepo.FetchHistoryKline(ctx, repository.QueryKline{ Symbol: data.Symbol, Interval: data.Interval, StartUnixNano: data.StartUnixNano, EndUnixNano: data.EndUnixNano, }) if err != nil { e := errs.ThirdPartyErrorL( blockchain.CodeBlockchain, blockchain.FailedToUpsertBinanceErrorCode, logx.WithContext(ctx), []logx.LogField{ {Key: "func", Value: "BinanceRepo.FetchHistoryKline"}, {Key: "err", Value: err.Error()}, }, "failed to get kline history from binance").Wrap(err) return e } err = use.BinanceRepo.SaveHistoryKline(ctx, origianData) if err != nil { e := errs.DatabaseErrorWithScopeL( blockchain.CodeBlockchain, blockchain.FailedToUpsertBinanceErrorCode, logx.WithContext(ctx), []logx.LogField{ {Key: "func", Value: "BinanceRepo.SaveHistoryKline"}, {Key: "err", Value: err.Error()}, }, "failed save data from binance").Wrap(err) return e } return nil }