Portfolio.Web 1.0.0.0
.NET, Blazor, WPF와 서비스 운영 경험을 프로젝트·이력·기술 스택 단위로 보여주는 개발자 포트폴리오입니다.
로딩중...
검색중...
일치하는것 없음
PortfolioApp.ViewModels.PortfolioAdminViewModel 클래스 참조

더 자세히 ...

PortfolioApp.ViewModels.PortfolioAdminViewModel에 대한 협력 다이어그램:

Public 멤버 함수

 PortfolioAdminViewModel (IPortfolioTenantStore tenants, IProjectStore projects, IResumeStore resumes, IContactStore contacts, IMediaService media, PortfolioUserContext userContext)
async Task InitializeAsync (string slug)
async Task< bool > LoginAsync (string slug)
async Task LoadAsync (string slug)
void Logout ()
void NewProject ()
void EditProject (ProjectItem p)
void CancelEdit ()
async Task SaveProjectAsync (string slug)
async Task DeleteProjectAsync (string slug, string projectId)
async Task DeleteProjectMediaAsync (string slug, string projectId, string fileName)
async Task DeleteProjectCoverAsync (string slug, string projectId)
async Task DeleteProjectVideoAsync (string slug, string projectId, string fileName)
string GetMediaUrl (string slug, string projectId, string fileName)
string GetImageUrl (string slug, string projectId, string fileName)
string GetVideoUrl (string slug, string projectId, string fileName)
string GetProfileImageUrl (string slug, string fileName)
async Task SaveResumeAsync (string slug)
void AddSkillGroup ()
void RemoveSkillGroup (SkillGroup g)
void NewExperience ()
void EditExperience (ExperienceItem e)
void CancelExp ()
void SaveExperience ()
void RemoveExperience (ExperienceItem e)
void NewEducation ()
void EditEducation (EducationItem e)
void CancelEdu ()
void SaveEducation ()
void RemoveEducation (EducationItem e)
async Task SaveConfigAsync ()
async Task RemoveAdminAsync (string userId)
async Task< bool > ChangePasswordAsync (string slug, string current, string next, string confirm)
async Task UploadProfileImageAsync (string slug, IBrowserFile file)
async Task MarkReadAsync (string slug, string msgId)
async Task DeleteMessageAsync (string slug, string msgId)
async Task DeleteSelfAsync (string slug)

속성

bool IsAuthenticated [get, private set]
bool IsLoaded [get, private set]
bool IsSignedIn [get, private set]
bool IsLinkedToCurrentUser [get, private set]
bool IsOwner [get, private set]
IReadOnlyList< PortfolioAdminUserEffectiveAdminUsers = [] [get, private set]
string CurrentUserLabel = "" [get, private set]
string LoginPassword = "" [get, set]
string StatusMessage = "" [get, set]
bool IsUploading [get, set]
PortfolioConfigConfig [get, private set]
List< ProjectItemProjects = [] [get, private set]
ResumeInfo Resume = new() [get, private set]
List< ContactMessageMessages = [] [get, private set]
ProjectItemEditingProject [get, private set]
List< IBrowserFile > PendingFiles = [] [get]
List< IBrowserFile > PendingVideos = [] [get]
string NewSkillCategory = "" [get, set]
string NewSkillNames = "" [get, set]
ExperienceItemEditingExp [get, private set]
EducationItemEditingEdu [get, private set]

Private 멤버 함수

async Task RefreshCurrentUserAsync ()

정적 Private 멤버 함수

static bool IsExternalUrl (string url)
static List< PortfolioAdminUserGetAdminUsers (PortfolioConfig config)
static bool IsOwnerUser (PortfolioConfig config, PortfolioCurrentUser user)
static bool IsAdminUser (PortfolioConfig config, PortfolioCurrentUser user)
static void EnsureAdminUser (PortfolioConfig config, PortfolioCurrentUser user, string role)
static IReadOnlyList< PortfolioAdminUserBuildEffectiveAdminUsers (PortfolioConfig config)

Private 속성

readonly IPortfolioTenantStore _tenants
readonly IProjectStore _projects
readonly IResumeStore _resumes
readonly IContactStore _contacts
readonly IMediaService _media
readonly PortfolioUserContext _userContext

상세한 설명

Portfolio Admin View Model 기능과 관련 상태를 캡슐화합니다.

PortfolioAdminViewModel.cs 파일의 17 번째 라인에서 정의되었습니다.

생성자 & 소멸자 문서화

◆ PortfolioAdminViewModel()

PortfolioApp.ViewModels.PortfolioAdminViewModel.PortfolioAdminViewModel ( IPortfolioTenantStore tenants,
IProjectStore projects,
IResumeStore resumes,
IContactStore contacts,
IMediaService media,
PortfolioUserContext userContext )
inline

지정한 설정으로 PortfolioAdminViewModel 클래스의 새 인스턴스를 초기화합니다.

매개변수
tenantstenants에 사용할 IPortfolioTenantStore 값입니다.
projectsprojects에 사용할 IProjectStore 값입니다.
resumesresumes에 사용할 IResumeStore 값입니다.
contactscontacts에 사용할 IContactStore 값입니다.
mediamedia에 사용할 IMediaService 값입니다.
userContextuser Context에 사용할 PortfolioUserContext 값입니다.

PortfolioAdminViewModel.cs 파일의 327 번째 라인에서 정의되었습니다.

334 {
335 _tenants = tenants;
336 _projects = projects;
337 _resumes = resumes;
338 _contacts = contacts;
339 _media = media;
340 _userContext = userContext;
341 }

다음을 참조함 : _contacts, _media, _projects, _resumes, _tenants, _userContext.

멤버 함수 문서화

◆ AddSkillGroup()

void PortfolioApp.ViewModels.PortfolioAdminViewModel.AddSkillGroup ( )
inline

Skill Group 항목을 추가합니다.

PortfolioAdminViewModel.cs 파일의 1040 번째 라인에서 정의되었습니다.

1041 {
1042 if (string.IsNullOrWhiteSpace(NewSkillCategory)) return;
1043 var skills = NewSkillNames.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries).ToList();
1044 Resume.SkillGroups.Add(new SkillGroup { Category = NewSkillCategory.Trim(), Skills = skills });
1045 NewSkillCategory = "";
1046 NewSkillNames = "";
1047 }

다음을 참조함 : NewSkillCategory, NewSkillNames, Resume.

◆ BuildEffectiveAdminUsers()

IReadOnlyList< PortfolioAdminUser > PortfolioApp.ViewModels.PortfolioAdminViewModel.BuildEffectiveAdminUsers ( PortfolioConfig config)
inlinestaticprivate

Effective Admin Users 값을 구성합니다.

매개변수
configconfig에 사용할 PortfolioConfig 값입니다.
반환값
Build Effective Admin Users 작업에서 생성한 IReadOnlyList<PortfolioAdminUser> 결과입니다.

