AcaMate_Web/Program/Services/UserStateService.cs

150 lines
5.1 KiB
C#

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<Models.SimpleAcademy>();
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<UserData>(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<UserData>("/api/v1/in/user");
}
public async Task<bool> 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>? simpleAcademy)> GetAcademy()
{
return await _APIService.GetConnectServerAsnyc<List<SimpleAcademy>>("/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<JsonElement>(
// "fetchWithHeaderAndReturnUrl",
// args
// );
//
// Console.WriteLine($"JSON 응답: {response.ToString()}");
//
// if (response.TryGetProperty("data", out var dataElement))
// {
// try
// {
// // 전체 데이터 암호화 저장
// var userDataJson = dataElement.ToString();
// var userData = JsonSerializer.Deserialize<UserData>(userDataJson,
// new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
// }
// }
}