public OrganizationDataQueryParameters( int activeOrganizationId, OrganizationDataQueryBreadth breadth, DataAccessLevel dataAccessLevel) { ActiveOrganizationId = activeOrganizationId; Breadth = breadth; DataAccessLevel = dataAccessLevel ?? throw new ArgumentNullException(nameof(dataAccessLevel)); }
/// <summary> /// 获取用户空间首页需要显示的数据 /// </summary> /// <param name="visitorID">访问者ID</param> /// <param name="spaceOwnerID">空间所有者ID</param> /// <returns></returns> public SpaceData GetSpaceDataForVisit(int visitorID, int spaceOwnerID) { if (ValidateUserID(visitorID) == false || ValidateUserID(spaceOwnerID) == false) { return(null); } DataAccessLevel dataAccessLevel = GetDataAccessLevel(visitorID, spaceOwnerID); return(SpaceDao.Instance.GetSpaceDataForVisit(spaceOwnerID, dataAccessLevel)); }
public override DoingCollection GetUserDoingsWithComments(int doingOwnerID, DataAccessLevel dataAccessLevel, int pageNumber, int pageSize, ref int?totalCount) { DoingCollection doings = null; using (SqlSession db = new SqlSession()) { using (SqlQuery query = db.CreateQuery()) { query.Pager.TableName = "[bx_Doings]"; query.Pager.SortField = "[DoingID]"; query.Pager.SelectCount = true; query.Pager.PageNumber = pageNumber; query.Pager.PageSize = pageSize; query.Pager.TotalRecords = totalCount; query.Pager.Condition = "[UserID]=@UserID"; query.CreateParameter <int>("@UserID", doingOwnerID, SqlDbType.Int); //if (dataAccessLevel == DataAccessLevel.Normal) //{ // query.Pager.Condition += " AND [PrivacyType] IN (0, 3)"; //} //else if (dataAccessLevel == DataAccessLevel.Friend) //{ // query.Pager.Condition += " AND [PrivacyType] IN (0, 1, 3)"; //} using (XSqlDataReader reader = query.ExecuteReader()) { doings = new DoingCollection(reader); if (totalCount == null && reader.NextResult() && reader.Read()) { totalCount = reader.Get <int>(0); } doings.TotalRecords = totalCount.GetValueOrDefault(); } } FillDoingComments(doings, db); } return(doings); }
/// <summary> /// 获取用户的记录包含当前页的记录的评论(通过记录的CommentList属性访问) /// </summary> /// <param name="visitorID">访问者ID</param> /// <param name="doingOwnerID">数据所有者ID</param> /// <param name="pageNumber">数据分页每页条数</param> /// <param name="pageSize">数据分页当前页码</param> /// <returns></returns> public DoingCollection GetUserDoingsWithComments(int visitorID, int doingOwnerID, int pageNumber, int pageSize) { pageNumber = pageNumber <= 0 ? 1 : pageNumber; pageSize = pageSize <= 0 ? Consts.DefaultPageSize : pageSize; if (ValidateUserID(visitorID) == false || ValidateUserID(doingOwnerID) == false) { return(null); } DoingCollection doings = null; DataAccessLevel dataAccessLevel = GetDataAccessLevel(visitorID, doingOwnerID); #region 获取TotalCount缓存 int?totalCount = null; string totalCountCacheKey = GetCacheKeyForUserDoingsTotalCount(doingOwnerID, dataAccessLevel); bool totalCountCached = CacheUtil.TryGetValue(totalCountCacheKey, out totalCount); #endregion doings = DoingDao.Instance.GetUserDoingsWithComments(doingOwnerID, dataAccessLevel, pageNumber, pageSize, ref totalCount); #region 设置TotalCount缓存 if (totalCountCached == false) { CacheUtil.Set(totalCountCacheKey, totalCount); } #endregion ProcessKeyword(doings, ProcessKeywordMode.TryUpdateKeyword); return(doings); }
public override AlbumCollection GetUserAlbums(int userID, DataAccessLevel dataAccessLevel, int pageNumber, int pageSize, ref int? totalCount) { using (SqlQuery query = new SqlQuery()) { query.Pager.TableName = "[bx_Albums]"; query.Pager.SortField = "[UpdateDate]"; query.Pager.PrimaryKey = "AlbumID"; query.Pager.IsDesc = true; query.Pager.PageNumber = pageNumber; query.Pager.PageSize = pageSize; query.Pager.TotalRecords = totalCount; query.Pager.SelectCount = true; query.Pager.Condition = "[UserID] = @UserID"; query.CreateParameter<int>("@UserID", userID, SqlDbType.Int); if (dataAccessLevel == DataAccessLevel.Normal) { query.Pager.Condition += " AND [PrivacyType] IN (0, 3)"; } else if (dataAccessLevel == DataAccessLevel.Friend) { query.Pager.Condition += " AND [PrivacyType] IN (0, 1, 3)"; } using (XSqlDataReader reader = query.ExecuteReader()) { AlbumCollection albums = new AlbumCollection(reader); if (totalCount == null && reader.NextResult() && reader.Read()) { totalCount = reader.Get<int>(0); } albums.TotalRecords = totalCount.GetValueOrDefault(); return albums; } } }
/// <summary> /// 获取指定用户的日志 /// </summary> /// <param name="userID">日志所有者ID</param> /// <param name="categoryID">日志所属分类的ID,传NULL则不以分类作为条件</param> /// <param name="tagID">日志所含标签的ID,传null则不以分类作为条件</param> /// <param name="dataAccessLevel">数据访问级别,将根据此级别返回对应的数据</param> /// <param name="pageNumber">分页页码,从1开始计数</param> /// <param name="pageSize">分页尺度</param> /// <param name="totalCount">总数据条数(注意:不是本次返回的集合数据条数),用于分页</param> /// <returns>日志集合</returns> public abstract BlogArticleCollection GetUserBlogArticles(int userID, int?categoryID, int?tagID, DataAccessLevel dataAccessLevel, int pageNumber, int pageSize, ref int?totalCount);
/// <summary> /// 获取类似标签的日志 /// </summary> /// <param name="articleID">指定日志ID</param> /// <param name="number">获取的篇数</param> public abstract BlogArticleCollection GetSimilarArticles(int articleID, int number, DataAccessLevel dataAccessLevel);
public abstract PostAuthorExtendInfo GetPostAuthorExtendInfo(int userID, DataAccessLevel dataAccessLevel);
public override PostAuthorExtendInfo GetPostAuthorExtendInfo(int userID, DataAccessLevel dataAccessLevel) { string privacyCondition = null; if (dataAccessLevel == DataAccessLevel.Normal) { privacyCondition = " AND [PrivacyType] = 0 "; } else if (dataAccessLevel == DataAccessLevel.Friend) { privacyCondition = " AND [PrivacyType] IN (0, 1)"; } string privacyConditionOfPhoto = string.Empty; if (dataAccessLevel == DataAccessLevel.Normal) { privacyConditionOfPhoto = " AND AlbumID IN(SELECT AlbumID FROM bx_Albums WHERE UserID = @UserID AND [PrivacyType] = 0)"; } else if (dataAccessLevel == DataAccessLevel.Friend) { privacyConditionOfPhoto = " AND AlbumID IN(SELECT AlbumID FROM bx_Albums WHERE UserID = @UserID AND [PrivacyType] IN (0, 1))"; } StringBuffer sql = new StringBuffer(); sql += "SELECT TOP 1 * FROM bx_BlogArticles WHERE UserID = @UserID" + privacyCondition + " ORDER BY ArticleID DESC; \r\n"; sql += "SELECT TOP 4 * FROM bx_Photos WHERE UserID = @UserID" + privacyConditionOfPhoto + " ORDER BY PhotoID DESC; \r\n"; sql += "SELECT TOP 6 *, B.Text, B.KeywordVersion FROM bx_Impressions A LEFT JOIN bx_ImpressionTypes B ON B.TypeID = A.TypeID WHERE UserID = @UserID ORDER BY UpdateDate DESC;"; using (SqlQuery query = new SqlQuery()) { query.CommandText = sql.ToString(); query.CreateParameter<int>("@UserID", userID, SqlDbType.Int); using (XSqlDataReader reader = query.ExecuteReader()) { PostAuthorExtendInfo result = new PostAuthorExtendInfo(); result.NewArticles = new BlogArticleCollection(reader); reader.NextResult(); result.NewPhotos = new PhotoCollection(reader); reader.NextResult(); result.Impressions = new ImpressionCollection(reader); return result; } } }
public override ShareCollection GetUserShares(int shareOwnerID, ShareType? shareType, DataAccessLevel dataAccessLevel, int pageNumber, int pageSize, ref int? totalCount) { using (SqlQuery query = new SqlQuery()) { query.Pager.TableName = "[bx_SharesView]"; query.Pager.SortField = "[UserShareID]"; query.Pager.IsDesc = true; query.Pager.PageNumber = pageNumber; query.Pager.PageSize = pageSize; query.Pager.TotalRecords = totalCount; query.Pager.SelectCount = true; SqlConditionBuilder cb = new SqlConditionBuilder(SqlConditionStart.None); cb.Append("[UserID2] = @UserID"); query.CreateParameter<int>("@UserID", shareOwnerID, SqlDbType.Int); if (shareType.HasValue && shareType.Value != ShareType.All) { cb.Append("[Type] = @Type"); query.CreateParameter<ShareType>("@Type", shareType.Value, SqlDbType.TinyInt); } if (dataAccessLevel == DataAccessLevel.Normal) { cb.Append("[PrivacyType] IN (0, 3)"); } else if (dataAccessLevel == DataAccessLevel.Friend) { cb.Append("[PrivacyType] IN (0, 1, 3)"); } else if(dataAccessLevel == DataAccessLevel.DataOwner) { cb.Append("[PrivacyType] != 2"); } query.Pager.Condition = cb.ToString(); ShareCollection shares; using (XSqlDataReader reader = query.ExecuteReader()) { shares = new ShareCollection(reader); if (reader.NextResult()) { if (totalCount == null && reader.Read()) { totalCount = reader.Get<int>(0); } shares.TotalRecords = totalCount.GetValueOrDefault(); } } FillComments(shares, query); return shares; } }
public override DoingCollection GetUserDoingsWithComments(int doingOwnerID, DataAccessLevel dataAccessLevel, int pageNumber, int pageSize, ref int? totalCount) { DoingCollection doings = null; using (SqlSession db = new SqlSession()) { using (SqlQuery query = db.CreateQuery()) { query.Pager.TableName = "[bx_Doings]"; query.Pager.SortField = "[DoingID]"; query.Pager.SelectCount = true; query.Pager.PageNumber = pageNumber; query.Pager.PageSize = pageSize; query.Pager.TotalRecords = totalCount; query.Pager.Condition = "[UserID]=@UserID"; query.CreateParameter<int>("@UserID", doingOwnerID, SqlDbType.Int); //if (dataAccessLevel == DataAccessLevel.Normal) //{ // query.Pager.Condition += " AND [PrivacyType] IN (0, 3)"; //} //else if (dataAccessLevel == DataAccessLevel.Friend) //{ // query.Pager.Condition += " AND [PrivacyType] IN (0, 1, 3)"; //} using (XSqlDataReader reader = query.ExecuteReader()) { doings = new DoingCollection(reader); if (totalCount == null && reader.NextResult() && reader.Read()) { totalCount = reader.Get<int>(0); } doings.TotalRecords = totalCount.GetValueOrDefault(); } } FillDoingComments(doings, db); } return doings; }
/// <summary> /// 获取指定用户的分享 /// </summary> /// <param name="shareOwnerID">分享所有者的ID</param> /// <param name="shareType">分享的类型,如果为null将获取所有类型的分析</param> /// <param name="dataAccessLevel">数据访问级别,将根据此参数返回数据</param> /// <param name="pageNumber">数据分页当前页码</param> /// <param name="pageSize">数据分页每页条数</param> /// <param name="totalCount">总记录数,传递此参数时可提高查询性能,传递null时将由内部返回</param> /// <returns></returns> public abstract ShareCollection GetUserShares(int shareOwnerID, ShareType?shareType, DataAccessLevel dataAccessLevel, int pageNumber, int pageSize, ref int?totalCount);
protected bool Equals(DataAccessLevel other) { return(CrossOrganizational == other.CrossOrganizational && CurrentOrganization == other.CurrentOrganization); }
public override BlogArticleCollection GetUserBlogArticles(int userID, int? categoryID, int? tagID, DataAccessLevel dataAccessLevel, int pageNumber, int pageSize, ref int? totalCount) { using (SqlQuery query = new SqlQuery()) { query.Pager.TableName = "[bx_BlogArticles]"; query.Pager.SortField = "[ArticleID]"; query.Pager.IsDesc = true; query.Pager.PageNumber = pageNumber; query.Pager.PageSize = pageSize; query.Pager.TotalRecords = totalCount; query.Pager.SelectCount = true; SqlConditionBuilder cb = new SqlConditionBuilder(SqlConditionStart.None); if (categoryID.HasValue) { cb.Append("[CategoryID] = @CategoryID"); query.CreateParameter<int>("@CategoryID", categoryID.Value, SqlDbType.Int); if (categoryID.Value == 0) { cb.Append("[UserID] = @UserID"); query.CreateParameter<int>("@UserID", userID, SqlDbType.Int); } } else { cb.Append("[UserID] = @UserID"); query.CreateParameter<int>("@UserID", userID, SqlDbType.Int); } if (tagID.HasValue) { cb.Append("[ArticleID] IN (SELECT [TargetID] FROM [bx_TagRelation] WHERE [Type] = 1 AND [TagID] = @TagID)"); query.CreateParameter<int>("@TagID", tagID.Value, SqlDbType.Int); } if (dataAccessLevel == DataAccessLevel.Normal) { cb.Append("[PrivacyType] IN (0, 3)"); } else if (dataAccessLevel == DataAccessLevel.Friend) { cb.Append("[PrivacyType] IN (0, 1, 3)"); } query.Pager.Condition = cb.ToString(); using (XSqlDataReader reader = query.ExecuteReader()) { BlogArticleCollection articles = new BlogArticleCollection(reader); if (reader.NextResult()) { if (totalCount == null && reader.Read()) { totalCount = reader.Get<int>(0); } articles.TotalRecords = totalCount.GetValueOrDefault(); } return articles; } } }
/// <summary> /// 获取用户的记录包含当前页的记录的评论(通过记录的CommentList属性访问) /// </summary> /// <param name="doingOwnerID">记录所有者ID</param> /// <param name="dataAccessLevel">数据访问级别,将根据此级别返回数据</param> /// <param name="pageNumber">数据分页每页条数</param> /// <param name="pageSize">数据分页当前页码</param> /// <param name="totalCount">总记录数</param> /// <returns></returns> public abstract DoingCollection GetUserDoingsWithComments(int doingOwnerID, DataAccessLevel dataAccessLevel, int pageNumber, int pageSize, ref int?totalCount);
public override BlogArticleCollection GetSimilarArticles(int articleID, int number, DataAccessLevel dataAccessLevel) { string c = string.Empty; if (dataAccessLevel == DataAccessLevel.Normal) { c = "[PrivacyType] IN (0, 3) AND "; } else if (dataAccessLevel == DataAccessLevel.Friend) { c = "[PrivacyType] IN (0, 1, 3) AND "; } string sql = @"SELECT TOP (@Number) * FROM [bx_BlogArticles] WHERE " + c + @"[ArticleID] <> @ArticleID AND [ArticleID] IN ( SELECT DISTINCT [TargetID] FROM [bx_TagRelation] WHERE [TagID] IN ( SELECT [TagID] FROM [bx_TagRelation] WHERE [TargetID] = @ArticleID AND [Type] = 1 ) AND [Type] = 1 );"; using (SqlQuery query = new SqlQuery()) { query.CommandText = sql; query.CreateTopParameter("@Number", number); query.CreateParameter<int>("@ArticleID", articleID, SqlDbType.Int); using (XSqlDataReader reader = query.ExecuteReader()) { return new BlogArticleCollection(reader); } } }
/// <summary> /// 获取指定用户的相册 /// </summary> /// <param name="userID">相册所有者ID</param> /// <param name="dataAccessLevel">数据访问级别,将根据此级别返回对应的数据</param> /// <param name="pageNumber">分页页码,从1开始计数</param> /// <param name="pageSize">分页尺度</param> /// <param name="totalCount">总数据条数(用于提高分页性能,传null时将从内部返回)</param> /// <returns>符合条件的相册数据</returns> public abstract AlbumCollection GetUserAlbums(int userID, DataAccessLevel dataAccessLevel, int pageNumber, int pageSize, ref int?totalCount);
/************************************** * GetCacheKey开头的函获取缓存键 * **************************************/ /// <summary> /// 获取用户记录总条数的缓存键 /// </summary> /// <param name="doingOwnerID">记录所有者的ID</param> /// <param name="dataAccessLevel">浏览者的数据访问级别</param> /// <returns></returns> private string GetCacheKeyForUserDoingsTotalCount(int doingOwnerID, DataAccessLevel dataAccessLevel) { return("Doing/" + doingOwnerID + "/Count/" + dataAccessLevel); }
public override SpaceData GetSpaceDataForVisit(int spaceOwnerID, DataAccessLevel dataAccessLevel) { string privacyCondition = null; if (dataAccessLevel == DataAccessLevel.Normal) { privacyCondition = " AND [PrivacyType] IN (0, 3)"; } else if (dataAccessLevel == DataAccessLevel.Friend) { privacyCondition = " AND [PrivacyType] IN (0, 1, 3)"; } StringBuffer sql = new StringBuffer(); sql += "SELECT TOP 5 * FROM bx_BlogArticles WHERE UserID = @UserID" + privacyCondition + " ORDER BY ArticleID DESC; \r\n"; sql += "SELECT TOP 4 * FROM bx_Albums WHERE UserID = @UserID" + privacyCondition + " ORDER BY AlbumID DESC; \r\n"; sql += "SELECT TOP 5 * FROM bx_Comments WHERE Type = 1 AND TargetUserID = @UserID AND IsApproved = 1 ORDER BY CommentID DESC; \r\n"; sql += "SELECT TOP 5 * FROM bx_Doings WHERE UserID = @UserID ORDER BY DoingID DESC; \r\n"; sql += "SELECT TOP 6 * FROM bx_Visitors WHERE UserID = @UserID ORDER BY CreateDate DESC; \r\n"; sql += "SELECT TOP 12 * FROM bx_Friends WHERE UserID = @UserID AND GroupID >= 0 ORDER BY Hot, CreateDate DESC; \r\n"; sql += "SELECT TOP 5 * FROM bx_SharesView WHERE UserID = @UserID" + privacyCondition + " AND [PrivacyType] != 2 ORDER BY ShareID DESC;"; sql += "SELECT TOP 12 *, B.Text, B.KeywordVersion FROM bx_Impressions A LEFT JOIN bx_ImpressionTypes B ON B.TypeID = A.TypeID WHERE UserID = @UserID ORDER BY UpdateDate DESC;"; using (SqlQuery query = new SqlQuery()) { query.CommandText = sql.ToString(); query.CreateParameter <int>("@UserID", spaceOwnerID, SqlDbType.Int); using (XSqlDataReader reader = query.ExecuteReader()) { SpaceData result = new SpaceData(); result.ArticleList = new BlogArticleCollection(reader); reader.NextResult(); result.AlbumList = new AlbumCollection(reader); reader.NextResult(); result.CommentList = new CommentCollection(reader); reader.NextResult(); result.DoingList = new DoingCollection(reader); reader.NextResult(); result.VisitorList = new VisitorCollection(reader); reader.NextResult(); result.FriendList = new FriendCollection(reader); reader.NextResult(); result.ShareList = new ShareCollection(reader); reader.NextResult(); result.ImpressionList = new ImpressionCollection(reader); return(result); } } }
public override SpaceData GetSpaceDataForVisit(int spaceOwnerID, DataAccessLevel dataAccessLevel) { string privacyCondition = null; if (dataAccessLevel == DataAccessLevel.Normal) { privacyCondition = " AND [PrivacyType] IN (0, 3)"; } else if (dataAccessLevel == DataAccessLevel.Friend) { privacyCondition = " AND [PrivacyType] IN (0, 1, 3)"; } StringBuffer sql = new StringBuffer(); sql += "SELECT TOP 5 * FROM bx_BlogArticles WHERE UserID = @UserID" + privacyCondition + " ORDER BY ArticleID DESC; \r\n"; sql += "SELECT TOP 4 * FROM bx_Albums WHERE UserID = @UserID" + privacyCondition + " ORDER BY AlbumID DESC; \r\n"; sql += "SELECT TOP 5 * FROM bx_Comments WHERE Type = 1 AND TargetUserID = @UserID AND IsApproved = 1 ORDER BY CommentID DESC; \r\n"; sql += "SELECT TOP 5 * FROM bx_Doings WHERE UserID = @UserID ORDER BY DoingID DESC; \r\n"; sql += "SELECT TOP 6 * FROM bx_Visitors WHERE UserID = @UserID ORDER BY CreateDate DESC; \r\n"; sql += "SELECT TOP 12 * FROM bx_Friends WHERE UserID = @UserID AND GroupID >= 0 ORDER BY Hot, CreateDate DESC; \r\n"; sql += "SELECT TOP 5 * FROM bx_SharesView WHERE UserID = @UserID" + privacyCondition + " AND [PrivacyType] != 2 ORDER BY ShareID DESC;"; sql += "SELECT TOP 12 *, B.Text, B.KeywordVersion FROM bx_Impressions A LEFT JOIN bx_ImpressionTypes B ON B.TypeID = A.TypeID WHERE UserID = @UserID ORDER BY UpdateDate DESC;"; using (SqlQuery query = new SqlQuery()) { query.CommandText = sql.ToString(); query.CreateParameter<int>("@UserID", spaceOwnerID, SqlDbType.Int); using (XSqlDataReader reader = query.ExecuteReader()) { SpaceData result = new SpaceData(); result.ArticleList = new BlogArticleCollection(reader); reader.NextResult(); result.AlbumList = new AlbumCollection(reader); reader.NextResult(); result.CommentList = new CommentCollection(reader); reader.NextResult(); result.DoingList = new DoingCollection(reader); reader.NextResult(); result.VisitorList = new VisitorCollection(reader); reader.NextResult(); result.FriendList = new FriendCollection(reader); reader.NextResult(); result.ShareList = new ShareCollection(reader); reader.NextResult(); result.ImpressionList = new ImpressionCollection(reader); return result; } } }
public abstract SpaceData GetSpaceDataForVisit(int spaceOwnerID, DataAccessLevel dataAccessLevel);