Skip to content

Commit 5f02e1a

Browse files
authored
Merge pull request #171 from prgrms-web-devcourse-final-project/refactor#169
[Refactor]: 코드 리팩토링 -1
2 parents a5993ba + b1cb5b3 commit 5f02e1a

34 files changed

+302
-548
lines changed
Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package com.backend.domain.cash.controller;
22

3-
import com.backend.domain.cash.dto.CashResponse;
4-
import com.backend.domain.cash.dto.CashTransactionResponse;
5-
import com.backend.domain.cash.dto.CashTransactionsResponse;
3+
import com.backend.domain.cash.dto.response.CashResponse;
4+
import com.backend.domain.cash.dto.response.CashTransactionResponse;
5+
import com.backend.domain.cash.dto.response.CashTransactionsResponse;
66
import com.backend.domain.cash.service.CashService;
77
import com.backend.domain.member.entity.Member;
8-
import com.backend.domain.member.repository.MemberRepository;
98
import com.backend.domain.member.service.MemberService;
9+
import com.backend.global.response.RsData;
1010
import io.swagger.v3.oas.annotations.Operation;
1111
import io.swagger.v3.oas.annotations.tags.Tag;
1212
import lombok.RequiredArgsConstructor;
@@ -19,29 +19,29 @@
1919

2020
@RestController
2121
@RequiredArgsConstructor
22-
@RequestMapping("/api/v1")
22+
@RequestMapping("/api/v1/cash")
2323
@Tag(name = "Cash", description = "돈 관련 API")
2424
public class ApiV1CashController {
2525

2626
private final MemberService memberService;
2727
private final CashService cashService;
2828

29-
@GetMapping("/cash")
29+
@GetMapping
3030
@Operation(summary = "내 지갑 잔액 조회", description = "지갑이 없으면 404를 반환합니다.")
3131
@Transactional(readOnly = true)
32-
public CashResponse getMyCash(@AuthenticationPrincipal User user) {
32+
public RsData<CashResponse> getMyCash(@AuthenticationPrincipal User user) {
3333
if (user == null) {
3434
throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "로그인이 필요합니다.");
3535
}
36-
3736
Member actor = memberService.findMemberByEmail(user.getUsername());
38-
return cashService.getMyCashResponse(actor); // 컨트롤러는 위임만
37+
CashResponse data = cashService.getMyCashResponse(actor);
38+
return RsData.ok("지갑 잔액이 조회되었습니다.", data);
3939
}
4040

41-
@GetMapping("/cash/transactions")
42-
@Operation(summary = "내 원장 목록(입금/출금)", description = "지갑 미생성 시 404 반환, 페이지네이션 추가")
41+
@GetMapping("/transactions")
42+
@Operation(summary = "내 원장 목록(입금/출금)", description = "지갑 미생성 시 404 반환")
4343
@Transactional(readOnly = true)
44-
public CashTransactionsResponse getMyTransactions(
44+
public RsData<CashTransactionsResponse> getMyTransactions(
4545
@AuthenticationPrincipal User user,
4646
@RequestParam(defaultValue = "1") int page,
4747
@RequestParam(defaultValue = "20") int size
@@ -50,19 +50,20 @@ public CashTransactionsResponse getMyTransactions(
5050
throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "로그인이 필요합니다.");
5151
}
5252
Member actor = memberService.findMemberByEmail(user.getUsername());
53-
return cashService.getMyTransactions(actor, page, size);
53+
CashTransactionsResponse data = cashService.getMyTransactions(actor, page, size);
54+
return RsData.ok("지갑 원장 목록이 조회되었습니다.", data);
5455
}
5556

56-
// 단건 상세..
57-
@GetMapping("/cash/transactions/{transactionId}")
57+
@GetMapping("/transactions/{transactionId}")
5858
@Operation(summary = "내 원장 단건 상세")
5959
@Transactional(readOnly = true)
60-
public CashTransactionResponse getMyTransactionDetail(
60+
public RsData<CashTransactionResponse> getMyTransactionDetail(
6161
@AuthenticationPrincipal User user,
6262
@PathVariable Long transactionId
6363
) {
6464
if (user == null) throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "로그인이 필요합니다.");
6565
Member actor = memberService.findMemberByEmail(user.getUsername());
66-
return cashService.getMyTransactionDetail(actor, transactionId);
66+
CashTransactionResponse data = cashService.getMyTransactionDetail(actor, transactionId);
67+
return RsData.ok("지갑 원장 상세가 조회되었습니다.", data);
6768
}
6869
}

