AcaMate_Web/Program/Views/Academy/AcademyIntro.razor.cs
SEAN-59 e8b942a633 [] 로거 관리 서비스 추가
1. Console에 바로 나오던 메세지들 개발 환경에 따라 나오게 필터링 하는 서비스 개발
2. script  쪽에도 추가 하여 js 에서도 필터링 되게 구현
2025-06-27 16:01:54 +09:00

120 lines
4.6 KiB
C#

using Front.Program.Models;
using Front.Program.Services;
using Front.Program.ViewModels;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Routing;
namespace Front.Program.Views.Academy;
public partial class AcademyIntro : ComponentBase, IDisposable
{
[Inject] NavigationManager Navigation { get; set; } = default!;
[Inject] StorageService StorageService { get; set; } = default!;
[Inject] QueryParamService QueryParamService { get; set; } = default!;
[Inject] UserStateService UserStateService { get; set; } = default!;
[Inject] LoadingService LoadingService { get; set; } = default!;
private bool _isProcessing = false;
protected override async void OnInitialized()
{
try
{
Navigation.LocationChanged += HandleLocationChanged;
HandleLocationChanged(this, new LocationChangedEventArgs(Navigation.Uri, false));
if (!UserStateService.isFirstCheck)
{
LoadingService.ShowLoading();
await UserStateService.GetUserDataAsync();
var aca = await UserStateService.GetAcademy();
if (aca.success)
{
if (aca.simpleAcademy.Count > 0)
{
UserStateService.academyItems = aca.simpleAcademy.ToArray();
LoggerService.Write($"academyItems: {UserStateService.academyItems.Length}개");
}
LoggerService.Write("아카데미 정보가 없습니다. 로그인 상태를 확인해주세요.");
}
else
{
LoggerService.Write("서버 세션에서 불러오기 실패");
await UserStateService.ClearUserStateAsnyc();
}
LoggerService.Write($"academy: {string.Join(", ", UserStateService.academyItems.Select(a => a.name))}");
}
}
finally
{
LoadingService.HideLoading();
await InvokeAsync(StateHasChanged);
}
// 유저 값 가져오면서 같이 academy 정보도 가져와야지
}
public void Dispose()
{
Navigation.LocationChanged -= HandleLocationChanged;
}
private async void HandleLocationChanged(object? sender, LocationChangedEventArgs e)
{
try
{
// 다중 실행 방지
if (_isProcessing) return;
_isProcessing = true;
var uri = Navigation.ToAbsoluteUri(Navigation.Uri);
LoggerService.Write($"리다이렉트된 URI: {uri}");
// 쿼리 파라미터가 있는 경우에만 처리
if (!string.IsNullOrEmpty(uri.Query))
{
LoadingService.ShowLoading();
var queryParam = QueryParamService.ParseQueryParam(uri);
await QueryParamService.AuthCheck(queryParam, StorageService);
// 유저 정보 확인하는거 (로그인 했으니 값 가져와야지)
await UserStateService.GetUserDataAsync();
var aca = await UserStateService.GetAcademy();
if (aca.success)
{
if (aca.simpleAcademy.Count > 0)
{
UserStateService.academyItems = aca.simpleAcademy.ToArray();
LoggerService.Write($"academyItems: {UserStateService.academyItems.Length}개");
}
LoggerService.Write("아카데미 정보가 없습니다. 로그인 상태를 확인해주세요.");
}
LoggerService.Write($"academy: {string.Join(", ", UserStateService.academyItems.Select(a => a.name))}");
// // 쿼리 파라미터를 제거한 기본 URI로 리다이렉트
var baseUri = uri.GetLeftPart(UriPartial.Path);
LoggerService.Write($"리다이렉트할 URI: {baseUri}");
// await InvokeAsync(StateHasChanged); // StateHasChanged를 호출하여 UI 업데이트
Navigation.NavigateTo(baseUri, forceLoad: false);
}
}
catch (Exception ex)
{
LoggerService.Write($"Error in HandleLocationChanged: {ex.Message}");
}
finally
{
LoadingService.HideLoading();
_isProcessing = false;
}
}
protected void OnClickLogin()
{
Navigation.NavigateTo("/am/auth");
}
}