Exemple #1
0
        public async Task GetScoreBoardInfo(Request request, Response response)
        {
            var groupDb   = DbFactory.Get <UserGroup>();
            var groupList = await groupDb.SelectAllFromCache();

            var progressDb   = DbFactory.Get <Progress>();
            var progressList = await progressDb.SimpleDb.AsQueryable().ToListAsync();

            var progressDict = progressList.ToDictionary(it => it.gid, it => it);

            var scoreBoardList = groupList.Select(it =>
            {
                var r = new ScoreBoardItem
                {
                    gid           = it.gid,
                    group_name    = it.groupname,
                    group_profile = it.profile
                };

                if (progressDict.ContainsKey(it.gid))
                {
                    var progress = progressDict[it.gid];
                    r.is_finish  = progress.is_finish;

                    if (r.is_finish == 1)
                    {
                        r.total_time =
                            (progress.finish_time -
                             Ccxc.Core.Utils.UnixTimestamp.FromTimestamp(Config.Config.Options.StartTime)).TotalHours +
                            progress.penalty;
                    }

                    r.score = progress.score;
                    r.finished_puzzle_count = progress.data.FinishedPuzzles.Count;
                }

                return(r);
            }).ToList();

            var res = new ScoreBoardResponse
            {
                status          = 1,
                finished_groups = scoreBoardList.Where(it => it.is_finish == 1).OrderBy(it => it.total_time).ThenBy(it => it.finished_puzzle_count).ToList(),
                groups          = scoreBoardList.Where(it => it.is_finish != 1).OrderByDescending(it => it.score).ThenBy(it => it.gid).ToList()
            };

            await response.JsonResponse(200, res);
        }