Fixed Rival Music retrieval

This commit is contained in:
EmmyHeart 2023-10-16 13:09:11 +00:00
parent 480551f942
commit c78a62de14

View File

@ -201,9 +201,33 @@ class ChuniScoreData(BaseData):
return None return None
return result.lastrowid return result.lastrowid
def get_rival_music(self, rival_id: int, index: int, max_count: int) -> Optional[List[Dict]]: def get_rival_music(self, rival_id: int) -> Optional[List[Dict]]:
sql = select(playlog).where(playlog.c.user == rival_id).limit(max_count).offset(index) sql = select(playlog).where(playlog.c.user == rival_id)
result = self.execute(sql) result = self.execute(sql)
if result is None: if result is None:
return None return None
return result.fetchall() return result.fetchall()
def get_rival_music_highest_scores(self, rival_id: int) -> Optional[List[Dict]]:
# Define the subquery to retrieve the highest scoreMax for each level and musicId
subquery = (
select([
self.playlog.c.musicId,
self.playlog.c.level,
func.max(self.playlog.c.score)
])
.where(self.playlog.c.user == rival_id)
.group_by(self.playlog.c.musicId, self.playlog.c.level)
)
# Join the subquery with the playlog table to get the full records
query = select([
self.playlog,
subquery.scalar()
]).where(self.playlog.c.user == rival_id)
result = self.execute(query)
if result is None:
return None
return result.fetchall()