src/main/java/com/backend/domain/cash/controller/ApiV1CashMockController.java

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

src/main/java/com/backend/domain/cash/dto/CashResponse.java renamed to src/main/java/com/backend/domain/cash/dto/response/CashResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.backend.domain.cash.dto;
1+
package com.backend.domain.cash.dto.response;
22

33
import lombok.Builder;
44
import lombok.Getter;

src/main/java/com/backend/domain/cash/dto/CashTransactionItemResponse.java renamed to src/main/java/com/backend/domain/cash/dto/response/CashTransactionItemResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.backend.domain.cash.dto;
1+
package com.backend.domain.cash.dto.response;
22

33
import com.fasterxml.jackson.annotation.JsonInclude;
44
import lombok.Builder;

src/main/java/com/backend/domain/cash/dto/CashTransactionResponse.java renamed to src/main/java/com/backend/domain/cash/dto/response/CashTransactionResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.backend.domain.cash.dto;
1+
package com.backend.domain.cash.dto.response;
22

33
import com.fasterxml.jackson.annotation.JsonInclude;
44
import lombok.Builder;

src/main/java/com/backend/domain/cash/dto/CashTransactionsResponse.java renamed to src/main/java/com/backend/domain/cash/dto/response/CashTransactionsResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.backend.domain.cash.dto;
1+
package com.backend.domain.cash.dto.response;
22

33
import lombok.Builder;
44
import lombok.Getter;

src/main/java/com/backend/domain/cash/service/CashService.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
import com.backend.domain.bid.repository.BidRepository;
44
import com.backend.domain.cash.enums.CashTxType;
55
import com.backend.domain.cash.enums.RelatedType;
6-
import com.backend.domain.cash.dto.CashResponse;
7-
import com.backend.domain.cash.dto.CashTransactionItemResponse;
8-
import com.backend.domain.cash.dto.CashTransactionResponse;
9-
import com.backend.domain.cash.dto.CashTransactionsResponse;
6+
import com.backend.domain.cash.dto.response.CashResponse;
7+
import com.backend.domain.cash.dto.response.CashTransactionItemResponse;
8+
import com.backend.domain.cash.dto.response.CashTransactionResponse;
9+
import com.backend.domain.cash.dto.response.CashTransactionsResponse;
1010
import com.backend.domain.cash.entity.Cash;
1111
import com.backend.domain.cash.entity.CashTransaction;
1212
import com.backend.domain.cash.repository.CashRepository;
@@ -176,15 +176,17 @@ public CashTransaction withdraw(Member member, long amount,
176176
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "잔액이 부족합니다.");
177177
}
178178

179+
long delta = -Math.abs(amount); // 출금은 음수로 저장..
180+
long newBalance = current + delta; // = current - amount
181+
179182
// 잔액 차감..
180-
long newBalance = current - amount;
181183
cash.setBalance(newBalance);
182184

183185
// 원장(WITHDRAW) 한 줄 추가..
184186
var tx = CashTransaction.builder()
185187
.cash(cash)
186188
.type(CashTxType.WITHDRAW) // 출금..
187-
.amount(amount) // 항상 양수로 저장..
189+
.amount(delta) // 음수로 저장..
188190
.balanceAfter(newBalance) // 이 줄 반영 후 잔액..
189191
.relatedType(relatedType) // 돈이 왜 빠졌는지..
190192
.relatedId(relatedId) // 관련 ID (예: bidId)..

src/main/java/com/backend/domain/payment/controller/ApiV1PaymentController.java

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,15 @@
22

