단순 이관

This commit is contained in:
2026-04-20 20:27:42 +09:00
parent e6c530ff48
commit 83fb215eec
100 changed files with 4209 additions and 1467 deletions

View File

@@ -0,0 +1,66 @@
using Bitget_Server.Domain.Enums;
using Bitget_Server.Infrastructure.Bitget;
using Microsoft.AspNetCore.Mvc;
namespace Bitget_Server.Api.Controllers;
/// <summary>
/// 기존 WinForms 의 BitGetWebSocektStart / closeWebSocket 버튼 REST 화.
/// </summary>
[ApiController]
[Route("api/websocket")]
[Produces("application/json")]
public class WebSocketController : ControllerBase
{
private readonly BitgetWebSocketClient _ws;
private readonly ILogger<WebSocketController> _logger;
public WebSocketController(BitgetWebSocketClient ws, ILogger<WebSocketController> logger)
{
_ws = ws;
_logger = logger;
}
/// <summary>현재 WebSocket 연결 상태.</summary>
[HttpGet("status")]
[ProducesResponseType(typeof(object), StatusCodes.Status200OK)]
public IActionResult GetStatus() => Ok(new { connected = _ws.IsConnected });
/// <summary>
/// WebSocket 연결 시작. subscribeArgs 는 Bitget 공식 포맷의 args 리스트.
/// 예: [{"instType":"USDT-FUTURES","channel":"ticker","instId":"BTCUSDT"}]
/// </summary>
[HttpPost("start")]
[ProducesResponseType(StatusCodes.Status202Accepted)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status500InternalServerError)]
public async Task<IActionResult> Start(
[FromQuery] BitgetWebSocketType type,
[FromBody] IEnumerable<object> subscribeArgs,
CancellationToken ct)
{
try
{
var dic = new Dictionary<string, object>
{
{ "op", "subscribe" },
{ "args", subscribeArgs ?? Array.Empty<object>() }
};
await _ws.StartAsync(type, dic, ct);
return Accepted();
}
catch (Exception ex)
{
_logger.LogError(ex, "WebSocket Start 실패");
return Problem(detail: ex.Message, statusCode: StatusCodes.Status500InternalServerError, title: "WebSocket start failed");
}
}
/// <summary>WebSocket 연결 종료.</summary>
[HttpPost("stop")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
public async Task<IActionResult> Stop(CancellationToken ct)
{
await _ws.StopAsync(ct);
return NoContent();
}
}