diff --git a/src/dotnet/QuantEngine.Web/Pages/Admin/Collection/Start.cshtml b/src/dotnet/QuantEngine.Web/Pages/Admin/Collection/Start.cshtml new file mode 100644 index 00000000..a61b189c --- /dev/null +++ b/src/dotnet/QuantEngine.Web/Pages/Admin/Collection/Start.cshtml @@ -0,0 +1,30 @@ +@page +@model QuantEngine.Web.Pages.Admin.Collection.StartModel +@{ + ViewData["Title"] = "수집 시작"; +} + + + +
+
+ @if (!string.IsNullOrWhiteSpace(Model.ErrorMessage)) + { +
@Model.ErrorMessage
+ 목록으로 + } + else + { +
수집 작업이 등록되었습니다. 실행 ID: @Model.RunId
+ 실행 상세 보기 + 목록으로 + } +
+
diff --git a/src/dotnet/QuantEngine.Web/Pages/Admin/Collection/Start.cshtml.cs b/src/dotnet/QuantEngine.Web/Pages/Admin/Collection/Start.cshtml.cs new file mode 100644 index 00000000..52b0e099 --- /dev/null +++ b/src/dotnet/QuantEngine.Web/Pages/Admin/Collection/Start.cshtml.cs @@ -0,0 +1,48 @@ +using Hangfire; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc.RazorPages; +using QuantEngine.Application.Interfaces; +using QuantEngine.Web.Services; + +namespace QuantEngine.Web.Pages.Admin.Collection; + +[Authorize(AuthenticationSchemes = AdminAuthDefaults.Scheme)] +public class StartModel : PageModel +{ + private readonly IBackgroundJobClient _jobClient; + private readonly IConfiguration _configuration; + private readonly ILogger _logger; + + public string? RunId { get; private set; } + public string? ErrorMessage { get; private set; } + + public StartModel( + IBackgroundJobClient jobClient, + IConfiguration configuration, + ILogger logger) + { + _jobClient = jobClient; + _configuration = configuration; + _logger = logger; + } + + public void OnGet() + { + try + { + RunId = $"admin-{DateTime.Now:yyyyMMdd-HHmmss}"; + var accountMode = _configuration["Kis:AccountMode"] ?? "mock"; + var tickers = new[] { "005930", "000660", "051910", "005380", "010140", "005490" }.ToList(); + + _jobClient.Enqueue(orchestrator => + orchestrator.RunCollectionAsync(RunId!, accountMode, tickers)); + + _logger.LogInformation("Collection run {RunId} enqueued from admin page", RunId); + } + catch (Exception ex) + { + _logger.LogError(ex, "Failed to enqueue collection run from admin page"); + ErrorMessage = "수집 작업을 등록하지 못했습니다. Hangfire 상태와 서버 로그를 확인하세요."; + } + } +}