PortfolioAdminViewModel.cs 파일의 1705 번째 라인에서 정의되었습니다.

1706 {
1707 var users = GetAdminUsers(config);
1708 if (!string.IsNullOrWhiteSpace(config.OwnerUserId) &&
1709 users.All(x => !string.Equals(x.UserId, config.OwnerUserId, StringComparison.Ordinal)))
1710 {
1711 users.Insert(0, new PortfolioAdminUser
1712 {
1713 UserId = config.OwnerUserId,
1714 Provider = config.OwnerProvider,
1715 Email = config.OwnerEmail,
1716 DisplayName = config.OwnerDisplayName,
1717 Role = "Owner",
1718 AddedAt = config.OwnerLinkedAt ?? config.CreatedAt
1719 });
1720 }
1721
1722 foreach (var user in users.Where(x => string.Equals(x.UserId, config.OwnerUserId, StringComparison.Ordinal)))
1723 {
1724 user.Role = "Owner";
1725 }
1726
1727 return users
1728 .OrderByDescending(x => string.Equals(x.Role, "Owner", StringComparison.OrdinalIgnoreCase))
1729 .ThenBy(x => x.AddedAt)
1730 .ToList();
1731 }

다음을 참조함 : GetAdminUsers(), PortfolioApp.Models.PortfolioConfig.OwnerDisplayName, PortfolioApp.Models.PortfolioConfig.OwnerEmail, PortfolioApp.Models.PortfolioConfig.OwnerProvider, PortfolioApp.Models.PortfolioConfig.OwnerUserId.

다음에 의해서 참조됨 : InitializeAsync(), LoadAsync(), LoginAsync(), RemoveAdminAsync(), SaveConfigAsync().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ CancelEdit()

void PortfolioApp.ViewModels.PortfolioAdminViewModel.CancelEdit ( )
inline

Cancel Edit 조건을 확인합니다.

PortfolioAdminViewModel.cs 파일의 561 번째 라인에서 정의되었습니다.

561{ EditingProject = null; PendingFiles.Clear(); PendingVideos.Clear(); }

다음을 참조함 : EditingProject, PendingFiles, PendingVideos.

◆ CancelEdu()

void PortfolioApp.ViewModels.PortfolioAdminViewModel.CancelEdu ( )
inline

Cancel Edu 조건을 확인합니다.

PortfolioAdminViewModel.cs 파일의 1169 번째 라인에서 정의되었습니다.

1169=> EditingEdu = null;

다음을 참조함 : EditingEdu.

◆ CancelExp()

void PortfolioApp.ViewModels.PortfolioAdminViewModel.CancelExp ( )
inline

Cancel Exp 조건을 확인합니다.

PortfolioAdminViewModel.cs 파일의 1101 번째 라인에서 정의되었습니다.

1101=> EditingExp = null;

다음을 참조함 : EditingExp.

◆ ChangePasswordAsync()

async Task< bool > PortfolioApp.ViewModels.PortfolioAdminViewModel.ChangePasswordAsync ( string slug,
string current,
string next,
string confirm )
inline

Change Password Async 작업을 수행합니다.

매개변수
slugslug에 사용할 string 값입니다.
currentcurrent에 사용할 string 값입니다.
nextnext에 사용할 string 값입니다.
confirmconfirm에 사용할 string 값입니다.
반환값
Change Password Async 작업에서 생성한 Task<bool> 결과입니다.

PortfolioAdminViewModel.cs 파일의 1329 번째 라인에서 정의되었습니다.

1330 {
1331 if (Config == null) { StatusMessage = "❌ 설정을 먼저 불러오세요."; return false; }
1332 if (!DreaminePasswordHasher.VerifyPassword(current, Config.PasswordHash)) { StatusMessage = "❌ 현재 비밀번호가 틀렸습니다."; return false; }
1333 if (next.Length < 8) { StatusMessage = "❌ 새 비밀번호는 8자 이상이어야 합니다."; return false; }
1334 if (next != confirm) { StatusMessage = "❌ 새 비밀번호가 일치하지 않습니다."; return false; }
1335 Config.PasswordHash = DreaminePasswordHasher.HashPassword(next);
1336 await _tenants.SaveAsync(Config);
1337 StatusMessage = "✅ 비밀번호가 변경되었습니다.";
1338 return true;
1339 }

다음을 참조함 : _tenants, Config, StatusMessage.

◆ DeleteMessageAsync()

async Task PortfolioApp.ViewModels.PortfolioAdminViewModel.DeleteMessageAsync ( string slug,
string msgId )
inline

Delete Message Async 작업을 수행합니다.

매개변수
slugslug에 사용할 string 값입니다.
msgIdmsg Id에 사용할 string 값입니다.
반환값
Delete Message Async 작업에서 생성한 Task 결과입니다.

PortfolioAdminViewModel.cs 파일의 1453 번째 라인에서 정의되었습니다.

1454 {
1455 await _contacts.DeleteAsync(slug, msgId);
1456 Messages = await _contacts.GetAllAsync(slug);
1457 StatusMessage = "✅ 메시지 삭제 완료.";
1458 }

다음을 참조함 : _contacts, Messages, StatusMessage.

◆ DeleteProjectAsync()

async Task PortfolioApp.ViewModels.PortfolioAdminViewModel.DeleteProjectAsync ( string slug,
string projectId )
inline

Delete Project Async 작업을 수행합니다.

매개변수
slugslug에 사용할 string 값입니다.
projectIdproject Id에 사용할 string 값입니다.
반환값
Delete Project Async 작업에서 생성한 Task 결과입니다.

PortfolioAdminViewModel.cs 파일의 668 번째 라인에서 정의되었습니다.

669 {
670 await _projects.DeleteAsync(slug, projectId);
671 Projects = await _projects.GetAllAsync(slug);
672 StatusMessage = "✅ 삭제 완료.";
673 }

다음을 참조함 : _projects, Projects, StatusMessage.

◆ DeleteProjectCoverAsync()

async Task PortfolioApp.ViewModels.PortfolioAdminViewModel.DeleteProjectCoverAsync ( string slug,
string projectId )
inline

Delete Project Cover Async 작업을 수행합니다.

매개변수
slugslug에 사용할 string 값입니다.
projectIdproject Id에 사용할 string 값입니다.
반환값
Delete Project Cover Async 작업에서 생성한 Task 결과입니다.

PortfolioAdminViewModel.cs 파일의 754 번째 라인에서 정의되었습니다.

755 {
756 if (EditingProject == null || string.IsNullOrWhiteSpace(EditingProject.ImageFileName)) return;
757 var fn = EditingProject.ImageFileName;
758 if (!fn.StartsWith('/'))
759 await _media.DeleteAsync(slug, projectId, fn);
760 EditingProject.ImageFileName = null;
761 }

다음을 참조함 : _media, EditingProject.

◆ DeleteProjectMediaAsync()

async Task PortfolioApp.ViewModels.PortfolioAdminViewModel.DeleteProjectMediaAsync ( string slug,
string projectId,
string fileName )
inline

