Skip to content
Merged
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
@@ -1,7 +1,10 @@
package com.pricewagon.pricewagon.domain.alarm.api;

import java.util.List;

import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
Expand All @@ -10,6 +13,7 @@
import com.pricewagon.pricewagon.domain.alarm.dto.AlarmRequestDTO;
import com.pricewagon.pricewagon.domain.alarm.dto.AlarmResponseDTO;
import com.pricewagon.pricewagon.domain.alarm.service.AlarmService.AlarmService;
import com.pricewagon.pricewagon.domain.product.dto.response.BasicProductInfo;
import com.pricewagon.pricewagon.global.config.security.CustomUserDetails;

import io.swagger.v3.oas.annotations.Operation;
Expand All @@ -32,4 +36,12 @@ public ResponseEntity<AlarmResponseDTO.registerAlarmDTO> registerAlarm(
return ResponseEntity.ok(result);
}

@Operation(summary = "알람 목록 조회", description = "알람 목록 조회하는 기능(토큰 필요)")
@GetMapping("/list")
public List<BasicProductInfo> getAlarmList(
@AuthenticationPrincipal CustomUserDetails userDetails) {
return alarmService.getAlarmList(userDetails.getUsername());

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.pricewagon.pricewagon.domain.alarm.converter;

import java.util.List;

import org.springframework.stereotype.Component;

import com.pricewagon.pricewagon.domain.alarm.entity.Alarm;
import com.pricewagon.pricewagon.domain.history.service.ProductHistoryService;
import com.pricewagon.pricewagon.domain.product.dto.response.BasicProductInfo;
import com.pricewagon.pricewagon.domain.product.entity.Product;

import lombok.RequiredArgsConstructor;

@Component
@RequiredArgsConstructor
public class AlarmConverter {
private final ProductHistoryService productHistoryService;

public List<BasicProductInfo> convertToBasicProductInfo(List<Alarm> alarms) {
return alarms.stream()
.map(like -> {
Product product = like.getProduct();
Integer previousPrice = productHistoryService.getDifferentLatestPriceByProductId(product);

return new BasicProductInfo(
product.getProductNumber(),
product.getName(),
product.getBrand(),
product.getStarScore(),
product.getReviewCount(),
product.getUserLikeCount(),
product.getImgUrl(),
product.getShopType(),
product.getCurrentPrice(),
previousPrice,
true
);
})
.toList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ public interface AlarmRepository extends JpaRepository<Alarm, Long> {
int updateAlarmStatus(@Param("id") Long id, @Param("status") AlarmStatus status,
@Param("currentStatus") AlarmStatus currentStatus);

List<Alarm> findByUserId(Long userId);

}


Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
package com.pricewagon.pricewagon.domain.alarm.service.AlarmService;

import java.util.List;

import com.pricewagon.pricewagon.domain.alarm.dto.AlarmRequestDTO;
import com.pricewagon.pricewagon.domain.alarm.dto.AlarmResponseDTO;
import com.pricewagon.pricewagon.domain.product.dto.response.BasicProductInfo;

public interface AlarmService {

void checkAllAlarmsAndNotify();

AlarmResponseDTO.registerAlarmDTO registerAlarm(AlarmRequestDTO.registerAlarm request, String email);

List<BasicProductInfo> getAlarmList(String username);
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@
import com.google.firebase.messaging.FirebaseMessaging;
import com.google.firebase.messaging.FirebaseMessagingException;
import com.google.firebase.messaging.Message;
import com.pricewagon.pricewagon.domain.alarm.converter.AlarmConverter;
import com.pricewagon.pricewagon.domain.alarm.dto.AlarmRequestDTO;
import com.pricewagon.pricewagon.domain.alarm.dto.AlarmResponseDTO;
import com.pricewagon.pricewagon.domain.alarm.entity.Alarm;
import com.pricewagon.pricewagon.domain.alarm.entity.AlarmStatus;
import com.pricewagon.pricewagon.domain.alarm.repository.AlarmRepository;
import com.pricewagon.pricewagon.domain.fcm.entity.FcmToken;
import com.pricewagon.pricewagon.domain.product.dto.response.BasicProductInfo;
import com.pricewagon.pricewagon.domain.product.entity.Product;
import com.pricewagon.pricewagon.domain.product.repository.ProductRepository;
import com.pricewagon.pricewagon.domain.product.service.ProductService;
Expand All @@ -37,6 +39,7 @@ public class AlarmServiceImpl implements AlarmService {
private final AlarmRepository alarmRepository;
private final ProductRepository productRepository;
private final FirebaseMessaging firebaseMessaging;
private final AlarmConverter alarmConverter;

@Override
@Transactional
Expand Down Expand Up @@ -168,4 +171,15 @@ protected void registerFcmToken(User user, String tokenString) {
log.info("새로운 FCM 토큰 등록: user={}, token={}", user.getAccount(), tokenString);
}
}

@Transactional(readOnly = true)
@Override
public List<BasicProductInfo> getAlarmList(String username) {
User user = userRepository.findByAccount(username)
.orElseThrow(() -> new CustomException(ErrorCode.MEMBER_NOT_FOUND));

List<Alarm> alarms = alarmRepository.findByUserId(user.getId());

return alarmConverter.convertToBasicProductInfo(alarms);
}
}
6 changes: 3 additions & 3 deletions src/main/resources/application-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,15 @@ spring:
show-sql: true

datasource:
url: jdbc:mysql://${LOCAL_MYSQL_HOST}:${LOCAL_MYSQL_PORT}/${LOCAL_DB_NAME}?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8
url: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${DB_NAME}?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
maxLifetime: 580000
maximum-pool-size: 20
idle-timeout: 30000
connection-timeout: 30000
username: ${LOCAL_MYSQL_USERNAME}
password: ${LOCAL_MYSQL_PASSWORD}
username: ${MYSQL_USERNAME}
password: ${MYSQL_PASSWORD}



Expand Down