goldenChat base source add

This commit is contained in:
aidev
2026-05-23 15:11:48 +09:00
commit a4ea7762b5
2081 changed files with 1155760 additions and 0 deletions
@@ -0,0 +1,94 @@
package com.goldenchart.service;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.goldenchart.dto.StrategyDto;
import com.goldenchart.entity.GcStrategy;
import com.goldenchart.repository.GcStrategyRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Optional;
@Service
@RequiredArgsConstructor
@Slf4j
public class StrategyService {
private final GcStrategyRepository repository;
private final ObjectMapper objectMapper;
// ── 조회 ──────────────────────────────────────────────────────────────────
public List<StrategyDto> list(Long userId, String deviceId) {
List<GcStrategy> entities = userId != null
? repository.findByUserIdOrderByUpdatedAtDesc(userId)
: repository.findByDeviceIdOrderByUpdatedAtDesc(deviceId != null ? deviceId : "");
return entities.stream().map(this::toDto).toList();
}
public Optional<StrategyDto> findById(Long id) {
return repository.findById(id).map(this::toDto);
}
// ── 저장 / 수정 ───────────────────────────────────────────────────────────
@Transactional
public StrategyDto save(StrategyDto dto, Long userId, String deviceId) {
GcStrategy entity;
if (dto.getId() != null) {
entity = repository.findById(dto.getId()).orElseGet(GcStrategy::new);
} else {
entity = new GcStrategy();
entity.setUserId(userId);
entity.setDeviceId(deviceId);
}
entity.setName(dto.getName() != null ? dto.getName() : "전략");
entity.setDescription(dto.getDescription());
if (dto.getEnabled() != null) entity.setEnabled(dto.getEnabled());
else if (entity.getEnabled() == null) entity.setEnabled(true);
try {
entity.setBuyConditionJson(
dto.getBuyCondition() != null ? objectMapper.writeValueAsString(dto.getBuyCondition()) : null);
entity.setSellConditionJson(
dto.getSellCondition() != null ? objectMapper.writeValueAsString(dto.getSellCondition()) : null);
} catch (Exception e) {
log.warn("전략 DSL 직렬화 실패: {}", e.getMessage());
}
return toDto(repository.save(entity));
}
// ── 삭제 ──────────────────────────────────────────────────────────────────
@Transactional
public void delete(Long id) {
repository.deleteById(id);
}
// ── 변환 ──────────────────────────────────────────────────────────────────
private StrategyDto toDto(GcStrategy e) {
StrategyDto dto = new StrategyDto();
dto.setId(e.getId());
dto.setName(e.getName());
dto.setDescription(e.getDescription());
dto.setEnabled(e.getEnabled());
dto.setCreatedAt(e.getCreatedAt());
dto.setUpdatedAt(e.getUpdatedAt());
try {
if (e.getBuyConditionJson() != null)
dto.setBuyCondition(objectMapper.readTree(e.getBuyConditionJson()));
if (e.getSellConditionJson() != null)
dto.setSellCondition(objectMapper.readTree(e.getSellConditionJson()));
} catch (Exception ex) {
log.warn("전략 DSL 역직렬화 실패: {}", ex.getMessage());
}
return dto;
}
}