Delete Project Media Async 작업을 수행합니다.

매개변수
slugslug에 사용할 string 값입니다.
projectIdproject Id에 사용할 string 값입니다.
fileNamefile Name에 사용할 string 값입니다.
반환값
Delete Project Media Async 작업에서 생성한 Task 결과입니다.

PortfolioAdminViewModel.cs 파일의 715 번째 라인에서 정의되었습니다.

716 {
717 await _media.DeleteAsync(slug, projectId, fileName);
718 if (EditingProject != null)
719 EditingProject.WorkImages = EditingProject.WorkImages.Where(f => f != fileName).ToArray();
720 }

다음을 참조함 : _media, EditingProject.

◆ DeleteProjectVideoAsync()

async Task PortfolioApp.ViewModels.PortfolioAdminViewModel.DeleteProjectVideoAsync ( string slug,
string projectId,
string fileName )
inline

Delete Project Video Async 작업을 수행합니다.

매개변수
slugslug에 사용할 string 값입니다.
projectIdproject Id에 사용할 string 값입니다.
fileNamefile Name에 사용할 string 값입니다.
반환값
Delete Project Video Async 작업에서 생성한 Task 결과입니다.

PortfolioAdminViewModel.cs 파일의 803 번째 라인에서 정의되었습니다.

804 {
805 await _media.DeleteAsync(slug, projectId, fileName);
806 if (EditingProject != null)
807 EditingProject.VideoFileNames = EditingProject.VideoFileNames.Where(f => f != fileName).ToArray();
808 }

다음을 참조함 : _media, EditingProject.

◆ DeleteSelfAsync()

async Task PortfolioApp.ViewModels.PortfolioAdminViewModel.DeleteSelfAsync ( string slug)
inline

Delete Self Async 작업을 수행합니다.

매개변수
slugslug에 사용할 string 값입니다.
반환값
Delete Self Async 작업에서 생성한 Task 결과입니다.

PortfolioAdminViewModel.cs 파일의 1485 번째 라인에서 정의되었습니다.

1486 {
1487 await _tenants.DeleteAsync(slug);
1488 IsAuthenticated = false;
1489 }

다음을 참조함 : _tenants, IsAuthenticated.

◆ EditEducation()

void PortfolioApp.ViewModels.PortfolioAdminViewModel.EditEducation ( EducationItem e)
inline

Edit Education 작업을 수행합니다.

매개변수
e이벤트와 관련된 데이터를 포함합니다.

PortfolioAdminViewModel.cs 파일의 1160 번째 라인에서 정의되었습니다.

1160=> EditingEdu = e;

다음을 참조함 : EditingEdu.

◆ EditExperience()

void PortfolioApp.ViewModels.PortfolioAdminViewModel.EditExperience ( ExperienceItem e)
inline

Edit Experience 작업을 수행합니다.

매개변수
e이벤트와 관련된 데이터를 포함합니다.

PortfolioAdminViewModel.cs 파일의 1092 번째 라인에서 정의되었습니다.

1092=> EditingExp = e;

다음을 참조함 : EditingExp.

◆ EditProject()

void PortfolioApp.ViewModels.PortfolioAdminViewModel.EditProject ( ProjectItem p)
inline

Edit Project 작업을 수행합니다.

매개변수
pp에 사용할 ProjectItem 값입니다.

PortfolioAdminViewModel.cs 파일의 552 번째 라인에서 정의되었습니다.

552{ EditingProject = p.ShallowClone(); PendingFiles.Clear(); PendingVideos.Clear(); }

다음을 참조함 : EditingProject, PendingFiles, PendingVideos.

◆ EnsureAdminUser()

void PortfolioApp.ViewModels.PortfolioAdminViewModel.EnsureAdminUser ( PortfolioConfig config,
PortfolioCurrentUser user,
string role )
inlinestaticprivate

Ensure Admin User 작업을 수행합니다.

매개변수
configconfig에 사용할 PortfolioConfig 값입니다.
useruser에 사용할 PortfolioCurrentUser 값입니다.
rolerole에 사용할 string 값입니다.

PortfolioAdminViewModel.cs 파일의 1652 번째 라인에서 정의되었습니다.

1653 {
1654 if (!user.IsAuthenticated) return;
1655
1656 var users = GetAdminUsers(config);
1657 var existing = users.FirstOrDefault(x => string.Equals(x.UserId, user.Id, StringComparison.Ordinal));
1658 if (existing is null)
1659 {
1660 users.Add(new PortfolioAdminUser
1661 {
1662 UserId = user.Id,
1663 Provider = user.Provider,
1664 Email = user.Email,
1665 DisplayName = user.DisplayName,
1666 Role = role,
1667 AddedAt = DateTime.Now
1668 });
1669 return;
1670 }
1671
1672 existing.Provider = user.Provider;
1673 existing.Email = user.Email;
1674 existing.DisplayName = user.DisplayName;
1675 if (role == "Owner")
1676 {
1677 existing.Role = "Owner";
1678 }
1679 }

다음을 참조함 : GetAdminUsers(), PortfolioApp.Services.PortfolioCurrentUser().

다음에 의해서 참조됨 : LoginAsync().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetAdminUsers()

List< PortfolioAdminUser > PortfolioApp.ViewModels.PortfolioAdminViewModel.GetAdminUsers ( PortfolioConfig config)
inlinestaticprivate

Admin Users 값을 가져옵니다.

매개변수
configconfig에 사용할 PortfolioConfig 값입니다.
반환값
Get Admin Users 작업에서 생성한 List<PortfolioAdminUser> 결과입니다.

PortfolioAdminViewModel.cs 파일의 1542 번째 라인에서 정의되었습니다.

1542=> config.AdminUsers ??= [];

다음에 의해서 참조됨 : BuildEffectiveAdminUsers(), EnsureAdminUser(), IsAdminUser(), RemoveAdminAsync().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetImageUrl()

string PortfolioApp.ViewModels.PortfolioAdminViewModel.GetImageUrl ( string slug,
string projectId,
string fileName )
inline

Image Url 값을 가져옵니다.

매개변수
slugslug에 사용할 string 값입니다.
projectIdproject Id에 사용할 string 값입니다.
fileNamefile Name에 사용할 string 값입니다.
반환값
Get Image Url 작업에서 생성한 string 결과입니다.

PortfolioAdminViewModel.cs 파일의 893 번째 라인에서 정의되었습니다.

893 =>
894 IsExternalUrl(fileName) ? fileName : _media.GetMediaUrl(slug, projectId, fileName);

다음을 참조함 : _media.

◆ GetMediaUrl()

string PortfolioApp.ViewModels.PortfolioAdminViewModel.GetMediaUrl ( string slug,
string projectId,
string fileName )
inline

Media Url 값을 가져옵니다.

