/// <summary> /// 创建 <see cref="EditPage"/> /// </summary> /// <param name="user">用户对象</param> /// <param name="currentUserId">当前登录用户 ID</param> /// <param name="dbContext"><see cref="KeylolDbContext"/></param> /// <param name="userManager"><see cref="KeylolUserManager"/></param> /// <returns><see cref="EditPage"/></returns> public static async Task <EditPage> CreateAsync(KeylolUser user, string currentUserId, KeylolDbContext dbContext, KeylolUserManager userManager) { if (currentUserId != user.Id && !await userManager.IsInRoleAsync(currentUserId, KeylolRoles.Operator)) { return(new EditPage()); } var editPage = new EditPage { Email = user.Email, LockoutEnabled = user.LockoutEnabled, OpenInNewWindow = user.OpenInNewWindow, UseEnglishPointName = user.PreferredPointName == PreferredPointName.English, NotifyOnArticleReplied = user.NotifyOnArticleReplied, NotifyOnCommentReplied = user.NotifyOnCommentReplied, NotifyOnActivityReplied = user.NotifyOnActivityReplied, NotifyOnArticleLiked = user.NotifyOnArticleLiked, NotifyOnCommentLiked = user.NotifyOnCommentLiked, NotifyOnActivityLiked = user.NotifyOnActivityLiked, NotifyOnSubscribed = user.NotifyOnSubscribed, SteamNotifyOnArticleReplied = user.SteamNotifyOnArticleReplied, SteamNotifyOnCommentReplied = user.SteamNotifyOnCommentReplied, SteamNotifyOnActivityReplied = user.SteamNotifyOnActivityReplied, SteamNotifyOnArticleLiked = user.SteamNotifyOnArticleLiked, SteamNotifyOnCommentLiked = user.SteamNotifyOnCommentLiked, SteamNotifyOnActivityLiked = user.SteamNotifyOnActivityLiked, SteamNotifyOnSubscribed = user.SteamNotifyOnSubscribed, SteamNotifyOnSpotlighted = user.SteamNotifyOnSpotlighted, SteamNotifyOnMissive = user.SteamNotifyOnMissive }; if (user.SteamBotId == null) { editPage.SteamBotLost = true; editPage.SteamBotSteamId = (await SteamBindingHub.GetNextBotAsync(dbContext)).SteamId; } else { editPage.SteamBotName = $"其乐机器人 Keylol.com #{user.SteamBot.Sid}"; editPage.SteamBotSteamId = user.SteamBot.SteamId; } return(editPage); }
/// <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); }