2025-08-20 09:34:27 +00:00
|
|
|
|
package blockchainservicelogic
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"blockchain/internal/domain/usecase"
|
|
|
|
|
"context"
|
|
|
|
|
"fmt"
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
"blockchain/gen_result/pb/code.30cm.net/digimon/app-cloudep-blockchain"
|
|
|
|
|
"blockchain/internal/svc"
|
|
|
|
|
|
|
|
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type ListCandleDataLogic struct {
|
|
|
|
|
ctx context.Context
|
|
|
|
|
svcCtx *svc.ServiceContext
|
|
|
|
|
logx.Logger
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func NewListCandleDataLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ListCandleDataLogic {
|
|
|
|
|
return &ListCandleDataLogic{
|
|
|
|
|
ctx: ctx,
|
|
|
|
|
svcCtx: svcCtx,
|
|
|
|
|
Logger: logx.WithContext(ctx),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (l *ListCandleDataLogic) ListCandleData(in *app_cloudep_blockchain.HistoryReq) (*app_cloudep_blockchain.ListCandleDataResp, error) {
|
|
|
|
|
// 1) 先驗證輸入(避免把錯誤時間丟進背景 goroutine)
|
|
|
|
|
st, err := time.Parse(time.RFC3339, in.GetStartTime())
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, fmt.Errorf("invalid startTime (RFC3339): %w", err)
|
|
|
|
|
}
|
|
|
|
|
et, err := time.Parse(time.RFC3339, in.GetEndTime())
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, fmt.Errorf("invalid endTime (RFC3339): %w", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
kline, err := l.svcCtx.BinanceDataSource.ListKline(l.ctx, usecase.QueryKline{
|
|
|
|
|
Symbol: in.GetSymbol(),
|
|
|
|
|
Interval: in.GetInterval(),
|
|
|
|
|
StartTime: st.UnixMilli(),
|
|
|
|
|
EndTime: et.UnixMilli(),
|
|
|
|
|
})
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
2025-08-23 13:25:09 +00:00
|
|
|
|
res := make([]*app_cloudep_blockchain.Kline, 0, len(kline))
|
2025-08-20 09:34:27 +00:00
|
|
|
|
|
2025-08-23 13:25:09 +00:00
|
|
|
|
for _, item := range kline {
|
|
|
|
|
res = append(res, &app_cloudep_blockchain.Kline{
|
|
|
|
|
OpenTime: item.OpenTime,
|
|
|
|
|
Open: item.Open,
|
|
|
|
|
High: item.High,
|
|
|
|
|
Low: item.Low,
|
|
|
|
|
Close: item.Close,
|
|
|
|
|
Volume: item.Volume,
|
|
|
|
|
CloseTime: item.OpenTime,
|
|
|
|
|
QuoteAssetVolume: item.QuoteAssetVolume,
|
|
|
|
|
NumberOfTrades: int32(item.NumberOfTrades),
|
|
|
|
|
TakerBuyBaseAssetVolume: item.TakerBuyBaseAssetVolume,
|
|
|
|
|
TakerBuyQuoteAssetVolume: item.TakerBuyQuoteAssetVolume,
|
|
|
|
|
Symbol: item.Symbol,
|
|
|
|
|
Interval: item.Interval,
|
|
|
|
|
})
|
|
|
|
|
}
|
2025-08-20 09:34:27 +00:00
|
|
|
|
|
2025-08-23 13:25:09 +00:00
|
|
|
|
return &app_cloudep_blockchain.ListCandleDataResp{
|
|
|
|
|
Data: res,
|
|
|
|
|
}, nil
|
2025-08-20 09:34:27 +00:00
|
|
|
|
}
|