매개변수
slugslug에 사용할 string 값입니다.
projectIdproject Id에 사용할 string 값입니다.
fileNamefile Name에 사용할 string 값입니다.
반환값
Get Media Url 작업에서 생성한 string 결과입니다.

PortfolioAdminViewModel.cs 파일의 850 번째 라인에서 정의되었습니다.

850 =>
851 _media.GetMediaUrl(slug, projectId, fileName);

다음을 참조함 : _media.

◆ GetProfileImageUrl()

string PortfolioApp.ViewModels.PortfolioAdminViewModel.GetProfileImageUrl ( string slug,
string fileName )
inline

Profile Image Url 값을 가져옵니다.

매개변수
slugslug에 사용할 string 값입니다.
fileNamefile Name에 사용할 string 값입니다.
반환값
Get Profile Image Url 작업에서 생성한 string 결과입니다.

PortfolioAdminViewModel.cs 파일의 998 번째 라인에서 정의되었습니다.

998 =>
999 _media.GetProfileImageUrl(slug, fileName);

다음을 참조함 : _media.

◆ GetVideoUrl()

string PortfolioApp.ViewModels.PortfolioAdminViewModel.GetVideoUrl ( string slug,
string projectId,
string fileName )
inline

Video Url 값을 가져옵니다.

매개변수
slugslug에 사용할 string 값입니다.
projectIdproject Id에 사용할 string 값입니다.
fileNamefile Name에 사용할 string 값입니다.
반환값
Get Video Url 작업에서 생성한 string 결과입니다.

PortfolioAdminViewModel.cs 파일의 936 번째 라인에서 정의되었습니다.

936 =>
937 IsExternalUrl(fileName) ? fileName : _media.GetMediaUrl(slug, projectId, fileName);

다음을 참조함 : _media.

◆ InitializeAsync()

async Task PortfolioApp.ViewModels.PortfolioAdminViewModel.InitializeAsync ( string slug)
inline

Initialize Async 작업을 수행합니다.

매개변수
slugslug에 사용할 string 값입니다.
반환값
Initialize Async 작업에서 생성한 Task 결과입니다.

PortfolioAdminViewModel.cs 파일의 367 번째 라인에서 정의되었습니다.

368 {
369 StatusMessage = "";
370 await RefreshCurrentUserAsync().ConfigureAwait(false);
371
372 var cfg = await _tenants.GetAsync(slug).ConfigureAwait(false);
373 if (cfg is null)
374 {
375 return;
376 }
377
378 var user = await _userContext.GetCurrentAsync().ConfigureAwait(false);
379 IsOwner = IsOwnerUser(cfg, user);
380 IsLinkedToCurrentUser = IsAdminUser(cfg, user);
381 EffectiveAdminUsers = BuildEffectiveAdminUsers(cfg);
382
383 if (IsLinkedToCurrentUser)
384 {
385 IsAuthenticated = true;
386 await LoadAsync(slug).ConfigureAwait(false);
387 }
388 }

다음을 참조함 : _tenants, _userContext, BuildEffectiveAdminUsers(), EffectiveAdminUsers, IsAdminUser(), IsAuthenticated, IsLinkedToCurrentUser, IsOwner, IsOwnerUser(), LoadAsync(), RefreshCurrentUserAsync(), StatusMessage.

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ IsAdminUser()

bool PortfolioApp.ViewModels.PortfolioAdminViewModel.IsAdminUser ( PortfolioConfig config,
PortfolioCurrentUser user )
inlinestaticprivate

Is Admin User 조건을 확인합니다.

매개변수
configconfig에 사용할 PortfolioConfig 값입니다.
useruser에 사용할 PortfolioCurrentUser 값입니다.
반환값
Is Admin User 조건이 충족되면 true이고, 그렇지 않으면 false입니다.

PortfolioAdminViewModel.cs 파일의 1613 번째 라인에서 정의되었습니다.

1614 {
1615 if (!user.IsAuthenticated) return false;
1616 if (IsOwnerUser(config, user)) return true;
1617 return GetAdminUsers(config).Any(x => string.Equals(x.UserId, user.Id, StringComparison.Ordinal));
1618 }

다음을 참조함 : GetAdminUsers(), IsOwnerUser(), PortfolioApp.Services.PortfolioCurrentUser().

다음에 의해서 참조됨 : InitializeAsync(), LoginAsync().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ IsExternalUrl()

bool PortfolioApp.ViewModels.PortfolioAdminViewModel.IsExternalUrl ( string url)
inlinestaticprivate

Is External Url 조건을 확인합니다.

매개변수
urlurl에 사용할 string 값입니다.
반환값
Is External Url 조건이 충족되면 true이고, 그렇지 않으면 false입니다.

PortfolioAdminViewModel.cs 파일의 963 번째 라인에서 정의되었습니다.

963 =>
964 url.StartsWith('/') || url.StartsWith("http://") || url.StartsWith("https://");

◆ IsOwnerUser()

bool PortfolioApp.ViewModels.PortfolioAdminViewModel.IsOwnerUser ( PortfolioConfig config,
PortfolioCurrentUser user )
inlinestaticprivate

Is Owner User 조건을 확인합니다.

매개변수
configconfig에 사용할 PortfolioConfig 값입니다.
useruser에 사용할 PortfolioCurrentUser 값입니다.
반환값
Is Owner User 조건이 충족되면 true이고, 그렇지 않으면 false입니다.

PortfolioAdminViewModel.cs 파일의 1576 번째 라인에서 정의되었습니다.

1576 =>
1577 user.IsAuthenticated &&
1578 !string.IsNullOrWhiteSpace(config.OwnerUserId) &&
1579 string.Equals(config.OwnerUserId, user.Id, StringComparison.Ordinal);

다음을 참조함 : PortfolioApp.Services.PortfolioCurrentUser().

다음에 의해서 참조됨 : InitializeAsync(), IsAdminUser(), LoginAsync(), RemoveAdminAsync().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ LoadAsync()

async Task PortfolioApp.ViewModels.PortfolioAdminViewModel.LoadAsync ( string slug)
inline

Async 데이터를 불러옵니다.

매개변수
slugslug에 사용할 string 값입니다.
반환값
Load Async 작업에서 생성한 Task 결과입니다.

PortfolioAdminViewModel.cs 파일의 501 번째 라인에서 정의되었습니다.

502 {
503 Config = await _tenants.GetAsync(slug);
504 if (Config == null) return;
505 EffectiveAdminUsers = BuildEffectiveAdminUsers(Config);
506 Projects = await _projects.GetAllAsync(slug);
507 Resume = await _resumes.GetAsync(slug);
508 Messages = await _contacts.GetAllAsync(slug);
509 // 기존 데이터 마이그레이션: ImageFileName → WorkImages
510 foreach (var p in Projects.Where(p =>
511 !string.IsNullOrWhiteSpace(p.ImageFileName) && p.WorkImages.Length == 0))
512 p.WorkImages = [p.ImageFileName!];
513 IsLoaded = true;
514 }

