알림 시간봉 오류 수정

This commit is contained in:
Macbook
2026-05-29 20:42:35 +09:00
parent a5f0a7eefd
commit 775f83e1b3
13 changed files with 200 additions and 35 deletions
@@ -2,6 +2,7 @@ package com.goldenchart.service;
import com.goldenchart.dto.TradeSignalDto;
import com.goldenchart.entity.GcTradeSignal;
import com.goldenchart.repository.GcStrategyRepository;
import com.goldenchart.repository.GcTradeSignalRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -22,6 +23,7 @@ import java.util.List;
public class TradeSignalService {
private final GcTradeSignalRepository repo;
private final GcStrategyRepository strategyRepo;
private final FcmPushService fcmPushService;
// ── 저장 ─────────────────────────────────────────────────────────────────
@@ -31,12 +33,13 @@ public class TradeSignalService {
String signalType, double price,
long candleTime, String candleType,
String executionType) {
String resolvedName = resolveStrategyName(strategyId, strategyName);
GcTradeSignal entity = GcTradeSignal.builder()
.deviceId(deviceId)
.userId(userId)
.market(market)
.strategyId(strategyId)
.strategyName(strategyName)
.strategyName(resolvedName)
.signalType(signalType)
.price(price)
.candleTime(candleTime)
@@ -49,7 +52,7 @@ public class TradeSignalService {
// 로그인 사용자는 live 설정에 userId만 있고 deviceId가 null — FCM은 userId 기준으로 발송
if (userId != null || (deviceId != null && !deviceId.isBlank())) {
fcmPushService.sendTradeSignalIfEnabled(
deviceId, userId, market, signalType, price, strategyName, saved.getId());
deviceId, userId, market, signalType, price, resolvedName, saved.getId());
}
return toDto(saved);
}
@@ -66,9 +69,11 @@ public class TradeSignalService {
@Transactional(readOnly = true)
public List<TradeSignalDto> listByMarket(Long userId, String deviceId, String market) {
return repo.findByDeviceIdAndMarketOrderByCreatedAtDesc(
deviceId != null ? deviceId : "", market)
.stream().map(this::toDto).toList();
List<GcTradeSignal> list = userId != null
? repo.findByUserIdAndMarketOrderByCreatedAtDesc(userId, market)
: repo.findByDeviceIdAndMarketOrderByCreatedAtDesc(
deviceId != null ? deviceId : "", market);
return list.stream().map(this::toDto).toList();
}
// ── 삭제 ─────────────────────────────────────────────────────────────────
@@ -117,6 +122,14 @@ public class TradeSignalService {
return deviceId.equals(entity.getDeviceId());
}
private String resolveStrategyName(Long strategyId, String strategyName) {
if (strategyName != null && !strategyName.isBlank()) return strategyName;
if (strategyId == null) return null;
return strategyRepo.findById(strategyId)
.map(s -> s.getName())
.orElse(null);
}
// ── 변환 ─────────────────────────────────────────────────────────────────
private TradeSignalDto toDto(GcTradeSignal e) {