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,84 @@
package com.goldenchart.controller;
import com.goldenchart.service.AppSettingsService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* 앱 전역 차트 기본 설정 REST API.
*
* <p>프론트엔드에 하드코딩된 기본값들(기본 심볼·타임프레임·테마·캔들 색상 등)을
* 장치/사용자별로 DB 에서 관리한다.</p>
*
* <pre>
* GET /app-settings — 현재 기본 설정 로드 (앱 시작 시 호출)
* PUT /app-settings — 기본 설정 저장
* </pre>
*
* 반환 구조:
* <pre>
* {
* "defaultSymbol": "KRW-BTC",
* "defaultTimeframe": "1D",
* "defaultChartType": "candlestick",
* "defaultTheme": "dark",
* "defaultLogScale": false,
* "defaultLayoutId": "1",
* "mainChartStyle": { "upColor":"#ff6b6b", "downColor":"#4dabf7", ... },
* "syncOptions": { "symbol":false, "interval":false, "crosshair":true, ... }
* }
* </pre>
*/
@RestController
@RequestMapping("/app-settings")
@RequiredArgsConstructor
public class AppSettingsController {
private final AppSettingsService service;
// ── GET ───────────────────────────────────────────────────────────────────
/**
* 앱 시작 시 기본 설정 로드.
* DB 에 데이터가 없으면 엔티티 기본값(hardcoded fallback)을 반환한다.
*/
@GetMapping
public ResponseEntity<Map<String, Object>> get(
@RequestHeader(value = "X-User-Id", required = false) String userIdHeader,
@RequestHeader(value = "X-Device-Id", required = false) String deviceId) {
return ResponseEntity.ok(service.get(parseUserId(userIdHeader), deviceId));
}
// ── PUT ───────────────────────────────────────────────────────────────────
/**
* 기본 설정 저장.
* 변경된 필드만 보내도 되며, 없는 키는 기존 값 유지.
*
* <p>프론트엔드에서 호출해야 하는 시점:
* <ul>
* <li>테마 변경 시 (defaultTheme)</li>
* <li>캔들 색상 변경 시 (mainChartStyle)</li>
* <li>레이아웃 변경 시 (defaultLayoutId)</li>
* <li>기본 심볼/타임프레임 변경 시</li>
* <li>동기화 옵션 변경 시 (syncOptions)</li>
* </ul>
*/
@PutMapping
public ResponseEntity<Map<String, Object>> save(
@RequestHeader(value = "X-User-Id", required = false) String userIdHeader,
@RequestHeader(value = "X-Device-Id", required = false) String deviceId,
@RequestBody Map<String, Object> data) {
return ResponseEntity.ok(service.save(parseUserId(userIdHeader), deviceId, data));
}
// ── helpers ───────────────────────────────────────────────────────────────
private Long parseUserId(String header) {
if (header == null || header.isBlank()) return null;
try { return Long.parseLong(header); } catch (NumberFormatException e) { return null; }
}
}