다음을 참조함 : _contacts, _projects, _resumes, _tenants, BuildEffectiveAdminUsers(), Config, EffectiveAdminUsers, IsLoaded, Messages, Projects, Resume.

다음에 의해서 참조됨 : InitializeAsync().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ LoginAsync()

async Task< bool > PortfolioApp.ViewModels.PortfolioAdminViewModel.LoginAsync ( string slug)
inline

Login Async 작업을 수행합니다.

매개변수
slugslug에 사용할 string 값입니다.
반환값
Login Async 작업에서 생성한 Task<bool> 결과입니다.

PortfolioAdminViewModel.cs 파일의 414 번째 라인에서 정의되었습니다.

415 {
416 var cfg = await _tenants.GetAsync(slug);
417 if (cfg == null) { StatusMessage = "❌ 존재하지 않는 포트폴리오입니다."; return false; }
418
419 var user = await _userContext.GetCurrentAsync().ConfigureAwait(false);
420 await RefreshCurrentUserAsync().ConfigureAwait(false);
421
422 if (IsAdminUser(cfg, user))
423 {
424 IsAuthenticated = true;
425 IsLinkedToCurrentUser = true;
426 IsOwner = IsOwnerUser(cfg, user);
427 EffectiveAdminUsers = BuildEffectiveAdminUsers(cfg);
428 StatusMessage = "";
429 return true;
430 }
431
432 var verification = DreaminePasswordHasher.VerifyPassword(LoginPassword, cfg.PasswordHash, out var upgradedHash);
433 if (verification is PasswordHashVerificationResult.Failed) { StatusMessage = "❌ 비밀번호가 틀렸습니다."; return false; }
434 IsAuthenticated = true;
435
436 if (verification is PasswordHashVerificationResult.SuccessRehashNeeded && upgradedHash is not null)
437 {
438 cfg.PasswordHash = upgradedHash;
439 await _tenants.SaveAsync(cfg).ConfigureAwait(false);
440 }
441
442 if (user.IsAuthenticated && string.IsNullOrWhiteSpace(cfg.OwnerUserId))
443 {
444 cfg.OwnerUserId = user.Id;
445 cfg.OwnerProvider = user.Provider;
446 cfg.OwnerEmail = user.Email;
447 cfg.OwnerDisplayName = user.DisplayName;
448 cfg.OwnerLinkedAt = DateTime.Now;
449 EnsureAdminUser(cfg, user, "Owner");
450 await _tenants.SaveAsync(cfg).ConfigureAwait(false);
451 IsLinkedToCurrentUser = true;
452 IsOwner = true;
453 EffectiveAdminUsers = BuildEffectiveAdminUsers(cfg);
454 StatusMessage = "✅ CodeMaru/Dreamine 계정에 대표 관리자로 연결되었습니다.";
455 }
456 else if (user.IsAuthenticated)
457 {
458 EnsureAdminUser(cfg, user, "Admin");
459 await _tenants.SaveAsync(cfg).ConfigureAwait(false);
460 IsLinkedToCurrentUser = true;
461 IsOwner = IsOwnerUser(cfg, user);
462 EffectiveAdminUsers = BuildEffectiveAdminUsers(cfg);
463 StatusMessage = "✅ 현재 CodeMaru/Dreamine 계정이 이 포트폴리오의 관리자로 추가되었습니다.";
464 }
465 else if (string.IsNullOrWhiteSpace(cfg.OwnerUserId))
466 {
467 StatusMessage = "✅ 로그인 성공. 공용 계정에 연결하려면 먼저 CodeMaru/Dreamine 로그인을 해주세요.";
468 }
469 else
470 {
471 StatusMessage = "";
472 }
473
474 return true;
475 }

다음을 참조함 : _tenants, _userContext, BuildEffectiveAdminUsers(), EffectiveAdminUsers, EnsureAdminUser(), IsAdminUser(), IsAuthenticated, IsLinkedToCurrentUser, IsOwner, IsOwnerUser(), LoginPassword, RefreshCurrentUserAsync(), StatusMessage.

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ Logout()

void PortfolioApp.ViewModels.PortfolioAdminViewModel.Logout ( )
inline

Logout 작업을 수행합니다.

PortfolioAdminViewModel.cs 파일의 525 번째 라인에서 정의되었습니다.

525{ IsAuthenticated = false; IsLoaded = false; LoginPassword = ""; StatusMessage = ""; EditingProject = null; }

다음을 참조함 : EditingProject, IsAuthenticated, IsLoaded, LoginPassword, StatusMessage.

◆ MarkReadAsync()

async Task PortfolioApp.ViewModels.PortfolioAdminViewModel.MarkReadAsync ( string slug,
string msgId )
inline

Mark Read Async 작업을 수행합니다.

매개변수
slugslug에 사용할 string 값입니다.
msgIdmsg Id에 사용할 string 값입니다.
반환값
Mark Read Async 작업에서 생성한 Task 결과입니다.

PortfolioAdminViewModel.cs 파일의 1415 번째 라인에서 정의되었습니다.

1416 {
1417 await _contacts.MarkReadAsync(slug, msgId);
1418 Messages = await _contacts.GetAllAsync(slug);
1419 }

다음을 참조함 : _contacts, Messages.

◆ NewEducation()

void PortfolioApp.ViewModels.PortfolioAdminViewModel.NewEducation ( )
inline

New Education 작업을 수행합니다.

PortfolioAdminViewModel.cs 파일의 1143 번째 라인에서 정의되었습니다.

1143=> EditingEdu = new EducationItem();

다음을 참조함 : EditingEdu.

◆ NewExperience()

void PortfolioApp.ViewModels.PortfolioAdminViewModel.NewExperience ( )
inline

New Experience 작업을 수행합니다.

PortfolioAdminViewModel.cs 파일의 1075 번째 라인에서 정의되었습니다.

1075=> EditingExp = new ExperienceItem();

다음을 참조함 : EditingExp.

◆ NewProject()

void PortfolioApp.ViewModels.PortfolioAdminViewModel.NewProject ( )
inline

New Project 작업을 수행합니다.

PortfolioAdminViewModel.cs 파일의 535 번째 라인에서 정의되었습니다.

535=> EditingProject = new ProjectItem();

다음을 참조함 : EditingProject.

◆ RefreshCurrentUserAsync()

async Task PortfolioApp.ViewModels.PortfolioAdminViewModel.RefreshCurrentUserAsync ( )
inlineprivate

Refresh Current User Async 작업을 수행합니다.

반환값
Refresh Current User Async 작업에서 생성한 Task 결과입니다.

PortfolioAdminViewModel.cs 파일의 1507 번째 라인에서 정의되었습니다.

1508 {
1509 var user = await _userContext.GetCurrentAsync().ConfigureAwait(false);
1510 IsSignedIn = user.IsAuthenticated;
1511 CurrentUserLabel = user.IsAuthenticated
1512 ? string.IsNullOrWhiteSpace(user.DisplayName)
1513 ? user.Provider
1514 : $"{user.DisplayName} ({user.Provider})"
1515 : "";
1516 }

