/// <summary> /// 创建 <see cref="PointLevel"/> /// </summary> /// <param name="currentUserId">当前登录用户 ID</param> /// <param name="pointIdCode">据点识别码</param> /// <param name="targetPage">要获取的页面</param> /// <param name="dbContext"><see cref="KeylolDbContext"/></param> /// <param name="cachedData"><see cref="CachedDataProvider"/></param> /// <returns></returns> /// <exception cref="ArgumentOutOfRangeException"><paramref name="targetPage"/> 超出范围</exception> public static async Task <PointLevel> CreateAsync(string currentUserId, string pointIdCode, EntrancePage targetPage, KeylolDbContext dbContext, CachedDataProvider cachedData) { var point = await dbContext.Points.Where(p => p.IdCode == pointIdCode).SingleOrDefaultAsync(); if (point == null) { return(new PointLevel()); } var result = new PointLevel { BasicInfo = await Shared.PointBasicInfo.CreateAsync(currentUserId, point, dbContext, cachedData) }; switch (targetPage) { case EntrancePage.Auto: // if (await cachedData.Subscriptions // .IsSubscribedAsync(currentUserId, point.Id, SubscriptionTargetType.Point)) // { // result.Current = EntrancePage.Timeline; // } // else // { // result.Frontpage = await FrontpagePage.CreateAsync(point, currentUserId, dbContext, cachedData); // result.Current = EntrancePage.Frontpage; // } result.Frontpage = await FrontpagePage.CreateAsync(point, currentUserId, dbContext, cachedData); result.Current = EntrancePage.Frontpage; break; case EntrancePage.Frontpage: result.Frontpage = await FrontpagePage.CreateAsync(point, currentUserId, dbContext, cachedData); break; case EntrancePage.Intel: result.Intel = await IntelPage.CreateAsync(point, currentUserId, dbContext, cachedData); break; case EntrancePage.Product: result.Product = await ProductPage.CreateAsync(point, currentUserId, dbContext, cachedData); break; case EntrancePage.Timeline: result.Timeline = await TimelinePage.CreateAsync(point.Id, currentUserId, dbContext, cachedData); break; case EntrancePage.EditInfo: if (await StateTreeHelper.CanAccessAsync <PointLevel>(nameof(Edit))) { result.Edit = new EditLevel { Info = await InfoPage.CreateAsync(point, dbContext) } } ; break; case EntrancePage.EditStyle: if (await StateTreeHelper.CanAccessAsync <PointLevel>(nameof(Edit))) { result.Edit = new EditLevel { Style = StylePage.Create(point) } } ; break; default: throw new ArgumentOutOfRangeException(nameof(targetPage), targetPage, null); } return(result); }