Skip to content

Commit 8914b03

Browse files
authored
Merge pull request #145 from TeamMemeSphere/develop
Develop에서 Main으로
2 parents 14389bb + 0bff535 commit 8914b03

File tree

22 files changed

+278
-92
lines changed

22 files changed

+278
-92
lines changed

src/main/java/com/memesphere/domain/chartdata/converter/ChartDataConverter.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@ public static ChartData toChartData(MemeCoin memeCoin, BinanceTickerResponse res
1313
return ChartData.builder()
1414
.memeCoin(memeCoin)
1515
.recordedTime(LocalDateTime.now())
16-
.price(new BigDecimal(response.getLastPrice()))
17-
.priceChange(new BigDecimal(response.getPriceChange()))
18-
.priceChangeRate(new BigDecimal(response.getPriceChangePercent()))
19-
.weighted_average_price(new BigDecimal(response.getWeightedAvgPrice()))
16+
.price(Double.parseDouble(response.getLastPrice()))
17+
.priceChange(Double.parseDouble(response.getPriceChange()))
18+
.priceChangeRate(Double.parseDouble(response.getPriceChangePercent()))
19+
.weighted_average_price(Double.parseDouble(response.getWeightedAvgPrice()))
2020
.volume(new BigDecimal(response.getVolume()))
21-
.low_price(new BigDecimal(response.getLowPrice()))
22-
.high_price(new BigDecimal(response.getHighPrice()))
21+
.low_price(Double.parseDouble(response.getLowPrice()))
22+
.high_price(Double.parseDouble(response.getHighPrice()))
2323
.build();
2424
}
2525
}

