Exemple #1
0
        public MPageResult <MMod> GetModList(MModPageParam param, string currentUserID)
        {
            StringBuilder where = new StringBuilder()
                                  .WhereIf(true, $" AND [Tag] = @{nameof(param.Tag)} ")
                                  .WhereIf(!string.IsNullOrWhiteSpace(param.Keywords), $" AND Title LIKE @{nameof(param.FuzzyKeywords)} ");
            var starModIDs = new List <int>();

            if (!string.IsNullOrWhiteSpace(currentUserID))
            {
                string sql = $@" SELECT ModID FROM ModStar WHERE platformID = {currentUserID} ";
                starModIDs = Db.Query <int>(sql).ToList();

                if (param.OnlyStar)
                {
                    string starModIDsStr = string.Join(',', starModIDs);
                    where.Append($" AND [ID] IN ({starModIDsStr}) ");
                }
            }
            GridReader reader = Db.QueryMultiple($@"SELECT COUNT(ID) FROM Mod WHERE 1 = 1 {where}
SELECT *
FROM(SELECT ROW_NUMBER() OVER(ORDER BY id) AS RowNum, *
 FROM Mod
WHERE 1 = 1 {where}
) AS result
 WHERE RowNum > {(param.PageNo - 1) * param.PageSize} AND RowNum <= {param.PageNo * param.PageSize} ORDER BY ID DESC", param);
            var        result = new MPageResult <MMod>
            {
                Total = reader.ReadFirst <int>(),
                List  = reader.Read <MMod>()
            };
            var modIDs        = result.List.Select(x => x.ID);
            var starCountList = Db.Query <(int, int)>($@"
SELECT ModID, COUNT(ModID)
FROM ModStar 
WHERE ModID IN @{nameof(modIDs)}
GROUP BY ModID"
                                                      , new { modIDs });

            foreach (var item in result.List)
            {
                var(modID, starCount) = starCountList.FirstOrDefault(x => x.Item1 == item.ID);
                if (modID != 0)
                {
                    item.StarCount = starCount;
                }
                if (!string.IsNullOrWhiteSpace(currentUserID))
                {
                    if (starModIDs.Any(x => x == item.ID))
                    {
                        item.Star = true;
                    }
                }
            }
            return(result);
        }
Exemple #2
0
        public MPageResult <MMod> GetModList(MModPageParam param)
        {
            MPageResult <MMod> result = new MPageResult <MMod>();

            BeginDb(DAL =>
            {
                string currentUserID = CurrentUser?.PlatformID ?? string.Empty;
                result = DAL.GetModList(param, currentUserID);
                foreach (MMod item in result.List)
                {
                    item.ImgUrl = "https://cdn-img.speedrunners.cn/" + item.ImgUrl;
                }
            });
            return(result);
        }