다음을 참조함 : _userContext, CurrentUserLabel, IsSignedIn.

다음에 의해서 참조됨 : InitializeAsync(), LoginAsync().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ RemoveAdminAsync()

async Task PortfolioApp.ViewModels.PortfolioAdminViewModel.RemoveAdminAsync ( string userId)
inline

Admin Async 항목을 제거합니다.

매개변수
userIduser Id에 사용할 string 값입니다.
반환값
Remove Admin Async 작업에서 생성한 Task 결과입니다.

PortfolioAdminViewModel.cs 파일의 1253 번째 라인에서 정의되었습니다.

1254 {
1255 if (Config is null) return;
1256 var user = await _userContext.GetCurrentAsync().ConfigureAwait(false);
1257 if (!IsOwnerUser(Config, user))
1258 {
1259 StatusMessage = "❌ 대표 관리자만 관리자 계정을 삭제할 수 있습니다.";
1260 return;
1261 }
1262
1263 if (string.Equals(Config.OwnerUserId, userId, StringComparison.Ordinal))
1264 {
1265 StatusMessage = "❌ 대표 관리자는 삭제할 수 없습니다.";
1266 return;
1267 }
1268
1269 var removed = GetAdminUsers(Config).RemoveAll(x => string.Equals(x.UserId, userId, StringComparison.Ordinal));
1270 if (removed == 0)
1271 {
1272 StatusMessage = "❌ 삭제할 관리자를 찾을 수 없습니다.";
1273 return;
1274 }
1275
1276 await _tenants.SaveAsync(Config).ConfigureAwait(false);
1277 EffectiveAdminUsers = BuildEffectiveAdminUsers(Config);
1278 StatusMessage = "✅ 관리자 계정이 삭제되었습니다.";
1279 }

다음을 참조함 : _tenants, _userContext, BuildEffectiveAdminUsers(), Config, EffectiveAdminUsers, GetAdminUsers(), IsOwnerUser(), StatusMessage.

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ RemoveEducation()

void PortfolioApp.ViewModels.PortfolioAdminViewModel.RemoveEducation ( EducationItem e)
inline

Education 항목을 제거합니다.

매개변수
e이벤트와 관련된 데이터를 포함합니다.

PortfolioAdminViewModel.cs 파일의 1201 번째 라인에서 정의되었습니다.

1201=> Resume.Educations.Remove(e);

다음을 참조함 : Resume.

◆ RemoveExperience()

void PortfolioApp.ViewModels.PortfolioAdminViewModel.RemoveExperience ( ExperienceItem e)
inline

Experience 항목을 제거합니다.

매개변수
e이벤트와 관련된 데이터를 포함합니다.

PortfolioAdminViewModel.cs 파일의 1133 번째 라인에서 정의되었습니다.

1133=> Resume.Experiences.Remove(e);

다음을 참조함 : Resume.

◆ RemoveSkillGroup()

void PortfolioApp.ViewModels.PortfolioAdminViewModel.RemoveSkillGroup ( SkillGroup g)
inline

Skill Group 항목을 제거합니다.

매개변수
gg에 사용할 SkillGroup 값입니다.

PortfolioAdminViewModel.cs 파일의 1065 번째 라인에서 정의되었습니다.

1065=> Resume.SkillGroups.Remove(g);

다음을 참조함 : Resume.

◆ SaveConfigAsync()

async Task PortfolioApp.ViewModels.PortfolioAdminViewModel.SaveConfigAsync ( )
inline

Config Async 데이터를 저장합니다.

반환값
Save Config Async 작업에서 생성한 Task 결과입니다.

PortfolioAdminViewModel.cs 파일의 1220 번째 라인에서 정의되었습니다.

1221 {
1222 if (Config == null) return;
1223 Config.PasswordHash = DreaminePasswordHasher.HashPlainTextForStorage(Config.PasswordHash);
1224 await _tenants.SaveAsync(Config);
1225 EffectiveAdminUsers = BuildEffectiveAdminUsers(Config);
1226 StatusMessage = "✅ 설정이 저장되었습니다.";
1227 }

다음을 참조함 : _tenants, BuildEffectiveAdminUsers(), Config, EffectiveAdminUsers, StatusMessage.

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ SaveEducation()

void PortfolioApp.ViewModels.PortfolioAdminViewModel.SaveEducation ( )
inline

Education 데이터를 저장합니다.

PortfolioAdminViewModel.cs 파일의 1178 번째 라인에서 정의되었습니다.

1179 {
1180 if (EditingEdu == null) return;
1181 if (!Resume.Educations.Contains(EditingEdu))
1182 Resume.Educations.Add(EditingEdu);
1183 EditingEdu = null;
1184 }

다음을 참조함 : EditingEdu, Resume.

◆ SaveExperience()

void PortfolioApp.ViewModels.PortfolioAdminViewModel.SaveExperience ( )
inline

Experience 데이터를 저장합니다.

PortfolioAdminViewModel.cs 파일의 1110 번째 라인에서 정의되었습니다.

1111 {
1112 if (EditingExp == null) return;
1113 if (!Resume.Experiences.Contains(EditingExp))
1114 Resume.Experiences.Add(EditingExp);
1115 EditingExp = null;
1116 }

다음을 참조함 : EditingExp, Resume.

◆ SaveProjectAsync()

async Task PortfolioApp.ViewModels.PortfolioAdminViewModel.SaveProjectAsync ( string slug)
inline

Project Async 데이터를 저장합니다.

매개변수
slugslug에 사용할 string 값입니다.
반환값
Save Project Async 작업에서 생성한 Task 결과입니다.

PortfolioAdminViewModel.cs 파일의 587 번째 라인에서 정의되었습니다.

588 {
589 if (EditingProject == null) return;
590 StatusMessage = "";
591 if (string.IsNullOrWhiteSpace(EditingProject.Title)) { StatusMessage = "❌ 제목을 입력하세요."; return; }
592
593 if (PendingFiles.Count > 0 || PendingVideos.Count > 0)
594 {
595 IsUploading = true;
596 foreach (var f in PendingFiles)
597 {
598 var saved = await _media.SaveAsync(slug, EditingProject.Id, f);
599 if (EditingProject.Category == ProjectCategory.Work)
600 {
601 if (!EditingProject.WorkImages.Contains(saved))
602 EditingProject.WorkImages = [.. EditingProject.WorkImages, saved];
603 if (EditingProject.ImageFileName == null)
604 EditingProject.ImageFileName = saved;
605 }
606 else
607 {
608 // Personal / Public: WorkImages에 모아두고 첫 번째를 커버로
609 if (!EditingProject.WorkImages.Contains(saved))
610 EditingProject.WorkImages = [.. EditingProject.WorkImages, saved];
611 EditingProject.ImageFileName ??= saved;
612 }
613 }
614 foreach (var v in PendingVideos)
615 {
616 var saved = await _media.SaveVideoAsync(slug, EditingProject.Id, v);
617 if (!EditingProject.VideoFileNames.Contains(saved))
618 EditingProject.VideoFileNames = [.. EditingProject.VideoFileNames, saved];
619 }
620 PendingFiles.Clear();
621 PendingVideos.Clear();
622 IsUploading = false;
623 }
624
625 // ImageFileName이 있지만 WorkImages가 비어있으면 자동 포함
626 if (!string.IsNullOrWhiteSpace(EditingProject.ImageFileName) &&
627 !EditingProject.WorkImages.Contains(EditingProject.ImageFileName))
628 EditingProject.WorkImages = [EditingProject.ImageFileName, .. EditingProject.WorkImages];
629
630 await _projects.SaveAsync(slug, EditingProject);
631 Projects = await _projects.GetAllAsync(slug);
632 EditingProject = null;
633 StatusMessage = "✅ 저장되었습니다.";
634 }

