Skip to content

Commit 3651d0e

Browse files
authored
Merge pull request #79 from Bumblebee-Bee/Refactor/JIRA-kan-67-지갑-거래내역-관리-new
Refactor/jira kan 67 지갑 거래내역 관리 new
2 parents 40d276c + af375e3 commit 3651d0e

76 files changed

Lines changed: 2198 additions & 908 deletions

File tree

Some content is hidden

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

build.gradle

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ dependencies {
4848
testRuntimeOnly 'org.junit.platform:junit-platform-launcher' // JUnit 플랫폼 런처 (테스트 실행 환경 제공)
4949
testImplementation "org.testcontainers:testcontainers:1.19.2" // Docker 기반 통합 테스트 지원 (Testcontainers 기본 라이브러리)
5050
testImplementation "org.testcontainers:junit-jupiter:1.19.2" // JUnit 5(Testcontainers 연동) 지원
51+
testImplementation 'org.testcontainers:postgresql:1.19.2'
5152

5253
// 데이터베이스
5354
runtimeOnly 'com.h2database:h2' // 인메모리 데이터베이스a H2 (테스트 및 개발 환경용)
@@ -67,6 +68,11 @@ dependencies {
6768
// AWS
6869
implementation 'software.amazon.awssdk:kms:2.20.0' // AWS KMS 의존성
6970

71+
// RabbitMQ
72+
implementation 'org.springframework.boot:spring-boot-starter-amqp'
73+
testImplementation 'org.springframework.amqp:spring-rabbit-test'
74+
testImplementation 'org.testcontainers:rabbitmq'
75+
7076
// 기타
7177
compileOnly 'org.projectlombok:lombok' // Lombok (Getter, Setter, Constructor 자동 생성)
7278
annotationProcessor 'org.projectlombok:lombok' // Lombok 사용을 위한 어노테이션 프로세서

docker-compose.yml

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,24 @@ services:
4949
environment:
5050
- INFLUXDB_DB=k6
5151

52+
rabbitmq:
53+
image: rabbitmq:3.12-management
54+
container_name: rabbitmq
55+
restart: always
56+
networks:
57+
- monitoring
58+
ports:
59+
- "5672:5672"
60+
- "15673:15672"
61+
environment:
62+
- RABBITMQ_DEFAULT_USER=guest
63+
- RABBITMQ_DEFAULT_PASS=guest
64+
healthcheck:
65+
test: [ "CMD", "rabbitmq-diagnostics", "-q", "ping" ]
66+
interval: 10s
67+
timeout: 10s
68+
retries: 5
69+
5270
# 🔹 Grafana (InfluxDB 데이터 시각화)
5371
grafana:
5472
image: grafana/grafana:9.3.8
@@ -96,7 +114,6 @@ services:
96114
ports:
97115
- "9090:8080"
98116
environment:
99-
- SPRING_PROFILES_ACTIVE=docker
100117
- SPRING_DATASOURCE_URL=jdbc:postgresql://postgres-db:5432/xchangepass
101118
- SPRING_DATASOURCE_USERNAME=postgres
102119
- SPRING_DATASOURCE_PASSWORD=postgres

src/main/java/bumblebee/xchangepass/domain/card/controller/CardController.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import bumblebee.xchangepass.domain.card.dto.response.DetailedCardInfoResponse;
66
import bumblebee.xchangepass.domain.card.service.CardService;
77
import bumblebee.xchangepass.global.error.ErrorCode;
8-
import bumblebee.xchangepass.global.security.jwt.JwtUtil;
8+
import bumblebee.xchangepass.global.security.jwt.CustomUserDetails;
99
import io.swagger.v3.oas.annotations.Operation;
1010
import io.swagger.v3.oas.annotations.media.Content;
1111
import io.swagger.v3.oas.annotations.media.ExampleObject;
@@ -17,6 +17,7 @@
1717
import lombok.RequiredArgsConstructor;
1818
import org.springframework.http.HttpStatus;
1919
import org.springframework.security.core.Authentication;
20+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
2021
import org.springframework.web.bind.annotation.*;
2122

2223
import java.util.List;
@@ -40,8 +41,8 @@ public class CardController {
4041
})
4142
@ResponseStatus(HttpStatus.CREATED)
4243
@PostMapping("/physical")
43-
public void generatePhysicalCard(Authentication authentication) {
44-
cardService.generatePhysicalCard(JwtUtil.getLoginId(authentication));
44+
public void generatePhysicalCard(@AuthenticationPrincipal CustomUserDetails user) {
45+
cardService.generatePhysicalCard(user.getUserId());
4546
}
4647

4748
@Operation(summary = "카드 상태 변경", description = "현재 로그인한 사용자의 카드 상태를 변경합니다.")
@@ -56,9 +57,9 @@ public void generatePhysicalCard(Authentication authentication) {
5657
})
5758
@ResponseStatus(HttpStatus.NO_CONTENT)
5859
@PutMapping("/status")
59-
public void changeCardStatus(Authentication authentication,
60+
public void changeCardStatus(@AuthenticationPrincipal CustomUserDetails user,
6061
@RequestBody @Valid ChangeCardStatusRequest request) {
61-
cardService.changeCardStatus(JwtUtil.getLoginId(authentication), request);
62+
cardService.changeCardStatus(user.getUserId(), request);
6263
}
6364

6465
@Operation(summary = "보유 카드 목록 조회", description = "현재 로그인한 사용자의 보유 카드 목록을 조회합니다.")
@@ -73,8 +74,8 @@ public void changeCardStatus(Authentication authentication,
7374
})
7475
@ResponseStatus(HttpStatus.OK)
7576
@GetMapping
76-
public List<BasicCardInfoResponse> getBasicCardInfo(Authentication authentication) {
77-
return cardService.getBasicCardInfo(JwtUtil.getLoginId(authentication));
77+
public List<BasicCardInfoResponse> getBasicCardInfo(@AuthenticationPrincipal CustomUserDetails user) {
78+
return cardService.getBasicCardInfo(user.getUserId());
7879
}
7980

8081
@Operation(summary = "카드 상세 정보 조회", description = "특정 카드의 상세 정보를 조회합니다.")

src/main/java/bumblebee/xchangepass/domain/card/entity/Card.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package bumblebee.xchangepass.domain.card.entity;
22

3-
import bumblebee.xchangepass.domain.wallet.entity.Wallet;
3+
import bumblebee.xchangepass.domain.wallet.wallet.entity.Wallet;
44
import bumblebee.xchangepass.global.common.EncryptionData;
55
import jakarta.persistence.*;
66
import lombok.Builder;

src/main/java/bumblebee/xchangepass/domain/card/service/CardService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import bumblebee.xchangepass.domain.card.repository.CardRepository;
99
import bumblebee.xchangepass.domain.user.entity.User;
1010
import bumblebee.xchangepass.domain.user.repository.UserRepository;
11-
import bumblebee.xchangepass.domain.wallet.entity.Wallet;
11+
import bumblebee.xchangepass.domain.wallet.wallet.entity.Wallet;
1212
import bumblebee.xchangepass.global.error.ErrorCode;
1313
import bumblebee.xchangepass.global.exception.CommonException;
1414
import bumblebee.xchangepass.global.security.crypto.AESEncryption;

src/main/java/bumblebee/xchangepass/domain/exchangeTransaction/controller/ExchangeTransactionController.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import bumblebee.xchangepass.domain.exchangeTransaction.dto.request.ExchangeRequestDTO;
44
import bumblebee.xchangepass.domain.exchangeTransaction.dto.response.ExchangeResponseDTO;
55
import bumblebee.xchangepass.domain.exchangeTransaction.service.ExchangeTransactionService;
6-
import bumblebee.xchangepass.global.security.jwt.JwtUtil;
6+
import bumblebee.xchangepass.global.security.jwt.CustomUserDetails;
77
import io.swagger.v3.oas.annotations.Operation;
88
import io.swagger.v3.oas.annotations.media.Content;
99
import io.swagger.v3.oas.annotations.media.ExampleObject;
@@ -14,6 +14,7 @@
1414
import lombok.RequiredArgsConstructor;
1515
import org.springframework.http.HttpStatus;
1616
import org.springframework.security.core.Authentication;
17+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
1718
import org.springframework.web.ErrorResponse;
1819
import org.springframework.web.bind.annotation.*;
1920

@@ -42,8 +43,8 @@ public class ExchangeTransactionController {
4243
})
4344
@ResponseStatus(HttpStatus.OK)
4445
@PostMapping("/create")
45-
public ExchangeResponseDTO createTransaction(@RequestBody ExchangeRequestDTO request, Authentication authentication) {
46-
return exchangeService.createTransaction(request, JwtUtil.getLoginId(authentication));
46+
public ExchangeResponseDTO createTransaction(@RequestBody ExchangeRequestDTO request, @AuthenticationPrincipal CustomUserDetails user) {
47+
return exchangeService.createTransaction(request, user.getUserId());
4748
}
4849

4950

@@ -65,7 +66,7 @@ public ExchangeResponseDTO createTransaction(@RequestBody ExchangeRequestDTO req
6566
})
6667
@ResponseStatus(HttpStatus.OK)
6768
@PostMapping("/execute")
68-
public ExchangeResponseDTO executeTransaction(@RequestParam Long transactionId, Authentication authentication) {
69-
return exchangeService.executeTransaction(transactionId, JwtUtil.getLoginId(authentication));
69+
public ExchangeResponseDTO executeTransaction(@RequestParam Long transactionId, @AuthenticationPrincipal CustomUserDetails user) {
70+
return exchangeService.executeTransaction(transactionId, user.getUserId());
7071
}
7172
}

src/main/java/bumblebee/xchangepass/domain/exchangeTransaction/service/ExchangeTransactionService.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
import bumblebee.xchangepass.domain.exchangeTransaction.repository.ExchangeTransactionRepository;
1010
import bumblebee.xchangepass.domain.user.entity.User;
1111
import bumblebee.xchangepass.domain.user.repository.UserRepository;
12-
import bumblebee.xchangepass.domain.wallet.dto.request.WalletInOutRequest;
13-
import bumblebee.xchangepass.domain.wallet.entity.Wallet;
14-
import bumblebee.xchangepass.domain.wallet.service.WalletService;
15-
import bumblebee.xchangepass.domain.walletBalance.entity.WalletBalance;
16-
import bumblebee.xchangepass.domain.walletBalance.repository.WalletBalanceRepository;
17-
import bumblebee.xchangepass.domain.walletBalance.service.WalletBalanceService;
12+
import bumblebee.xchangepass.domain.wallet.balance.entity.WalletBalance;
13+
import bumblebee.xchangepass.domain.wallet.balance.repository.WalletBalanceRepository;
14+
import bumblebee.xchangepass.domain.wallet.balance.service.WalletBalanceService;
15+
import bumblebee.xchangepass.domain.wallet.wallet.dto.request.WalletInOutRequest;
16+
import bumblebee.xchangepass.domain.wallet.wallet.entity.Wallet;
17+
import bumblebee.xchangepass.domain.wallet.wallet.service.WalletService;
1818
import bumblebee.xchangepass.global.error.ErrorCode;
1919
import bumblebee.xchangepass.global.exception.CommonException;
2020
import lombok.RequiredArgsConstructor;
@@ -110,14 +110,14 @@ public ExchangeResponseDTO executeTransaction(Long transactionId, Long userId) {
110110

111111
if (fromBalance.getBalance().compareTo(amount) < 0) {
112112
WalletInOutRequest chargeRequest = WalletInOutRequest.builder()
113-
.userId(userId)
113+
// .userId(userId)
114114
.fromCurrency(Currency.getInstance(fromCurrency))
115115
.toCurrency(Currency.getInstance(fromCurrency))
116116
.amount(amount)
117117
.chargeDatetime(LocalDateTime.now())
118118
.build();
119119

120-
walletService.charge(chargeRequest);
120+
// walletService.charge(chargeRequest);
121121
}
122122

123123
WalletBalance toBalance = getOrCreateBalance(wallet, toCurrency);

src/main/java/bumblebee/xchangepass/domain/refresh/RefreshTokenController.java renamed to src/main/java/bumblebee/xchangepass/domain/refresh/controller/RefreshTokenController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
package bumblebee.xchangepass.domain.refresh;
1+
package bumblebee.xchangepass.domain.refresh.controller;
22

33
import bumblebee.xchangepass.domain.refresh.dto.RefreshTokenRequest;
4+
import bumblebee.xchangepass.domain.refresh.service.RefreshTokenService;
45
import io.swagger.v3.oas.annotations.Operation;
56
import io.swagger.v3.oas.annotations.media.Content;
67
import io.swagger.v3.oas.annotations.media.ExampleObject;
@@ -43,7 +44,6 @@ public class RefreshTokenController {
4344
@ResponseStatus(HttpStatus.OK)
4445
@PostMapping("/token-refresh")
4546
public void tokenRefresh(@RequestBody @Valid RefreshTokenRequest request) {
46-
// token 재발급
4747
refreshTokenService.refreshToken(request.refreshToken());
4848
}
4949

src/main/java/bumblebee/xchangepass/domain/refresh/RefreshToken.java renamed to src/main/java/bumblebee/xchangepass/domain/refresh/entity/RefreshToken.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package bumblebee.xchangepass.domain.refresh;
1+
package bumblebee.xchangepass.domain.refresh.entity;
22

33
import bumblebee.xchangepass.global.error.ErrorCode;
44
import lombok.AccessLevel;

src/main/java/bumblebee/xchangepass/domain/refresh/RefreshTokenRepository.java renamed to src/main/java/bumblebee/xchangepass/domain/refresh/repository/RefreshTokenRepository.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,20 @@
1-
package bumblebee.xchangepass.domain.refresh;
1+
package bumblebee.xchangepass.domain.refresh.repository;
22

33
import bumblebee.xchangepass.global.error.ErrorCode;
44
import lombok.RequiredArgsConstructor;
55
import org.springframework.data.redis.core.RedisTemplate;
66
import org.springframework.stereotype.Repository;
77

8-
import java.util.Set;
98
import java.util.concurrent.TimeUnit;
109

10+
import static bumblebee.xchangepass.global.common.Constants.REFRESH_TOKEN_TTL;
11+
1112
@Repository
1213
@RequiredArgsConstructor
1314
public class RefreshTokenRepository {
1415

1516
private final RedisTemplate<String, Object> jsonRedisTemplate;
1617

17-
private static final Long REFRESH_TOKEN_TTL = 24 * 60 * 60L; // 24시간 (초 단위)
18-
1918
/**
2019
* Refresh Token 저장 (사용자당 하나만 유지, 기존 토큰 자동 삭제)
2120
*/

0 commit comments

Comments
 (0)