Skip to content

Commit 0fdb4fb

Browse files
author
nimuy99
committed
Merge branch 'main' of https://github.com/TeamMemeSphere/Backend-MemeSphere into develop
2 parents 2d29e98 + a6d361d commit 0fdb4fb

File tree

98 files changed

+1277
-470
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

98 files changed

+1277
-470
lines changed

src/main/java/com/memesphere/MemesphereApplication.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
import org.springframework.boot.SpringApplication;
44
import org.springframework.boot.autoconfigure.SpringBootApplication;
55
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
6+
import org.springframework.scheduling.annotation.EnableScheduling;
67

78
@SpringBootApplication
89
@EnableJpaAuditing
10+
@EnableScheduling
911
public class MemesphereApplication {
1012

1113
public static void main(String[] args) {
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.memesphere.binance.dto.response;
2+
3+
import lombok.Data;
4+
5+
@Data
6+
public class BinanceTickerResponse {
7+
private String symbol;
8+
private String priceChange;
9+
private String priceChangePercent;
10+
private String weightedAvgPrice;
11+
private String lastPrice;
12+
private String highPrice;
13+
private String lowPrice;
14+
private String volume;
15+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.memesphere.binance.service;
2+
3+
import com.memesphere.binance.dto.response.BinanceTickerResponse;
4+
5+
public interface BinanceQueryService {
6+
BinanceTickerResponse getTickerData(String symbol);
7+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.memesphere.binance.service;
2+
3+
import com.memesphere.binance.dto.response.BinanceTickerResponse;
4+
import lombok.RequiredArgsConstructor;
5+
import org.springframework.stereotype.Service;
6+
import org.springframework.transaction.annotation.Transactional;
7+
import org.springframework.web.client.RestTemplate;
8+
9+
@Service
10+
@RequiredArgsConstructor
11+
public class BinanceQueryServiceImpl implements BinanceQueryService {
12+
private final RestTemplate restTemplate;
13+
14+
private static final String BINANCE_API_URL = "https://api.binance.com/api/v3/ticker/24hr?symbol=";
15+
16+
@Override
17+
@Transactional
18+
public BinanceTickerResponse getTickerData(String symbol) {
19+
String url = BINANCE_API_URL + symbol;
20+
return restTemplate.getForObject(url, BinanceTickerResponse.class);
21+
}
22+
}

src/main/java/com/memesphere/dashboard/service/DashboardQueryService.java

Lines changed: 0 additions & 15 deletions
This file was deleted.

src/main/java/com/memesphere/dashboard/service/DashboardQueryServiceImpl.java

Lines changed: 0 additions & 45 deletions
This file was deleted.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.memesphere.domain.chartdata.converter;
2+
3+
import com.memesphere.binance.dto.response.BinanceTickerResponse;
4+
import com.memesphere.domain.chartdata.entity.ChartData;
5+
import com.memesphere.domain.memecoin.entity.MemeCoin;
6+
7+
import java.math.BigDecimal;
8+
import java.time.LocalDateTime;
9+
10+
public class ChartDataConverter {
11+
12+
public static ChartData toChartData(MemeCoin memeCoin, BinanceTickerResponse response) {
13+
return ChartData.builder()
14+
.memeCoin(memeCoin)
15+
.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()))
20+
.volume(new BigDecimal(response.getVolume()))
21+
.low_price(new BigDecimal(response.getLowPrice()))
22+
.high_price(new BigDecimal(response.getHighPrice()))
23+
.build();
24+
}
25+
}

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

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package com.memesphere.chartdata.domain;
1+
package com.memesphere.domain.chartdata.entity;
22

3-
import com.memesphere.global.domain.BaseEntity;
4-
import com.memesphere.memecoin.domain.MemeCoin;
3+
import com.memesphere.global.common.BaseEntity;
4+
import com.memesphere.domain.memecoin.entity.MemeCoin;
55
import jakarta.persistence.*;
66
import lombok.*;
77
import org.hibernate.annotations.DynamicInsert;
@@ -24,7 +24,7 @@ public class ChartData extends BaseEntity {
2424
private Long id;
2525

2626
@Column
27-
private LocalDateTime recorded_time;
27+
private LocalDateTime recordedTime;
2828

2929
@Column
3030
private BigDecimal price;
@@ -35,22 +35,26 @@ public class ChartData extends BaseEntity {
3535
@Column
3636
private BigDecimal priceChangeRate;
3737

38-
// @Column
39-
// private BigDecimal marketCap;
40-
4138
@Column
4239
private BigDecimal weighted_average_price;
4340

4441
@Column
45-
private Integer volume;
42+
private BigDecimal volume;
4643

4744
@Column
4845
private BigDecimal low_price;
4946

5047
@Column
5148
private BigDecimal high_price;
5249

53-
@OneToOne(fetch = FetchType.LAZY)
50+
@ManyToOne(fetch = FetchType.LAZY)
5451
@JoinColumn(name = "coin_id", nullable = false) // 외래 키
5552
private MemeCoin memeCoin;
53+
54+
public void setMemeCoin(MemeCoin memeCoin) {
55+
this.memeCoin = memeCoin;
56+
if (!memeCoin.getChartDataList().contains(this)) {
57+
memeCoin.getChartDataList().add(this);
58+
}
59+
}
5660
}

src/main/java/com/memesphere/chartdata/repository/ChartDataRepository.java renamed to src/main/java/com/memesphere/domain/chartdata/repository/ChartDataRepository.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
package com.memesphere.chartdata.repository;
1+
package com.memesphere.domain.chartdata.repository;
22

3-
import com.memesphere.chartdata.domain.ChartData;
3+
import com.memesphere.domain.chartdata.entity.ChartData;
4+
import com.memesphere.domain.memecoin.entity.MemeCoin;
45
import org.springframework.data.jpa.repository.EntityGraph;
56
import org.springframework.data.jpa.repository.JpaRepository;
67
import org.springframework.data.jpa.repository.Query;
@@ -13,4 +14,6 @@ public interface ChartDataRepository extends JpaRepository<ChartData, Long> {
1314

1415
@EntityGraph(attributePaths = {"memeCoin"})
1516
List<ChartData> findTop5ByOrderByVolumeDesc();
17+
18+
List<ChartData> findByMemeCoinOrderByRecordedTimeDesc(MemeCoin memeCoin);
1619
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.memesphere.domain.chartdata.scheduler;
2+
3+
import com.memesphere.binance.dto.response.BinanceTickerResponse;
4+
import com.memesphere.binance.service.BinanceQueryService;
5+
import com.memesphere.domain.chartdata.entity.ChartData;
6+
import com.memesphere.global.apipayload.code.status.ErrorStatus;
7+
import com.memesphere.global.apipayload.exception.GeneralException;
8+
import com.memesphere.domain.memecoin.entity.MemeCoin;
9+
import com.memesphere.domain.memecoin.repository.MemeCoinRepository;
10+
import com.memesphere.domain.memecoin.service.MemeCoinQueryService;
11+
import lombok.RequiredArgsConstructor;
12+
import org.springframework.scheduling.annotation.Scheduled;
13+
import org.springframework.stereotype.Component;
14+
import org.springframework.transaction.annotation.Transactional;
15+
16+
import java.util.List;
17+
18+
import static com.memesphere.domain.chartdata.converter.ChartDataConverter.toChartData;
19+
20+
@Component
21+
@RequiredArgsConstructor
22+
public class ChartDataScheduler {
23+
private final MemeCoinRepository memeCoinRepository;
24+
private final BinanceQueryService binanceQueryService;
25+
private final MemeCoinQueryService memeCoinQueryService;
26+
27+
@Scheduled(fixedRate = 600000) // 10분 간격 실행
28+
@Transactional
29+
public void updateChartData() {
30+
List<MemeCoin> memeCoins = memeCoinRepository.findAll();
31+
32+
for (MemeCoin memeCoin : memeCoins) {
33+
try {
34+
String symbol = memeCoin.getSymbol() + "USDT";
35+
BinanceTickerResponse response = binanceQueryService.getTickerData(symbol);
36+
37+
ChartData chartData = toChartData(memeCoin,response);
38+
39+
memeCoinQueryService.updateChartData(memeCoin.getId(), chartData);
40+
41+
} catch (Exception e) {
42+
throw new GeneralException(ErrorStatus.CANNOT_LOAD_CHARTDATA);
43+
}
44+
}
45+
}
46+
}
47+
48+

0 commit comments

Comments
 (0)