다음을 참조함 : _media, _projects, EditingProject, IsUploading, PendingFiles, PendingVideos, Projects, StatusMessage.

◆ SaveResumeAsync()

async Task PortfolioApp.ViewModels.PortfolioAdminViewModel.SaveResumeAsync ( string slug)
inline

Resume Async 데이터를 저장합니다.

매개변수
slugslug에 사용할 string 값입니다.
반환값
Save Resume Async 작업에서 생성한 Task 결과입니다.

PortfolioAdminViewModel.cs 파일의 1026 번째 라인에서 정의되었습니다.

1027 {
1028 await _resumes.SaveAsync(slug, Resume);
1029 StatusMessage = "✅ Resume 저장 완료.";
1030 }

다음을 참조함 : _resumes, Resume, StatusMessage.

◆ UploadProfileImageAsync()

async Task PortfolioApp.ViewModels.PortfolioAdminViewModel.UploadProfileImageAsync ( string slug,
IBrowserFile file )
inline

Upload Profile Image Async 작업을 수행합니다.

매개변수
slugslug에 사용할 string 값입니다.
filefile에 사용할 IBrowserFile 값입니다.
반환값
Upload Profile Image Async 작업에서 생성한 Task 결과입니다.

PortfolioAdminViewModel.cs 파일의 1373 번째 라인에서 정의되었습니다.

1374 {
1375 if (Config == null) return;
1376 IsUploading = true;
1377 var saved = await _media.SaveProfileImageAsync(slug, file);
1378 Config.ProfileImageFileName = saved;
1379 IsUploading = false;
1380 }

다음을 참조함 : _media, Config, IsUploading.

멤버 데이터 문서화

◆ _contacts

readonly IContactStore PortfolioApp.ViewModels.PortfolioAdminViewModel._contacts
private

contacts 값을 보관합니다.

PortfolioAdminViewModel.cs 파일의 54 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : DeleteMessageAsync(), LoadAsync(), MarkReadAsync(), PortfolioAdminViewModel().

◆ _media

readonly IMediaService PortfolioApp.ViewModels.PortfolioAdminViewModel._media
private

◆ _projects

readonly IProjectStore PortfolioApp.ViewModels.PortfolioAdminViewModel._projects
private

projects 값을 보관합니다.

PortfolioAdminViewModel.cs 파일의 36 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : DeleteProjectAsync(), LoadAsync(), PortfolioAdminViewModel(), SaveProjectAsync().

◆ _resumes

readonly IResumeStore PortfolioApp.ViewModels.PortfolioAdminViewModel._resumes
private

resumes 값을 보관합니다.

PortfolioAdminViewModel.cs 파일의 45 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : LoadAsync(), PortfolioAdminViewModel(), SaveResumeAsync().

◆ _tenants

readonly IPortfolioTenantStore PortfolioApp.ViewModels.PortfolioAdminViewModel._tenants
private

tenants 값을 보관합니다.

PortfolioAdminViewModel.cs 파일의 27 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : ChangePasswordAsync(), DeleteSelfAsync(), InitializeAsync(), LoadAsync(), LoginAsync(), PortfolioAdminViewModel(), RemoveAdminAsync(), SaveConfigAsync().

◆ _userContext

readonly PortfolioUserContext PortfolioApp.ViewModels.PortfolioAdminViewModel._userContext
private

user Context 값을 보관합니다.

PortfolioAdminViewModel.cs 파일의 72 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : InitializeAsync(), LoginAsync(), PortfolioAdminViewModel(), RefreshCurrentUserAsync(), RemoveAdminAsync().

속성 문서화

◆ Config

PortfolioConfig? PortfolioApp.ViewModels.PortfolioAdminViewModel.Config
getprivate set

Config 값을 가져오거나 설정합니다.

PortfolioAdminViewModel.cs 파일의 173 번째 라인에서 정의되었습니다.

173{ get; private set; }

다음에 의해서 참조됨 : ChangePasswordAsync(), LoadAsync(), RemoveAdminAsync(), SaveConfigAsync(), UploadProfileImageAsync().

◆ CurrentUserLabel

string PortfolioApp.ViewModels.PortfolioAdminViewModel.CurrentUserLabel = ""
getprivate set

Current User Label 값을 가져오거나 설정합니다.

PortfolioAdminViewModel.cs 파일의 136 번째 라인에서 정의되었습니다.

136{ get; private set; } = "";

다음에 의해서 참조됨 : RefreshCurrentUserAsync().

◆ EditingEdu

EducationItem? PortfolioApp.ViewModels.PortfolioAdminViewModel.EditingEdu
getprivate set

Editing Edu 값을 가져오거나 설정합니다.

PortfolioAdminViewModel.cs 파일의 269 번째 라인에서 정의되었습니다.

269{ get; private set; }

다음에 의해서 참조됨 : CancelEdu(), EditEducation(), NewEducation(), SaveEducation().

◆ EditingExp

ExperienceItem? PortfolioApp.ViewModels.PortfolioAdminViewModel.EditingExp
getprivate set

Editing Exp 값을 가져오거나 설정합니다.

PortfolioAdminViewModel.cs 파일의 260 번째 라인에서 정의되었습니다.

260{ get; private set; }

다음에 의해서 참조됨 : CancelExp(), EditExperience(), NewExperience(), SaveExperience().

◆ EditingProject

ProjectItem? PortfolioApp.ViewModels.PortfolioAdminViewModel.EditingProject
getprivate set

Editing Project 값을 가져오거나 설정합니다.

PortfolioAdminViewModel.cs 파일의 211 번째 라인에서 정의되었습니다.

211{ get; private set; }

다음에 의해서 참조됨 : CancelEdit(), DeleteProjectCoverAsync(), DeleteProjectMediaAsync(), DeleteProjectVideoAsync(), EditProject(), Logout(), NewProject(), SaveProjectAsync().

◆ EffectiveAdminUsers

