| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- using Application.Abstractions.Messaging;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.AspNetCore.Mvc.RazorPages;
- namespace Admin.Pages.Channel.YouTubePubSub;
- public class IndexModel(IMediator mediator) : PageModel
- {
- public GetYouTubePubSub.Response Data { get; set; } = new([], 0, 0, string.Empty);
- public GetYouTubeLiveStatus.Response LiveStatus { get; set; } = new([]);
- public GetYouTubeHealth.Response Health { get; set; } = new(
- false, null, false, null, string.Empty, 3,
- 0, 0, 0, 0, []);
- public async Task OnGetAsync(CancellationToken ct)
- {
- Data = await mediator.Send(new GetYouTubePubSub.Query(), ct);
- LiveStatus = await mediator.Send(new GetYouTubeLiveStatus.Query(), ct);
- Health = await mediator.Send(new GetYouTubeHealth.Query(), ct);
- }
- public async Task<IActionResult> OnPostResubscribeAsync(string youtubeChannelID, CancellationToken ct)
- {
- if (string.IsNullOrWhiteSpace(youtubeChannelID))
- {
- TempData["ErrorMessages"] = "YouTube Channel ID가 필요합니다.";
- return RedirectToPage("/Channel/YouTubePubSub/Index");
- }
- try
- {
- await mediator.Send(new ResubscribeYouTubePubSub.Command(youtubeChannelID), ct);
- TempData["SuccessMessage"] = $"{youtubeChannelID} 재구독 요청 완료.";
- }
- catch (Exception e)
- {
- TempData["ErrorMessages"] = e.Message;
- }
- return RedirectToPage("/Channel/YouTubePubSub/Index");
- }
- public async Task<IActionResult> OnPostUnsubscribeAsync(string youtubeChannelID, CancellationToken ct)
- {
- if (string.IsNullOrWhiteSpace(youtubeChannelID))
- {
- TempData["ErrorMessages"] = "YouTube Channel ID가 필요합니다.";
- return RedirectToPage("/Channel/YouTubePubSub/Index");
- }
- try
- {
- await mediator.Send(new UnsubscribeYouTubePubSub.Command(youtubeChannelID), ct);
- TempData["SuccessMessage"] = $"{youtubeChannelID} 구독 해지 요청 완료.";
- }
- catch (Exception e)
- {
- TempData["ErrorMessages"] = e.Message;
- }
- return RedirectToPage("/Channel/YouTubePubSub/Index");
- }
- public async Task<IActionResult> OnPostManualDetectAsync(string videoID, string youtubeChannelID, CancellationToken ct)
- {
- try
- {
- await mediator.Send(new ManualDetectYouTubeLive.Command(videoID, youtubeChannelID), ct);
- TempData["SuccessMessage"] = $"수동 감지 트리거 완료 — videoId={videoID}. 로그에서 라이브 판별 결과를 확인하세요.";
- }
- catch (Exception e)
- {
- TempData["ErrorMessages"] = e.Message;
- }
- return RedirectToPage("/Channel/YouTubePubSub/Index");
- }
- public async Task<IActionResult> OnPostForceLiveAsync(string videoID, string youtubeChannelID, string? title, CancellationToken ct)
- {
- try
- {
- var result = await mediator.Send(new ForceYouTubeLive.Command(youtubeChannelID, videoID, title), ct);
- if (result.IsFailure)
- {
- TempData["ErrorMessages"] = result.Error.Description;
- }
- else
- {
- TempData["SuccessMessage"] = $"라이브 강제 마킹 완료 — videoId={videoID} (quota 0). 사이드바 즉시 갱신.";
- }
- }
- catch (Exception e)
- {
- TempData["ErrorMessages"] = e.Message;
- }
- return RedirectToPage("/Channel/YouTubePubSub/Index");
- }
- public async Task<IActionResult> OnPostForceOfflineAsync(string youtubeChannelID, CancellationToken ct)
- {
- try
- {
- var result = await mediator.Send(new ForceYouTubeOffline.Command(youtubeChannelID), ct);
- if (result.IsFailure)
- {
- TempData["ErrorMessages"] = result.Error.Description;
- }
- else
- {
- TempData["SuccessMessage"] = $"라이브 강제 종료 완료 — channelId={youtubeChannelID} (quota 0).";
- }
- }
- catch (Exception e)
- {
- TempData["ErrorMessages"] = e.Message;
- }
- return RedirectToPage("/Channel/YouTubePubSub/Index");
- }
- public async Task<IActionResult> OnPostTestApiKeyAsync(CancellationToken ct)
- {
- try
- {
- var result = await mediator.Send(new TestYouTubeApiKey.Command(), ct);
- if (result.IsFailure)
- {
- TempData["ErrorMessages"] = result.Error.Description;
- }
- else if (result.Value.Ok)
- {
- TempData["SuccessMessage"] = $"API 키 정상 — 테스트 채널 '{result.Value.TestedChannelName}' 조회 성공 ({result.Value.ElapsedMs}ms).";
- }
- else
- {
- TempData["ErrorMessages"] = $"API 키 테스트 실패 ({result.Value.ElapsedMs}ms): {result.Value.ErrorMessage}";
- }
- }
- catch (Exception e)
- {
- TempData["ErrorMessages"] = e.Message;
- }
- return RedirectToPage("/Channel/YouTubePubSub/Index");
- }
- }
|