/// <summary> /// 获取指定用户的档案页 /// </summary> /// <param name="userIdCode">用户识别码</param> /// <param name="dbContext"><see cref="KeylolDbContext"/></param> /// <param name="cachedData"><see cref="CachedDataProvider"/></param> /// <param name="userManager"><see cref="KeylolUserManager"/></param> /// <returns><see cref="DossierPage"/></returns> public static async Task <DossierPage> Get(string userIdCode, [Injected] KeylolDbContext dbContext, [Injected] CachedDataProvider cachedData, [Injected] KeylolUserManager userManager) { var user = await userManager.FindByIdCodeAsync(userIdCode); if (user == null) { return(new DossierPage()); } return(await CreateAsync(user, StateTreeHelper.GetCurrentUserId(), dbContext, cachedData, userManager)); }
/// <summary> /// 创建 <see cref="UserLevel"/> /// </summary> /// <param name="currentUserId">当前登录用户 ID</param> /// <param name="userIdCode">用户识别码</param> /// <param name="targetPage">要获取的页面</param> /// <param name="dbContext"><see cref="KeylolDbContext"/></param> /// <param name="cachedData"><see cref="CachedDataProvider"/></param> /// <param name="userManager"><see cref="KeylolUserManager"/></param> /// <returns><see cref="UserLevel"/></returns> public static async Task <UserLevel> CreateAsync(string currentUserId, string userIdCode, EntrancePage targetPage, KeylolDbContext dbContext, CachedDataProvider cachedData, KeylolUserManager userManager) { var user = await userManager.FindByIdCodeAsync(userIdCode); if (user == null) { return(new UserLevel()); } var result = new UserLevel { BasicInfo = await UserBasicInfo.CreateAsync(currentUserId, user, dbContext, cachedData, userManager) }; switch (targetPage) { case EntrancePage.Auto: // if (await cachedData.Subscriptions // .IsSubscribedAsync(currentUserId, user.Id, SubscriptionTargetType.User)) // { // result.Current = EntrancePage.Timeline; // } // else // { // result.Dossier = // await DossierPage.CreateAsync(user, currentUserId, dbContext, cachedData, userManager); // result.Current = EntrancePage.Dossier; // } result.Dossier = await DossierPage.CreateAsync(user, currentUserId, dbContext, cachedData, userManager); result.Current = EntrancePage.Dossier; break; case EntrancePage.Dossier: result.Dossier = await DossierPage.CreateAsync(user, currentUserId, dbContext, cachedData, userManager); break; case EntrancePage.People: result.People = await PeoplePage.CreateAsync(user.Id, currentUserId, dbContext, cachedData); break; case EntrancePage.Timeline: result.Timeline = await TimelinePage.CreateAsync(user.Id, currentUserId, dbContext, cachedData); break; case EntrancePage.Edit: if (await StateTreeHelper.CanAccessAsync <UserLevel>(nameof(Edit))) { result.Edit = await EditPage.CreateAsync(user, currentUserId, dbContext, userManager); } break; default: throw new ArgumentOutOfRangeException(nameof(targetPage), targetPage, null); } return(result); }