모의투자 로직 변경

This commit is contained in:
Macbook
2026-05-31 14:05:46 +09:00
parent ead97dad5d
commit d6eedf19bb
33 changed files with 1456 additions and 330 deletions
@@ -7,18 +7,8 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* 매매 시그널 이력 REST API.
*
* <pre>
* GET /api/trade-signals → 전체 이력
* GET /api/trade-signals?market= → 종목별 이력
* DELETE /api/trade-signals/{id} → 단건 삭제
* DELETE /api/trade-signals → 전체 삭제
* POST /api/trade-signals/delete-batch → ID 목록 삭제
* </pre>
*/
@RestController
@RequestMapping("/trade-signals")
@RequiredArgsConstructor
@@ -29,44 +19,36 @@ public class TradeSignalController {
@GetMapping
public ResponseEntity<List<TradeSignalDto>> list(
@RequestParam(required = false) String market,
@RequestHeader(value = "X-User-Id", required = false) String userIdHeader,
@RequestHeader(value = "X-Device-Id", required = false) String deviceId) {
Long userId = parseUserId(userIdHeader);
@RequestHeader Map<String, String> headers) {
long uid = TradingControllerSupport.requireRegisteredUser(headers);
List<TradeSignalDto> result = (market != null && !market.isBlank())
? service.listByMarket(userId, deviceId, market)
: service.list(userId, deviceId);
? service.listByMarket(uid, null, market)
: service.list(uid, null);
return ResponseEntity.ok(result);
}
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteOne(
@PathVariable Long id,
@RequestHeader(value = "X-User-Id", required = false) String userIdHeader,
@RequestHeader(value = "X-Device-Id", required = false) String deviceId) {
service.deleteOne(id, parseUserId(userIdHeader), deviceId);
@RequestHeader Map<String, String> headers) {
long uid = TradingControllerSupport.requireRegisteredUser(headers);
service.deleteOne(id, uid, null);
return ResponseEntity.noContent().build();
}
@DeleteMapping
public ResponseEntity<java.util.Map<String, Integer>> deleteAll(
@RequestHeader(value = "X-User-Id", required = false) String userIdHeader,
@RequestHeader(value = "X-Device-Id", required = false) String deviceId) {
int deleted = service.deleteAll(parseUserId(userIdHeader), deviceId);
return ResponseEntity.ok(java.util.Map.of("deleted", deleted));
public ResponseEntity<Map<String, Integer>> deleteAll(@RequestHeader Map<String, String> headers) {
long uid = TradingControllerSupport.requireRegisteredUser(headers);
int deleted = service.deleteAll(uid, null);
return ResponseEntity.ok(Map.of("deleted", deleted));
}
@PostMapping("/delete-batch")
public ResponseEntity<java.util.Map<String, Integer>> deleteBatch(
@RequestBody java.util.List<Long> ids,
@RequestHeader(value = "X-User-Id", required = false) String userIdHeader,
@RequestHeader(value = "X-Device-Id", required = false) String deviceId) {
int deleted = service.deleteBatch(ids, parseUserId(userIdHeader), deviceId);
return ResponseEntity.ok(java.util.Map.of("deleted", deleted));
}
private Long parseUserId(String h) {
if (h == null || h.isBlank()) return null;
try { return Long.parseLong(h); } catch (NumberFormatException e) { return null; }
public ResponseEntity<Map<String, Integer>> deleteBatch(
@RequestBody List<Long> ids,
@RequestHeader Map<String, String> headers) {
long uid = TradingControllerSupport.requireRegisteredUser(headers);
int deleted = service.deleteBatch(ids, uid, null);
return ResponseEntity.ok(Map.of("deleted", deleted));
}
}