Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws-chat") //웹소켓 연결 주소
.setAllowedOrigins("http://localhost:3000"); //cors 허용
.setAllowedOrigins("http://localhost:3000", "https://dangsim-fe.pages.dev"); //cors 허용
// .withSockJS();
}

Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/dangsim/payment/entity/Payment.java
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,8 @@ public static Payment of(BigDecimal reward, PaymentStatus status, String merchan
}


public void updatePaymentSuccessStatus(PaymentStatus successPaymentStatus) {
this.status = successPaymentStatus;
public void updateStatus(PaymentStatus status) {
this.status = status;
}

public void updatePerformer(User performer) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,6 @@ public void updatePaymentAndTaskStatus(String merchantUid) {
.orElseThrow(() -> new BaseException(PaymentErrorCode.NOT_FOUND_PAYMENT));

// 상태 업데이트
payment.updatePaymentSuccessStatus(PaymentStatus.PAYMENT_SUCCESSES);
payment.updateStatus(PaymentStatus.PAYMENT_SUCCESSES);
}
}
10 changes: 8 additions & 2 deletions src/main/java/com/dangsim/reward/entity/Reward.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,17 +58,23 @@ public class Reward extends BaseEntity {
private LocalDateTime completedAt;

@Builder(access = PRIVATE)
public Reward(BigDecimal amount, Task task, User user, LocalDateTime completedAt) {
public Reward(BigDecimal beforeReward, BigDecimal amount, BigDecimal afterReward,
Task task, User user, LocalDateTime completedAt) {
this.beforeReward = beforeReward;
this.amount = amount;
this.afterReward = afterReward;
this.task = task;
this.user = user;
this.requestedAt = LocalDateTime.now();
this.completedAt = completedAt;
}

public static Reward of(BigDecimal amount, Task task, User user, LocalDateTime completedAt) {
public static Reward of(BigDecimal beforeReward, BigDecimal amount, BigDecimal afterReward,
Task task, User user, LocalDateTime completedAt) {
return Reward.builder()
.beforeReward(beforeReward)
.amount(amount)
.afterReward(afterReward)
.task(task)
.user(user)
.requestedAt(LocalDateTime.now())
Expand Down
12 changes: 11 additions & 1 deletion src/main/java/com/dangsim/reward/service/RewardService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.dangsim.chat.entity.ChatRoom;
import com.dangsim.chat.repository.ChatRoomRepository;
import com.dangsim.common.exception.runtime.BaseException;
import com.dangsim.payment.entity.Payment;
import com.dangsim.payment.repository.PaymentRepository;
import com.dangsim.reward.dto.response.RewardChatResponse;
Expand All @@ -19,6 +20,8 @@
import java.math.BigDecimal;
import java.time.LocalDateTime;

import static com.dangsim.user.exception.UserErrorCode.USER_NOT_FOUND;

@Service
@RequiredArgsConstructor
public class RewardService {
Expand Down Expand Up @@ -59,16 +62,23 @@ public Reward updateRewardByTaskCompleteBtn(Long chatId) {
BigDecimal afterReward = beforeReward.add(rewardAmount);

// 6. User reward 값 업데이트
performer.updateReward(afterReward);
// performer.updateReward(afterReward);
User managedUser = userRepository.findById(performer.getId())
.orElseThrow(() -> new BaseException(USER_NOT_FOUND));
managedUser.updateReward(afterReward);

userRepository.save(performer);

// 7. 정산 내역 저장
Reward statement = Reward.of(
beforeReward,
rewardAmount,
afterReward,
task,
performer,
LocalDateTime.now()
);

rewardStatementRepository.save(statement);

return statement;
Expand Down
38 changes: 37 additions & 1 deletion src/main/java/com/dangsim/task/service/TaskService.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
package com.dangsim.task.service;

import static com.dangsim.payment.entity.PaymentStatus.*;
import static com.dangsim.payment.entity.QPayment.payment;
import static com.dangsim.task.entity.TaskStatus.*;
import static com.dangsim.user.exception.UserErrorCode.USER_NOT_FOUND;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Objects;

import com.dangsim.payment.entity.PaymentStatus;
import com.dangsim.reward.entity.Reward;
import com.dangsim.reward.repository.RewardRepository;
import com.dangsim.user.repository.UserRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand Down Expand Up @@ -45,6 +52,9 @@ public class TaskService {
private final PaymentRepository paymentRepository;
private final ChatRoomRepository chatRoomRepository;
private final ChatMessageRepository chatMessageRepository;
private final RewardRepository rewardRepository;
private final UserRepository userRepository;


@Transactional
public TaskResponseDto createTask(TaskRequestDto requestDto, User user) {
Expand Down Expand Up @@ -96,8 +106,34 @@ public TaskDeleteResponse deleteTaskById(Long taskId, User user) {

validateNotAssigned(findTask);

// 작성자(요청자)의 리워드 환불
BigDecimal beforeReward = user.getReward();
BigDecimal taskReward = findTask.getReward();
BigDecimal afterReward = beforeReward.add(taskReward);

// 리워드 정산 기록
Reward rewardRecord = Reward.of(
beforeReward,
taskReward,
afterReward,
findTask,
user,
LocalDateTime.now()
);

// 사용자 리워드 업데이트
User managedUser = userRepository.findById(user.getId())
.orElseThrow(() -> new BaseException(USER_NOT_FOUND));
managedUser.updateReward(afterReward);

rewardRepository.save(rewardRecord);

// payment status 업데이트
Payment payment = paymentRepository.findByTaskId(findTask.getId())
.orElseThrow(() -> new BaseException(PaymentErrorCode.NOT_FOUND_PAYMENT));;
payment.updateStatus(PaymentStatus.PAYMENT_REFUNDED);

findTask.updateStatus(TASK_DELETE);
// TODO 소원님: Payment, PG 등등 상태 환블로 변경

return new TaskDeleteResponse(true);
}
Expand Down
12 changes: 12 additions & 0 deletions src/test/java/com/dangsim/task/service/TaskServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
import java.util.List;
import java.util.Optional;

import com.dangsim.reward.entity.Reward;
import com.dangsim.reward.repository.RewardRepository;
import com.dangsim.user.repository.UserRepository;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
Expand Down Expand Up @@ -72,6 +75,12 @@ public class TaskServiceTest {
@InjectMocks
PaymentGatewayService paymentGatewayService;

@Mock
UserRepository userRepository;

@Mock
RewardRepository rewardRepository;

@DisplayName("일치하는 심부름 요청이 없으면 예외가 발생한다.")
@Test
void throwNotFoundExceptionWhenNotExistTaskByTaskId() {
Expand Down Expand Up @@ -307,6 +316,9 @@ void deleteTaskByOwnerAndNotMatched() {
ReflectionTestUtils.setField(task, "status", TASK_NOT_ASSIGNED);

given(taskRepository.findById(any(Long.class))).willReturn(Optional.of(task));
given(userRepository.findById(requester.getId())).willReturn(Optional.of(requester));
given(paymentRepository.findByTaskId(any())).willReturn(Optional.of(mock(Payment.class)));
given(rewardRepository.save(any())).willReturn(mock(Reward.class));

// when
TaskDeleteResponse responseDto = taskService.deleteTaskById(task.getId(), requester);
Expand Down