diff --git a/backend/src/main/java/org/dgu/backend/controller/DashBoardController.java b/backend/src/main/java/org/dgu/backend/controller/DashBoardController.java index 0b16f70..958be53 100644 --- a/backend/src/main/java/org/dgu/backend/controller/DashBoardController.java +++ b/backend/src/main/java/org/dgu/backend/controller/DashBoardController.java @@ -28,6 +28,7 @@ public ResponseEntity> getUserBala @RequestHeader("Authorization") String authorizationHeader) { DashBoardDto.UserAccountResponse userBalanceResponse = dashBoardService.getUserAccount(authorizationHeader); + return ApiResponse.onSuccess(SuccessStatus.SUCCESS_GET_USER_BALANCE, userBalanceResponse); } @@ -37,6 +38,7 @@ public ResponseEntity>> getUserC @RequestHeader("Authorization") String authorizationHeader) { List userCoins = dashBoardService.getUserCoins(authorizationHeader); + return ApiResponse.onSuccess(SuccessStatus.SUCCESS_GET_USER_COINS, userCoins); } @@ -45,6 +47,7 @@ public ResponseEntity>> getUserC public ResponseEntity>> getRepresentativeCoins() { List representativeCoinResponses = dashBoardService.getRepresentativeCoins(); + return ApiResponse.onSuccess(SuccessStatus.SUCCESS_GET_REPRESENTATIVE_COINS, representativeCoinResponses); } @@ -53,15 +56,29 @@ public ResponseEntity> public ResponseEntity>> getBitcoinDayCharts() { List ohlcvResponses = chartService.getOHLCVCharts("비트코인", "days", null); + return ApiResponse.onSuccess(SuccessStatus.SUCCESS_GET_BITCOIN_DAY_CHARTS, ohlcvResponses); } - // 비트코인 차트 (1분봉) 조회 API + // 비트코인 OHLC 차트 (1분봉) 조회 API @GetMapping("/bit-charts/minutes1") - public ResponseEntity>> getBitcoinOneMinuteCharts() { + public ResponseEntity>> getBitcoinOneMinuteCharts() { LocalDateTime startDate = dateUtil.calculateDailyStartDate(); List ohlcvResponses = chartService.getOHLCVCharts("비트코인", "minutes1", startDate); - return ApiResponse.onSuccess(SuccessStatus.SUCCESS_GET_BITCOIN_ONE_MINUTE_CHARTS, ohlcvResponses); + List ohlcResponses = ChartDto.OHLCResponse.ofOHLCResponses(ohlcvResponses); + + return ApiResponse.onSuccess(SuccessStatus.SUCCESS_GET_BITCOIN_ONE_MINUTE_CHARTS, ohlcResponses); + } + + // 비트코인 V 차트 (1분봉) 조회 API + @GetMapping("/bit-charts/minutes1/volumes") + public ResponseEntity>> getBitcoinOneMinuteVolumeCharts() { + + LocalDateTime startDate = dateUtil.calculateDailyStartDate(); + List ohlcvResponses = chartService.getOHLCVCharts("비트코인", "minutes1", startDate); + List vResponses = ChartDto.VResponse.ofVResponses(ohlcvResponses); + + return ApiResponse.onSuccess(SuccessStatus.SUCCESS_GET_BITCOIN_ONE_MINUTE_VOLUME_CHARTS, vResponses); } } \ No newline at end of file diff --git a/backend/src/main/java/org/dgu/backend/dto/ChartDto.java b/backend/src/main/java/org/dgu/backend/dto/ChartDto.java index d493cfe..034e9eb 100644 --- a/backend/src/main/java/org/dgu/backend/dto/ChartDto.java +++ b/backend/src/main/java/org/dgu/backend/dto/ChartDto.java @@ -14,6 +14,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; +import java.util.ArrayList; public class ChartDto { @Builder @@ -46,6 +47,61 @@ public static OHLCVResponse of(CandleInfo candleInfo) { } } + @Builder + @Getter + @AllArgsConstructor + @JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class) + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class OHLCResponse { + private String date; + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal openingPrice; + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal highPrice; + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal lowPrice; + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal closePrice; + + public static java.util.List ofOHLCResponses(java.util.List ohlcvResponses) { + java.util.List ohlcResponses = new ArrayList<>(); + for (OHLCVResponse ohlcvResponse : ohlcvResponses) { + ohlcResponses.add(OHLCResponse.builder() + .date(ohlcvResponse.getDate()) + .openingPrice(ohlcvResponse.getOpeningPrice()) + .highPrice(ohlcvResponse.getHighPrice()) + .lowPrice(ohlcvResponse.getLowPrice()) + .closePrice(ohlcvResponse.getClosePrice()) + .build()); + } + + return ohlcResponses; + } + } + + @Builder + @Getter + @AllArgsConstructor + @JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class) + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class VResponse { + private String date; + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal volume; + + public static java.util.List ofVResponses(java.util.List ohlcvResponses) { + java.util.List vResponses = new ArrayList<>(); + for (OHLCVResponse ohlcvResponse : ohlcvResponses) { + vResponses.add(VResponse.builder() + .date(ohlcvResponse.getDate()) + .volume(ohlcvResponse.getVolume()) + .build()); + } + + return vResponses; + } + } + @Builder @Getter @AllArgsConstructor