src/main/java/com/memesphere/domain/chartdata/entity/ChartData.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,25 +27,25 @@ public class ChartData extends BaseEntity {
2727
private LocalDateTime recordedTime;
2828

2929
@Column
30-
private BigDecimal price;
30+
private Double price;
3131

3232
@Column
33-
private BigDecimal priceChange;
33+
private Double priceChange;
3434

3535
@Column
36-
private BigDecimal priceChangeRate;
36+
private Double priceChangeRate;
3737

3838
@Column
39-
private BigDecimal weighted_average_price;
39+
private Double weighted_average_price;
4040

4141
@Column
4242
private BigDecimal volume;
4343

4444
@Column
45-
private BigDecimal low_price;
45+
private Double low_price;
4646

4747
@Column
48-
private BigDecimal high_price;
48+
private Double high_price;
4949

5050
@ManyToOne(fetch = FetchType.LAZY)
5151
@JoinColumn(name = "coin_id", nullable = false) // 외래 키

src/main/java/com/memesphere/domain/chartdata/scheduler/ChartDataScheduler.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.memesphere.domain.binance.dto.response.BinanceTickerResponse;
44
import com.memesphere.domain.binance.service.BinanceQueryService;
55
import com.memesphere.domain.chartdata.entity.ChartData;
6+
import com.memesphere.domain.chartdata.repository.ChartDataRepository;
7+
import com.memesphere.domain.dashboard.dto.response.DashboardTrendResponse;
68
import com.memesphere.domain.notification.service.PushNotificationService;
79
import com.memesphere.global.apipayload.code.status.ErrorStatus;
810
import com.memesphere.global.apipayload.exception.GeneralException;
@@ -15,6 +17,7 @@
1517
import org.springframework.stereotype.Component;
1618
import org.springframework.transaction.annotation.Transactional;
1719

20+
import java.util.ArrayList;
1821
import java.util.List;
1922
import java.util.Set;
2023

@@ -28,6 +31,7 @@ public class ChartDataScheduler {
2831
private final MemeCoinQueryService memeCoinQueryService;
2932
private final LoggedInUserStore loggedInUserStore;
3033
private final PushNotificationService pushNotificationService;
34+
private final ChartDataRepository chartDataRepository;
3135

3236
@Scheduled(cron = "0 0/10 * * * ?") // 0, 10, 20, 30, 40, 50분에 실행
3337
@Transactional
@@ -37,6 +41,9 @@ public void updateChartData() {
3741

3842
List<MemeCoin> memeCoins = memeCoinRepository.findAll();
3943

44+
// 이전에 기록된 top5 밈코인
45+
List<MemeCoin> prevCoinList = memeCoinRepository.findTop5OrderByRank();
46+
4047
for (MemeCoin memeCoin : memeCoins) {
4148
try {
4249
String symbol = memeCoin.getSymbol() + "USDT";
@@ -54,6 +61,30 @@ public void updateChartData() {
5461
for (Long userId : loggedInUsers) {
5562
pushNotificationService.send(userId);
5663
}
64+
65+
// 밈코인 랭킹 업데이트
66+
updateRank(prevCoinList);
67+
}
68+
69+
public void updateRank(List<MemeCoin> prevCoinList) {
70+
// 최신 거래량 top5 밈코인-차트데이터
71+
List<ChartData> updatedChartDataList = chartDataRepository.findTop5OrderByVolumeDesc();
72+
73+
if (prevCoinList != null) {
74+
// 현재 top5에 들지 않는 밈코인 순위 처리
75+
List<MemeCoin> currCoinList = updatedChartDataList.stream().map(ChartData::getMemeCoin).toList();
76+
for (MemeCoin prevCoin : prevCoinList) {
77+
if (!currCoinList.contains(prevCoin)) prevCoin.updateRank(null);
78+
}
79+
}
80+
81+
// 현재 top5 밈코인
82+
for (int i = 0; i < 5; i++) {
83+
MemeCoin memeCoin = updatedChartDataList.get(i).getMemeCoin();
84+
85+
Integer currRank = i + 1;
86+
memeCoin.updateRank(currRank);
87+
}
5788
}
5889
}
5990

src/main/java/com/memesphere/domain/chat/controller/ChatController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public ApiResponse<Page<ChatResponse>> getChatList(@PathVariable("coin_id") Long
5050
description = "특정 코인에 대한 최신 댓글을 반환합니다. 요청 시 최신 댓글 하나만 가져옵니다.")
5151
public ApiResponse<ChatResponse> getLatestMessages(@PathVariable("coin_id") Long coin_id,
5252
@AuthenticationPrincipal CustomUserDetails customUserDetails) {
53-
User user = customUserDetails.getUser();
53+
User user = (customUserDetails != null) ? customUserDetails.getUser() : null;
5454
// 최신 댓글을 가져오는 서비스 메서드 호출
5555
ChatResponse latestMessage = chatService.getLatestMessages(coin_id, user);
5656

src/main/java/com/memesphere/domain/collection/converter/CollectionConverter.java

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.springframework.data.domain.Page;
1313

1414
import java.math.BigDecimal;
15+
import java.math.RoundingMode;
1516
import java.util.List;
1617
import java.util.stream.Collectors;
1718

@@ -56,11 +57,21 @@ private static CollectionGridPreviewResponse toCollectionGridPreviewDTO(Collecti
5657
.name(memeCoin.getName())
5758
.symbol(memeCoin.getSymbol())
5859
.image(memeCoin.getImage())
59-
.currentPrice(chartData.getPrice())
60-
.highPrice(chartData.getHigh_price())
61-
.lowPrice(chartData.getLow_price())
62-
.priceChange(chartData.getPriceChange())
63-
.priceChangeRate(chartData.getPriceChangeRate())
60+
.currentPrice(BigDecimal.valueOf(chartData.getPrice())
61+
.setScale(8, RoundingMode.HALF_UP)
62+
.toPlainString())
63+
.highPrice(BigDecimal.valueOf(chartData.getHigh_price())
64+
.setScale(8, RoundingMode.HALF_UP)
65+
.toPlainString())
66+
.lowPrice(BigDecimal.valueOf(chartData.getLow_price())
67+
.setScale(8, RoundingMode.HALF_UP)
68+
.toPlainString())
69+
.priceChange(BigDecimal.valueOf(chartData.getPriceChange())
70+
.setScale(8, RoundingMode.HALF_UP)
71+
.toPlainString())
72+
.priceChangeRate(BigDecimal.valueOf(chartData.getPriceChangeRate())
73+
.setScale(8, RoundingMode.HALF_UP)
74+
.toPlainString())
6475
.build();
6576
}
6677

@@ -72,9 +83,15 @@ public static CollectionListPreviewResponse toCollectionListPreviewDTO(Collectio
7283
.coinId(memeCoin.getId())
7384
.name(memeCoin.getName())
7485
.symbol(memeCoin.getSymbol())
75-
.currentPrice(chartData.getPrice())
76-
.priceChangeRate(chartData.getPriceChangeRate())
77-
.weightedAveragePrice(chartData.getWeighted_average_price())
86+
.currentPrice(BigDecimal.valueOf(chartData.getPrice())
87+
.setScale(8, RoundingMode.HALF_UP)
88+
.toPlainString())
89+
.priceChangeRate(BigDecimal.valueOf(chartData.getPriceChangeRate())
90+
.setScale(8, RoundingMode.HALF_UP)
91+
.toPlainString())
92+
.weightedAveragePrice(BigDecimal.valueOf(chartData.getWeighted_average_price())
93+
.setScale(8, RoundingMode.HALF_UP)
94+
.toPlainString())
7895
.volume(chartData.getVolume())
7996
.build();
8097
}

src/main/java/com/memesphere/domain/collection/dto/response/CollectionGridPreviewResponse.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.memesphere.domain.collection.dto.response;
22

3+
import com.fasterxml.jackson.annotation.JsonFormat;
34
import io.swagger.v3.oas.annotations.media.Schema;
45
import lombok.AllArgsConstructor;
56
import lombok.Builder;
@@ -15,20 +16,28 @@
1516
public class CollectionGridPreviewResponse {
1617
@Schema(description = "밈코인 id", example = "1")
1718
Long coinId;
19+
1820
@Schema(description = "밈코인 name", example = "도지코인")
1921
String name;
22+
2023
@Schema(description = "밈코인 symbol", example = "DOGE")
2124
String symbol;
25+
2226
@Schema(description = "밈코인 image", example = "https://bucketname.s3.region.amazonaws.com/image1.jpg")
2327
String image;
28+
2429
@Schema(description = "차트 데이터의 price", example = "2000")
25-
BigDecimal currentPrice;
30+
String currentPrice;
31+
2632
@Schema(description = "차트 데이터의 high_price", example = "2500")
27-
BigDecimal highPrice;
33+
String highPrice;
34+
2835
@Schema(description = "차트 데이터의 low_price", example = "1500")
29-
BigDecimal lowPrice;
36+
String lowPrice;
37+
3038
@Schema(description = "차트 데이터의 price_change", example = "500")
31-
BigDecimal priceChange;
39+
String priceChange;
40+
3241
@Schema(description = "차트 데이터의 price_change_rate", example = "2.4")
33-
BigDecimal priceChangeRate;
42+
String priceChangeRate;
3443
}

src/main/java/com/memesphere/domain/collection/dto/response/CollectionListPreviewResponse.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.memesphere.domain.collection.dto.response;
22

3+
import com.fasterxml.jackson.annotation.JsonFormat;
34
import io.swagger.v3.oas.annotations.media.Schema;
45
import lombok.AllArgsConstructor;
56
import lombok.Builder;
@@ -15,16 +16,22 @@
1516
public class CollectionListPreviewResponse {
1617
@Schema(description = "밈코인 id", example = "1")
1718
Long coinId;
19+
1820
@Schema(description = "밈코인 name", example = "도지코인")
1921
String name;
22+
2023
@Schema(description = "밈코인 symbol", example = "DOGE")
2124
String symbol;
25+
2226
@Schema(description = "차트 데이터의 price", example = "2000")
23-
BigDecimal currentPrice;
27+
String currentPrice;
28+
2429
@Schema(description = "차트 데이터의 price_change_rate", example = "+2.4%")
25-
BigDecimal priceChangeRate;
30+
String priceChangeRate;
31+
2632
@Schema(description = "차트 데이터의 weighted average price", example = "10000")
27-
BigDecimal weightedAveragePrice; // market cap 대신 사용
33+
String weightedAveragePrice; // market cap 대신 사용
34+
2835
@Schema(description = "차트 데이터의 volume", example = "5")
2936
BigDecimal volume;
3037
}

src/main/java/com/memesphere/domain/dashboard/converter/DashboardConverter.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99

1010
import java.math.BigDecimal;
11+
import java.math.RoundingMode;
1112
import java.time.LocalDateTime;
1213
import java.util.ArrayList;
1314
import java.util.List;
@@ -68,11 +69,19 @@ public static DashboardTrendResponse toTrend(ChartData data,
6869
.name(memeCoin.getName())
6970
.symbol(memeCoin.getSymbol())
7071
.volume(data.getVolume())
71-
.price(data.getPrice())
72-
.priceChange(data.getPriceChange())
73-
.priceChangeAbsolute(data.getPriceChange().abs())
74-
.priceChangeDirection(data.getPriceChangeRate().compareTo(BigDecimal.ZERO) < 0 ? "down" : "up")
75-
.priceChangeRate(data.getPriceChangeRate())
72+
.price(BigDecimal.valueOf(data.getPrice())
73+
.setScale(8, RoundingMode.HALF_UP)
74+
.toPlainString())
75+
.priceChange(BigDecimal.valueOf(data.getPriceChange())
76+
.setScale(8, RoundingMode.HALF_UP)
77+
.toPlainString())
78+
.priceChangeAbsolute(BigDecimal.valueOf(Math.abs(data.getPriceChange()))
79+
.setScale(8, RoundingMode.HALF_UP)
80+
.toPlainString())
81+
.priceChangeDirection(data.getPriceChangeRate() < 0 ? "down" : "up")
82+
.priceChangeRate(BigDecimal.valueOf(data.getPriceChangeRate())
83+
.setScale(8, RoundingMode.HALF_UP)
84+
.toPlainString())
7685
.rankChangeDirection(rankDirection)
7786
.build();
7887
}

src/main/java/com/memesphere/domain/dashboard/dto/response/DashboardTrendResponse.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.memesphere.domain.dashboard.dto.response;
22

3+
import com.fasterxml.jackson.annotation.JsonFormat;
34
import io.swagger.v3.oas.annotations.media.Schema;
45
import lombok.Builder;
56
import lombok.Getter;
@@ -25,19 +26,19 @@ public class DashboardTrendResponse {
2526
private BigDecimal volume;
2627

2728
@Schema(description = "현재가", example = "0.20")
28-
private BigDecimal price;
29+
private String price;
2930

3031
@Schema(description = "가격 변화량", example = "-0.03")
31-
private BigDecimal priceChange;
32+
private String priceChange;
3233

3334
@Schema(description = "가격 변화량 절대값", example = "0.03")
34-
private BigDecimal priceChangeAbsolute;
35+
private String priceChangeAbsolute;
3536

3637
@Schema(description = "가격 변화 방향", example = "down")
3738
private String priceChangeDirection;
3839

3940
@Schema(description = "가격 변화율", example = "-6.35")
40-
private BigDecimal priceChangeRate;
41+
private String priceChangeRate;
4142

4243
@Schema(description = "순위 변화 방향", example = "down")
4344
private String rankChangeDirection;

src/main/java/com/memesphere/domain/detail/converter/DetailConverter.java

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.memesphere.domain.detail.dto.response.DetailGetResponse;
77

88
import java.math.BigDecimal;
9+
import java.math.RoundingMode;
910

1011
public class DetailConverter {
1112

@@ -26,14 +27,28 @@ public static DetailGetResponse toDetailGetResponse(MemeCoin memeCoin) {
2627
public static PriceInfoResponse toPriceInfoResponse(MemeCoin memeCoin, ChartData data) {
2728
return PriceInfoResponse.builder()
2829
.coinId(memeCoin.getId())
29-
.price(data.getPrice())
30-
.priceChange(data.getPriceChange())
31-
.priceChangeAbsolute(data.getPriceChange().abs())
32-
.priceChangeDirection(data.getPriceChangeRate().compareTo(BigDecimal.ZERO) < 0 ? "down" : "up")
33-
.priceChangeRate(data.getPriceChangeRate())
34-
.weightedAveragePrice(data.getWeighted_average_price())
35-
.highPrice(data.getHigh_price())
36-
.lowPrice(data.getLow_price())
30+
.price(BigDecimal.valueOf(data.getPrice())
31+
.setScale(8, RoundingMode.HALF_UP)
32+
.toPlainString())
33+
.priceChange(BigDecimal.valueOf(data.getPriceChange())
34+
.setScale(8, RoundingMode.HALF_UP)
35+
.toPlainString())
36+
.priceChangeAbsolute(BigDecimal.valueOf(Math.abs(data.getPriceChange()))
37+
.setScale(8, RoundingMode.HALF_UP)
38+
.toPlainString())
39+
.priceChangeDirection(data.getPriceChangeRate() < 0 ? "down" : "up")
40+
.priceChangeRate(BigDecimal.valueOf(data.getPriceChangeRate())
41+
.setScale(8, RoundingMode.HALF_UP)
42+
.toPlainString())
43+
.weightedAveragePrice(BigDecimal.valueOf(data.getWeighted_average_price())
44+
.setScale(8, RoundingMode.HALF_UP)
45+
.toPlainString())
46+
.highPrice(BigDecimal.valueOf(data.getHigh_price())
47+
.setScale(8, RoundingMode.HALF_UP)
48+
.toPlainString())
49+
.lowPrice(BigDecimal.valueOf(data.getLow_price())
50+
.setScale(8, RoundingMode.HALF_UP)
51+
.toPlainString())
3752
.build();
3853
}
3954
}

0 commit comments

Comments
 (0)