From b53b23fd20116459674516699c3dba77b39121bc Mon Sep 17 00:00:00 2001 From: si-zero Date: Wed, 15 Apr 2026 10:45:00 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=ED=81=AC=EB=A0=88=EB=94=A7=20enum?= =?UTF-8?q?=20=ED=8C=8C=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/swyp/picke/domain/user/enums/CreditType.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/swyp/picke/domain/user/enums/CreditType.java b/src/main/java/com/swyp/picke/domain/user/enums/CreditType.java index 6b3e0ed..10afbf9 100644 --- a/src/main/java/com/swyp/picke/domain/user/enums/CreditType.java +++ b/src/main/java/com/swyp/picke/domain/user/enums/CreditType.java @@ -8,7 +8,9 @@ public enum CreditType { MAJORITY_WIN(10), // 다수결 보상: 월요일 배치, 2주 전 배틀 TOP≥10 대상 BEST_COMMENT(50), // 베댓 보상: 월요일 배치, 2주 전 배틀 좋아요 1위 WEEKLY_CHARGE(40), // 주간 자동 충전: 매주 월요일 00:00 활성 사용자 전체 - FREE_CHARGE(0); // 광고/자유 충전: 가변 금액 + FREE_CHARGE(0), // 광고/자유 충전: 가변 금액 + TOPIC_SUGGEST(30), // 주제 제안 + TOPIC_ADOPTED(100); // 주제 채택 private final int defaultAmount; From 32ad5cf13a947166621f6716bb7d33adaeb2bb58 Mon Sep 17 00:00:00 2001 From: si-zero Date: Wed, 15 Apr 2026 10:45:32 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=EB=B0=B0=ED=8B=80=20=EC=A0=9C?= =?UTF-8?q?=EC=95=88=20=EC=84=9C=EB=B9=84=EC=8A=A4=20=ED=81=AC=EB=A0=88?= =?UTF-8?q?=EB=94=A7=20=EA=B4=80=EB=A0=A8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../battle/service/BattleProposalService.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/swyp/picke/domain/battle/service/BattleProposalService.java b/src/main/java/com/swyp/picke/domain/battle/service/BattleProposalService.java index c8123e0..ec3db61 100644 --- a/src/main/java/com/swyp/picke/domain/battle/service/BattleProposalService.java +++ b/src/main/java/com/swyp/picke/domain/battle/service/BattleProposalService.java @@ -30,20 +30,17 @@ public class BattleProposalService { private final CreditService creditService; private final UserService userService; - private static final int PROPOSAL_COST = 30; - private static final int PROPOSAL_REWARD = 100; - @Transactional public BattleProposalResponse propose(BattleProposalRequest request) { User user = userService.findCurrentUser(); - // 크레딧 잔액 확인 + int cost = CreditType.TOPIC_SUGGEST.getDefaultAmount(); + int totalCredits = creditService.getTotalPoints(user.getId()); - if (totalCredits < PROPOSAL_COST) { + if (totalCredits < cost) { throw new CustomException(ErrorCode.CREDIT_NOT_ENOUGH); } - // 제안 저장 BattleProposal proposal = BattleProposal.builder() .user(user) .category(request.getCategory()) @@ -55,8 +52,7 @@ public BattleProposalResponse propose(BattleProposalRequest request) { battleProposalRepository.save(proposal); - // 30크레딧 차감 (음수로 저장) - creditService.addCredit(user.getId(), CreditType.TOPIC_SUGGEST, -PROPOSAL_COST, proposal.getId()); + creditService.addCredit(user.getId(), CreditType.TOPIC_SUGGEST, -cost, proposal.getId()); return new BattleProposalResponse(proposal); } @@ -87,8 +83,8 @@ public BattleProposalResponse review(Long proposalId, BattleProposalReviewReques if (request.getAction() == BattleProposalReviewRequest.Action.ACCEPT) { proposal.accept(); - // 100크레딧 지급 - creditService.addCredit(proposal.getUser().getId(), CreditType.TOPIC_ADOPTED, PROPOSAL_REWARD, proposalId); + int reward = CreditType.TOPIC_ADOPTED.getDefaultAmount(); + creditService.addCredit(proposal.getUser().getId(), CreditType.TOPIC_ADOPTED, reward, proposalId); } else { proposal.reject(); }