33
import com.backend.domain.member.entity.Member;
44
import com.backend.domain.member.service.MemberService;
5-
import com.backend.domain.payment.dto.*;
5+
import com.backend.domain.payment.dto.request.PaymentRequest;
6+
import com.backend.domain.payment.dto.request.TossIssueBillingKeyRequest;
7+
import com.backend.domain.payment.dto.response.MyPaymentResponse;
8+
import com.backend.domain.payment.dto.response.MyPaymentsResponse;
9+
import com.backend.domain.payment.dto.response.PaymentResponse;
10+
import com.backend.domain.payment.dto.response.TossIssueBillingKeyResponse;
611
import com.backend.domain.payment.service.PaymentService;
712
import com.backend.domain.payment.service.TossBillingClientService;
13+
import com.backend.global.response.RsData;
814
import io.swagger.v3.oas.annotations.Operation;
915
import io.swagger.v3.oas.annotations.tags.Tag;
1016
import jakarta.validation.Valid;
@@ -26,56 +32,61 @@ public class ApiV1PaymentController {
2632
private final PaymentService paymentService;
2733
private final TossBillingClientService tossBillingClientService;
2834

35+
// 공통: 인증 사용자(Member) 가져오기..
36+
private Member getActor(User user) {
37+
if (user == null) throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "로그인이 필요합니다.");
38+
return memberService.findMemberByEmail(user.getUsername());
39+
}
40+
2941
@PostMapping
3042
@Operation(summary="지갑 충전 요청", description="idempotencyKey로 중복 충전 방지, 일단은 idempotencyKey 아무키로 등록해주세요!.")
31-
public PaymentResponse charge(
43+
public RsData<PaymentResponse> charge(
3244
@AuthenticationPrincipal User user,
3345
@RequestBody @Valid PaymentRequest req
3446
) {
35-
if (user == null) {
36-
throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "로그인이 필요합니다.");
37-
}
38-
39-
Member actor = memberService.findMemberByEmail(user.getUsername());
40-
41-
return paymentService.charge(actor, req);
47+
Member actor = getActor(user);
48+
PaymentResponse data = paymentService.charge(actor, req);
49+
return RsData.created("지갑 충전이 완료되었습니다.", data);
4250
}
4351

4452
@PostMapping("/toss/issue-billing-key")
45-
public TossIssueBillingKeyResponse issueBillingKey(
53+
@Operation(summary="토스 빌링키 발급", description="카드/계좌 등록용 빌링키를 발급합니다.")
54+
public RsData<TossIssueBillingKeyResponse> issueBillingKey(
4655
@AuthenticationPrincipal User user,
4756
@RequestBody TossIssueBillingKeyRequest req
4857
) {
49-
if (user == null) throw new ResponseStatusException(HttpStatus.UNAUTHORIZED);
58+
Member me = getActor(user);
59+
String customerKey = "user-" + me.getId();
60+
TossIssueBillingKeyResponse data = tossBillingClientService.issueBillingKey(customerKey, req.getAuthKey());
5061

51-
Member me = memberService.findMemberByEmail(user.getUsername());
52-
String customerKey = "user-" + me.getId(); // ★ 프런트 값 무시하고 서버에서 생성
53-
54-
return tossBillingClientService.issueBillingKey(customerKey, req.getAuthKey());
62+
return RsData.ok("빌링키가 발급되었습니다.", data);
5563
}
5664

5765
@GetMapping("/me")
66+
@Operation(summary="내 결제 내역")
5867
@Transactional(readOnly = true)
59-
public MyPaymentsResponse getMyPayments(
68+
public RsData<MyPaymentsResponse> getMyPayments(
6069
@AuthenticationPrincipal User user,
6170
@RequestParam(defaultValue = "1") int page,
6271
@RequestParam(defaultValue = "20") int size
6372
) {
64-
if (user == null) throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "로그인이 필요합니다.");
65-
Member actor = memberService.findMemberByEmail(user.getUsername());
66-
return paymentService.getMyPayments(actor, page, size); //
73+
Member actor = getActor(user);
74+
MyPaymentsResponse data = paymentService.getMyPayments(actor, page, size);
75+
76+
return RsData.ok("내 결제 내역이 조회되었습니다.", data);
6777
}
6878

6979
@GetMapping("/me/{paymentId}")
7080
@Operation(summary = "내 결제 단건 상세")
7181
@Transactional(readOnly = true)
72-
public MyPaymentResponse getMyPaymentDetail(
82+
public RsData<MyPaymentResponse> getMyPaymentDetail(
7383
@AuthenticationPrincipal User user,
7484
@PathVariable Long paymentId
7585
) {
76-
if (user == null) throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "로그인이 필요합니다.");
77-
Member actor = memberService.findMemberByEmail(user.getUsername());
78-
return paymentService.getMyPaymentDetail(actor, paymentId);
86+
Member actor = getActor(user);
87+
MyPaymentResponse data = paymentService.getMyPaymentDetail(actor, paymentId);
88+
89+
return RsData.ok("결제 상세가 조회되었습니다.", data);
7990
}
8091

8192
}

0 commit comments

Comments
 (0)