Skip to content

Commit

Permalink
Merge pull request #206 from Yanol-Market/feature/121-alert-post-wish
Browse files Browse the repository at this point in the history
Feature/121 alert post wish 알림 생성 (관심지역, 관심상품)
  • Loading branch information
dldmldlsy authored Jan 24, 2024
2 parents 2524820 + 8eac8f0 commit f36c7ca
Show file tree
Hide file tree
Showing 8 changed files with 191 additions and 89 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,19 @@
import site.goldenticket.domain.alert.dto.AlertUnSeenResponse;
import site.goldenticket.domain.alert.entity.Alert;
import site.goldenticket.domain.alert.repository.AlertRepository;
import site.goldenticket.domain.product.constants.AreaCode;
import site.goldenticket.domain.product.wish.entity.WishProduct;
import site.goldenticket.domain.product.wish.repository.WishProductRepository;
import site.goldenticket.domain.user.wish.service.WishRegionService;

@Service
@Transactional
@RequiredArgsConstructor
public class AlertService {

private final AlertRepository alertRepository;
private final WishRegionService wishRegionService;
private final WishProductRepository wishProductRepository;

public AlertResponse createAlertForTest(AlertRequest alertRequest) {
Alert alert = Alert.builder()
Expand Down Expand Up @@ -70,4 +76,35 @@ public AlertListResponse getAlertListByUserId(Long userId) {
Comparator.comparing(AlertResponse::createdAt).reversed());
return AlertListResponse.builder().alertResponses(alertResponses).build();
}

public void createAlertOfWishRegion(AreaCode areaCode) {
List<Long> userList = wishRegionService.findUserIdByRegion(areaCode);
for (Long userId : userList) {
createAlert(userId,
"관심있던 '" + areaCode.getAreaName() + "'지역에 새로운 상품이 등록되었습니다! 사라지기 전에 확인해보세요!");
}
}

public void createAlertOfWishProductToSelling(Long productId, String accommodationName,
String roomName) {
List<Long> userList = findUserIdListByProductId(productId);
for (Long userId : userList) {
createAlert(userId, "찜한 ‘" + accommodationName + "(" + roomName
+ ")' 상품이 판매중으로 변경되어 다시 구매가 가능합니다. 빠르게 거래를 진행해주세요!");
}
}

/***
* 특정 상품을 관심 상품으로 등록한 회원 ID 목록 조회
* @param productId 관심 상품 ID
* @return 회원 ID List
*/
public List<Long> findUserIdListByProductId(Long productId) {
List<WishProduct> wishProductList = wishProductRepository.findByProductId(productId);
List<Long> userIdList = new ArrayList<>();
for (WishProduct wishProduct : wishProductList) {
userIdList.add(wishProduct.getUserId());
}
return userIdList;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,19 @@ public void changeStatus() {
nego.setStatus(NEGOTIATION_TIMEOUT);
nego.setUpdatedAt(currentTime);

negoRepository.save(nego);

//판매자에게 타임오버 알림 전송
alertService.createAlert(product.getUserId(),
"구매자가 20분 이내에 결제를 완료하지 않아 거래가 이루어지지 않았습니다.");
"구매자가 20분 이내에 결제를 완료하지 않아 거래가 이루어지지 않았습니다.");
//구매자에게 타임오버 알림 전송
alertService.createAlert(nego.getUser().getId(),
"20분이 초과되었습니다. 아직 구매를 원하신다면, 재결제 버튼을 눌러 결제해주세요.");
negoRepository.save(nego);
"20분이 초과되었습니다. 아직 구매를 원하신다면, 재결제 버튼을 눌러 결제해주세요.");
//해당 상품 찜한 회원들에게 알림 전송
if (product.getProductStatus().equals(ProductStatus.SELLING)) {
alertService.createAlertOfWishProductToSelling(product.getId(),
product.getAccommodationName(), product.getRoomName());
}
}
} //상품 상태 판매중

