using System.Text.Json; using Front.Program.Services; using Front.Program.Models; using Microsoft.JSInterop; namespace Front.Program.ViewModels; public class UserStateService(StorageService _storageService,SecureService _secureService, APIService _APIService, IJSRuntime _js) { public UserData UserData { get; set; } = new UserData(); public bool isFirstCheck { get; set; } = false; public bool isLogin { get; set; } = false; public Models.SimpleAcademy[] academyItems = Array.Empty(); public async Task<(bool success, UserData? userData)> GetUserDataFromStorageAsync() { try { var encUserData = await _storageService.GetItemAsync("USER_DATA"); if (!string.IsNullOrEmpty(encUserData)) { var decUserData = await _secureService.DecryptAsync(encUserData); var userData = JsonSerializer.Deserialize(decUserData, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); Console.WriteLine($"UserData: {userData.Name}, {userData.Type}"); return (true, userData); } else { return (false, null); } } catch (Exception ex) { Console.WriteLine($"Error [GetUserDataFormAsync] : {ex.Message}"); return (false, null); } } public async Task<(bool success, UserData? userData)> GetUserDataFromServerAsync() { return await _APIService.GetConnectServerAsnyc("/api/v1/in/user"); } public async Task GetUserDataAsync() { try { Console.WriteLine("GetUserDataAsync 호출됨"); // 로그인 상태가 아니라면 애초에 할 필요 없음 if (await _storageService.GetItemAsync("IsLogin") != "true") { isLogin = false; return false; } var userDataForm = await GetUserDataFromStorageAsync(); if (userDataForm.success && userDataForm.userData != null) { // 사용자 데이터가 성공적으로 로드되었을 때의 로직 UserData = userDataForm.userData; isLogin = true; return true; } else { var userDataFromServer = await GetUserDataFromServerAsync(); if (userDataFromServer.success && userDataFromServer.userData != null) { // 서버에서 사용자 데이터를 성공적으로 로드했을 때의 로직 UserData = userDataFromServer.userData; isLogin = true; return true; } else { // 사용자 데이터를 로드하지 못했을 때의 로직 Console.WriteLine("사용자 데이터를 로드하지 못했습니다."); isLogin = false; return false; } } } finally { if (!isFirstCheck) isFirstCheck = true; } } public async Task ClearUserData() { try { await _storageService.RemoveItemAsync("USER_DATA"); await _storageService.RemoveItemAsync("IsLogin"); Console.WriteLine("사용자 데이터 삭제 성공"); isLogin = false; // return true; } catch (Exception ex) { Console.WriteLine($"사용자 데이터 삭제 중 오류: {ex.Message}"); // return false; } } public async Task<(bool success, List? simpleAcademy)> GetAcademy() { return await _APIService.GetConnectServerAsnyc>("/api/v1/in/user/academy"); } // // var headerValue = await _storageService.GetItemAsync("Web-AM-Connect-Key"); // if (string.IsNullOrEmpty(headerValue)) return (false, null); // // var args = new { // url = "/api/v1/in/user/academy", // method = "GET", // headerKey = "Web-AM-Connect-Key", // headerValue = headerValue, // token = "VO00" // }; // // var response = await _js.InvokeAsync( // "fetchWithHeaderAndReturnUrl", // args // ); // // Console.WriteLine($"JSON 응답: {response.ToString()}"); // // if (response.TryGetProperty("data", out var dataElement)) // { // try // { // // 전체 데이터 암호화 저장 // var userDataJson = dataElement.ToString(); // var userData = JsonSerializer.Deserialize(userDataJson, // new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); // } // } }