1
0
mirror of synced 2024-11-24 06:50:15 +01:00

Fix Oni/UraOni best score handling

This commit is contained in:
esuo1198 2024-04-18 22:02:22 +09:00
parent 8a15529e12
commit 15c63c097c

View File

@ -22,21 +22,38 @@ public class GetSelfBestQueryHandler(IGameDataService gameDataService, TaikoDbCo
requestSet.ExceptWith(invalidSongIds);
}
var selfbestScores = await context.SongBestData
var selfBestScores = await context.SongBestData
.Where(datum => datum.Baid == request.Baid &&
requestSet.Contains(datum.SongId) &&
(datum.Difficulty == requestDifficulty ||
(datum.Difficulty == Difficulty.UraOni && requestDifficulty == Difficulty.Oni)))
.OrderBy(datum => datum.SongId)
.ToListAsync(cancellationToken);
var selfBestList = selfbestScores.ConvertAll(datum => new CommonSelfBestResponse.SelfBestData
var selfBestList = new List<CommonSelfBestResponse.SelfBestData>();
foreach (var songId in selfBestScores.Select(datum => datum.SongId))
{
SongNo = datum.SongId,
SelfBestScore = datum.BestScore,
UraBestScore = datum.Difficulty == Difficulty.UraOni ? datum.BestScore : 0,
SelfBestScoreRate = datum.BestRate,
UraBestScoreRate = datum.Difficulty == Difficulty.UraOni ? datum.BestRate : 0
});
var selfBest = new CommonSelfBestResponse.SelfBestData();
var selfBestScore = selfBestScores
.FirstOrDefault(datum => datum.SongId == songId &&
datum.Difficulty == requestDifficulty);
var uraSelfBestScore = selfBestScores
.FirstOrDefault(datum => datum.SongId == songId &&
(datum.Difficulty == Difficulty.UraOni && requestDifficulty == Difficulty.Oni));
selfBest.SongNo = songId;
if (selfBestScore is not null)
{
selfBest.SelfBestScore = selfBestScore.BestScore;
selfBest.SelfBestScoreRate = selfBestScore.BestRate;
}
if (uraSelfBestScore is not null)
{
selfBest.UraBestScore = uraSelfBestScore.BestScore;
selfBest.UraBestScoreRate = uraSelfBestScore.BestRate;
}
selfBestList.Add(selfBest);
}
// For songs that don't have a score, add them to the response with 0s
var missingSongs = requestSet.Except(selfBestList.Select(datum => datum.SongNo));
selfBestList.AddRange(missingSongs.Select(songNo => new CommonSelfBestResponse.SelfBestData