Expand All @@ -65,7 +71,7 @@ public void changeStatus() {
LocalDateTime updatedAt = transferOrder.getUpdatedAt();

User user = userRepository.findById(product.getUserId())
.orElseThrow(() -> new CustomException(USER_NOT_FOUND));
.orElseThrow(() -> new CustomException(USER_NOT_FOUND));

checkAccountAndThrowException(user);

Expand All @@ -85,28 +91,29 @@ public void changeStatus() {

// 구매자에게 양도 완료 알림 전송
alertService.createAlert(transferNego.getUser().getId(),
"'" + product.getAccommodationName() + "(" + product.getRoomName()
+ ")'상품 양도가 완료되었습니다. "
+ "양도 완료에 따른 체크인 정보는 '마이페이지 > 구매내역 > 구매 완료'에서 확인하실 수 있습니다.");
"'" + product.getAccommodationName() + "(" + product.getRoomName()
+ ")'상품 양도가 완료되었습니다. "
+ "양도 완료에 따른 체크인 정보는 '마이페이지 > 구매내역 > 구매 완료'에서 확인하실 수 있습니다.");

// 판매자에게 정산 요청 알림 전송
alertService.createAlert(product.getUserId(),
"'" + product.getAccommodationName() + "(" + product.getRoomName()
+ ")'상품 양도가 완료되었습니다. 영업일 1일 이내 등록한 계좌 정보로 정산 금액이 입금됩니다."
+ "원활한 정산 진행을 위해 '마이페이지 - 나의 계좌'정보를 다시 한번 확인해주세요.");
"'" + product.getAccommodationName() + "(" + product.getRoomName()
+ ")'상품 양도가 완료되었습니다. 영업일 1일 이내 등록한 계좌 정보로 정산 금액이 입금됩니다."
+ "원활한 정산 진행을 위해 '마이페이지 - 나의 계좌'정보를 다시 한번 확인해주세요.");

// 판매자에게 계좌 등록 알림 전송

if (user != null && user.getAccountNumber() == null) {
alertService.createAlert(product.getUserId(),
"'" + product.getAccommodationName() + "(" + product.getRoomName()
+ ")'상품에 대한 원활한 정산을 위해 '마이페이지 > 내 계좌'에서 입금받으실 계좌를 등록해주세요.");
"'" + product.getAccommodationName() + "(" + product.getRoomName()
+ ")'상품에 대한 원활한 정산을 위해 '마이페이지 > 내 계좌'에서 입금받으실 계좌를 등록해주세요.");
}
}
negoRepository.saveAll(transferNegos);
}
} // 20분 뒤 자동양도
}

private void checkAccountAndThrowException(User user) {
if (user.getAccountNumber() == null) {
throw new CustomException("등록된 계좌가 없습니다.", ErrorCode.NO_REGISTERED_ACCOUNT);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,10 @@ public NegoResponse denyHandoverProduct(Long productId, PrincipalDetails princip
//판매자에게 양도 취소 알림 전송
alertService.createAlert(product.getUserId(),
"양도가 취소되었습니다. 구매자에게 결제 금액이 100% 환불됩니다.");
//해당 상품 찜한 회원들에게 알림 전송
if(product.getProductStatus().equals(ProductStatus.SELLING)) {
alertService.createAlertOfWishProductToSelling(productId, product.getAccommodationName(), product.getRoomName());
}
}

if (transferPendingNego.isPresent()) {
Expand All @@ -318,6 +322,10 @@ public NegoResponse denyHandoverProduct(Long productId, PrincipalDetails princip
//판매자에게 양도 취소 알림 전송
alertService.createAlert(product.getUserId(),
"양도가 취소되었습니다. 구매자에게 결제 금액이 100% 환불됩니다.");
//해당 상품 찜한 회원들에게 알림 전송
if(product.getProductStatus().equals(ProductStatus.SELLING)) {
alertService.createAlertOfWishProductToSelling(productId, product.getAccommodationName(), product.getRoomName());
}

return NegoResponse.fromEntity(nego);
}
Expand Down
Loading

0 comments on commit f36c7ca

Please sign in to comment.