goldenChat base source add
This commit is contained in:
@@ -0,0 +1,137 @@
|
||||
package com.goldenchart.controller;
|
||||
|
||||
import com.goldenchart.service.IndicatorSettingsService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 전역 지표 파라미터 CRUD REST API.
|
||||
*
|
||||
* <p>프론트엔드 indicatorRegistry.ts 의 defaultParams 를 완전히 대체하는
|
||||
* 사용자별 지표 파라미터를 저장/조회한다.</p>
|
||||
*
|
||||
* <pre>
|
||||
* GET /indicator-settings — 전체 지표 파라미터 조회
|
||||
* GET /indicator-settings/{type} — 특정 지표 파라미터 조회
|
||||
* PUT /indicator-settings — 전체 지표 파라미터 저장 (덮어쓰기)
|
||||
* PATCH /indicator-settings/{type} — 특정 지표 파라미터 병합 저장
|
||||
* </pre>
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/indicator-settings")
|
||||
@RequiredArgsConstructor
|
||||
public class IndicatorSettingsController {
|
||||
|
||||
private final IndicatorSettingsService service;
|
||||
|
||||
// ── 헤더 파싱 헬퍼 ────────────────────────────────────────────────────────
|
||||
|
||||
private Long userId(String userIdHeader) {
|
||||
if (userIdHeader == null || userIdHeader.isBlank()) return null;
|
||||
try { return Long.parseLong(userIdHeader); } catch (NumberFormatException e) { return null; }
|
||||
}
|
||||
|
||||
// ── GET: 전체 파라미터 조회 ────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* 이 장치/사용자의 모든 지표 파라미터를 반환.
|
||||
* 프론트엔드 앱 시작 시 호출하여 전역 설정을 로드한다.
|
||||
*/
|
||||
@GetMapping
|
||||
public ResponseEntity<Map<String, Map<String, Object>>> getAll(
|
||||
@RequestHeader(value = "X-User-Id", required = false) String userIdHeader,
|
||||
@RequestHeader(value = "X-Device-Id", required = false) String deviceId) {
|
||||
Map<String, Map<String, Object>> result = service.getAll(userId(userIdHeader), deviceId);
|
||||
return ResponseEntity.ok(result);
|
||||
}
|
||||
|
||||
// ── GET: 특정 지표 파라미터 조회 ──────────────────────────────────────────
|
||||
|
||||
@GetMapping("/{indicatorType}")
|
||||
public ResponseEntity<Map<String, Object>> getForType(
|
||||
@PathVariable String indicatorType,
|
||||
@RequestHeader(value = "X-User-Id", required = false) String userIdHeader,
|
||||
@RequestHeader(value = "X-Device-Id", required = false) String deviceId) {
|
||||
return ResponseEntity.ok(service.getForType(userId(userIdHeader), deviceId, indicatorType));
|
||||
}
|
||||
|
||||
// ── PUT: 전체 파라미터 저장 ────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* 모든 지표 파라미터를 한 번에 저장(덮어쓰기).
|
||||
*
|
||||
* Request body:
|
||||
* {
|
||||
* "RSI": {"length": 9, "src": "close"},
|
||||
* "MACD": {"fastLength": 12, "slowLength": 26, "signalLength": 9},
|
||||
* "BollingerBands":{"length": 20, "mult": 2.0},
|
||||
* ...
|
||||
* }
|
||||
*/
|
||||
@PutMapping
|
||||
public ResponseEntity<Void> saveAll(
|
||||
@RequestHeader(value = "X-User-Id", required = false) String userIdHeader,
|
||||
@RequestHeader(value = "X-Device-Id", required = false) String deviceId,
|
||||
@RequestBody Map<String, Map<String, Object>> allParams) {
|
||||
service.saveAll(userId(userIdHeader), deviceId, allParams);
|
||||
return ResponseEntity.noContent().build();
|
||||
}
|
||||
|
||||
// ── PATCH: 특정 지표 파라미터 병합 저장 ────────────────────────────────────
|
||||
|
||||
/**
|
||||
* 특정 지표의 파라미터만 업데이트.
|
||||
* 나머지 지표 설정은 유지된다.
|
||||
*
|
||||
* PATCH /indicator-settings/RSI
|
||||
* Body: {"length": 14, "src": "close"}
|
||||
*/
|
||||
@PatchMapping("/{indicatorType}")
|
||||
public ResponseEntity<Void> saveForType(
|
||||
@PathVariable String indicatorType,
|
||||
@RequestHeader(value = "X-User-Id", required = false) String userIdHeader,
|
||||
@RequestHeader(value = "X-Device-Id", required = false) String deviceId,
|
||||
@RequestBody Map<String, Object> params) {
|
||||
service.saveForType(userId(userIdHeader), deviceId, indicatorType, params);
|
||||
return ResponseEntity.noContent().build();
|
||||
}
|
||||
|
||||
// ── GET: 전체 시각 설정 조회 ───────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* 모든 지표의 시각 설정(색상·선굵기·수평선)을 반환.
|
||||
* 프론트엔드 앱 시작 시 호출하여 전역 시각 설정을 로드한다.
|
||||
*
|
||||
* GET /indicator-settings/visual
|
||||
*/
|
||||
@GetMapping("/visual")
|
||||
public ResponseEntity<Map<String, Map<String, Object>>> getAllVisual(
|
||||
@RequestHeader(value = "X-User-Id", required = false) String userIdHeader,
|
||||
@RequestHeader(value = "X-Device-Id", required = false) String deviceId) {
|
||||
return ResponseEntity.ok(service.getAllVisual(userId(userIdHeader), deviceId));
|
||||
}
|
||||
|
||||
// ── PATCH: 특정 지표 시각 설정 저장 ───────────────────────────────────────
|
||||
|
||||
/**
|
||||
* 특정 지표의 시각 설정(색상·선굵기·수평선)을 병합 저장.
|
||||
*
|
||||
* PATCH /indicator-settings/RSI/visual
|
||||
* Body: {
|
||||
* "plots": [{"id":"plot0","color":"#ff0000","lineWidth":2,"type":"line"}],
|
||||
* "hlines": [{"price":70,"color":"#EF5350","visible":true}]
|
||||
* }
|
||||
*/
|
||||
@PatchMapping("/{indicatorType}/visual")
|
||||
public ResponseEntity<Void> saveVisualForType(
|
||||
@PathVariable String indicatorType,
|
||||
@RequestHeader(value = "X-User-Id", required = false) String userIdHeader,
|
||||
@RequestHeader(value = "X-Device-Id", required = false) String deviceId,
|
||||
@RequestBody Map<String, Object> visual) {
|
||||
service.saveVisualForType(userId(userIdHeader), deviceId, indicatorType, visual);
|
||||
return ResponseEntity.noContent().build();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user