IReadOnlyList<PortfolioAdminUser> PortfolioApp.ViewModels.PortfolioAdminViewModel.EffectiveAdminUsers = []
getprivate set

Effective Admin Users 값을 가져오거나 설정합니다.

PortfolioAdminViewModel.cs 파일의 127 번째 라인에서 정의되었습니다.

127{ get; private set; } = [];

다음에 의해서 참조됨 : InitializeAsync(), LoadAsync(), LoginAsync(), RemoveAdminAsync(), SaveConfigAsync().

◆ IsAuthenticated

bool PortfolioApp.ViewModels.PortfolioAdminViewModel.IsAuthenticated
getprivate set

Is Authenticated 값을 가져오거나 설정합니다.

PortfolioAdminViewModel.cs 파일의 82 번째 라인에서 정의되었습니다.

82{ get; private set; }

다음에 의해서 참조됨 : DeleteSelfAsync(), InitializeAsync(), LoginAsync(), Logout().

◆ IsLinkedToCurrentUser

bool PortfolioApp.ViewModels.PortfolioAdminViewModel.IsLinkedToCurrentUser
getprivate set

Is Linked To Current User 값을 가져오거나 설정합니다.

PortfolioAdminViewModel.cs 파일의 109 번째 라인에서 정의되었습니다.

109{ get; private set; }

다음에 의해서 참조됨 : InitializeAsync(), LoginAsync().

◆ IsLoaded

bool PortfolioApp.ViewModels.PortfolioAdminViewModel.IsLoaded
getprivate set

Is Loaded 값을 가져오거나 설정합니다.

PortfolioAdminViewModel.cs 파일의 91 번째 라인에서 정의되었습니다.

91{ get; private set; }

다음에 의해서 참조됨 : LoadAsync(), Logout().

◆ IsOwner

bool PortfolioApp.ViewModels.PortfolioAdminViewModel.IsOwner
getprivate set

Is Owner 값을 가져오거나 설정합니다.

PortfolioAdminViewModel.cs 파일의 118 번째 라인에서 정의되었습니다.

118{ get; private set; }

다음에 의해서 참조됨 : InitializeAsync(), LoginAsync().

◆ IsSignedIn

bool PortfolioApp.ViewModels.PortfolioAdminViewModel.IsSignedIn
getprivate set

Is Signed In 값을 가져오거나 설정합니다.

PortfolioAdminViewModel.cs 파일의 100 번째 라인에서 정의되었습니다.

100{ get; private set; }

다음에 의해서 참조됨 : RefreshCurrentUserAsync().

◆ IsUploading

bool PortfolioApp.ViewModels.PortfolioAdminViewModel.IsUploading
getset

Is Uploading 값을 가져오거나 설정합니다.

PortfolioAdminViewModel.cs 파일의 163 번째 라인에서 정의되었습니다.

163{ get; set; }

다음에 의해서 참조됨 : SaveProjectAsync(), UploadProfileImageAsync().

◆ LoginPassword

string PortfolioApp.ViewModels.PortfolioAdminViewModel.LoginPassword = ""
getset

Login Password 값을 가져오거나 설정합니다.

PortfolioAdminViewModel.cs 파일의 145 번째 라인에서 정의되었습니다.

145{ get; set; } = "";

다음에 의해서 참조됨 : LoginAsync(), Logout().

◆ Messages

List<ContactMessage> PortfolioApp.ViewModels.PortfolioAdminViewModel.Messages = []
getprivate set

Messages 값을 가져오거나 설정합니다.

PortfolioAdminViewModel.cs 파일의 200 번째 라인에서 정의되었습니다.

200{ get; private set; } = [];

다음에 의해서 참조됨 : DeleteMessageAsync(), LoadAsync(), MarkReadAsync().

◆ NewSkillCategory

string PortfolioApp.ViewModels.PortfolioAdminViewModel.NewSkillCategory = ""
getset

New Skill Category 값을 가져오거나 설정합니다.

PortfolioAdminViewModel.cs 파일의 240 번째 라인에서 정의되었습니다.

240{ get; set; } = "";

다음에 의해서 참조됨 : AddSkillGroup().

◆ NewSkillNames

string PortfolioApp.ViewModels.PortfolioAdminViewModel.NewSkillNames = ""
getset

New Skill Names 값을 가져오거나 설정합니다.

PortfolioAdminViewModel.cs 파일의 249 번째 라인에서 정의되었습니다.

249{ get; set; } = "";

다음에 의해서 참조됨 : AddSkillGroup().

◆ PendingFiles

List<IBrowserFile> PortfolioApp.ViewModels.PortfolioAdminViewModel.PendingFiles = []
get

Pending Files 값을 가져옵니다.

PortfolioAdminViewModel.cs 파일의 220 번째 라인에서 정의되었습니다.

220{ get; } = [];

다음에 의해서 참조됨 : CancelEdit(), EditProject(), SaveProjectAsync().

◆ PendingVideos

List<IBrowserFile> PortfolioApp.ViewModels.PortfolioAdminViewModel.PendingVideos = []
get

Pending Videos 값을 가져옵니다.

PortfolioAdminViewModel.cs 파일의 229 번째 라인에서 정의되었습니다.

229{ get; } = [];

다음에 의해서 참조됨 : CancelEdit(), EditProject(), SaveProjectAsync().

◆ Projects

List<ProjectItem> PortfolioApp.ViewModels.PortfolioAdminViewModel.Projects = []
getprivate set

Projects 값을 가져오거나 설정합니다.

PortfolioAdminViewModel.cs 파일의 182 번째 라인에서 정의되었습니다.

182{ get; private set; } = [];

다음에 의해서 참조됨 : DeleteProjectAsync(), LoadAsync(), SaveProjectAsync().

◆ Resume

ResumeInfo PortfolioApp.ViewModels.PortfolioAdminViewModel.Resume = new()
getprivate set

Resume 값을 가져오거나 설정합니다.

PortfolioAdminViewModel.cs 파일의 191 번째 라인에서 정의되었습니다.

191{ get; private set; } = new();

다음에 의해서 참조됨 : AddSkillGroup(), LoadAsync(), RemoveEducation(), RemoveExperience(), RemoveSkillGroup(), SaveEducation(), SaveExperience(), SaveResumeAsync().

◆ StatusMessage

string PortfolioApp.ViewModels.PortfolioAdminViewModel.StatusMessage = ""
getset

Status Message 값을 가져오거나 설정합니다.

PortfolioAdminViewModel.cs 파일의 154 번째 라인에서 정의되었습니다.

154{ get; set; } = "";

다음에 의해서 참조됨 : ChangePasswordAsync(), DeleteMessageAsync(), DeleteProjectAsync(), InitializeAsync(), LoginAsync(), Logout(), RemoveAdminAsync(), SaveConfigAsync(), SaveProjectAsync(), SaveResumeAsync().


이 클래스에 대한 문서화 페이지는 다음의 파일로부터 생성되었습니다.: