85 lines
3.4 KiB
Java
85 lines
3.4 KiB
Java
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; }
|
|
}
|
|
}
|