idac: added "simple" ranking to frontend
This commit is contained in:
@@ -499,23 +499,20 @@ class IDACItemData(BaseData):
|
||||
def get_time_trial_best_cars_by_course(
|
||||
self, version: int, course_id: int, aime_id: Optional[int] = None
|
||||
) -> Optional[List[Row]]:
|
||||
subquery = (
|
||||
select(
|
||||
trial.c.version,
|
||||
func.min(trial.c.goal_time).label("min_goal_time"),
|
||||
trial.c.style_car_id,
|
||||
)
|
||||
.where(
|
||||
and_(
|
||||
trial.c.version == version,
|
||||
trial.c.course_id == course_id,
|
||||
)
|
||||
subquery = select(
|
||||
trial.c.version,
|
||||
func.min(trial.c.goal_time).label("min_goal_time"),
|
||||
trial.c.style_car_id,
|
||||
).where(
|
||||
and_(
|
||||
trial.c.version == version,
|
||||
trial.c.course_id == course_id,
|
||||
)
|
||||
)
|
||||
|
||||
if aime_id is not None:
|
||||
subquery = subquery.where(trial.c.user == aime_id)
|
||||
|
||||
|
||||
subquery = subquery.group_by(trial.c.style_car_id).subquery()
|
||||
|
||||
sql = select(trial).where(
|
||||
@@ -532,12 +529,45 @@ class IDACItemData(BaseData):
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_time_trial_ranking_by_course_total(
|
||||
self,
|
||||
version: int,
|
||||
course_id: int,
|
||||
) -> Optional[List[Row]]:
|
||||
# count the number of rows returned by the query
|
||||
subquery = (
|
||||
select(
|
||||
trial.c.version,
|
||||
trial.c.user,
|
||||
func.min(trial.c.goal_time).label("min_goal_time"),
|
||||
)
|
||||
.where(and_(trial.c.version == version, trial.c.course_id == course_id))
|
||||
.group_by(trial.c.user)
|
||||
).subquery()
|
||||
|
||||
sql = (
|
||||
select(func.count().label("count"))
|
||||
.where(
|
||||
and_(
|
||||
trial.c.version == subquery.c.version,
|
||||
trial.c.user == subquery.c.user,
|
||||
trial.c.goal_time == subquery.c.min_goal_time,
|
||||
),
|
||||
)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
def get_time_trial_ranking_by_course(
|
||||
self,
|
||||
version: int,
|
||||
course_id: int,
|
||||
style_car_id: Optional[int] = None,
|
||||
limit: Optional[int] = 10,
|
||||
offset: Optional[int] = 0,
|
||||
) -> Optional[List[Row]]:
|
||||
# get the top 10 ranking by goal_time for a given course which is grouped by user
|
||||
subquery = select(
|
||||
@@ -546,7 +576,7 @@ class IDACItemData(BaseData):
|
||||
func.min(trial.c.goal_time).label("min_goal_time"),
|
||||
).where(and_(trial.c.version == version, trial.c.course_id == course_id))
|
||||
|
||||
# if wantd filter only by style_car_id
|
||||
# if wanted filter only by style_car_id
|
||||
if style_car_id is not None:
|
||||
subquery = subquery.where(trial.c.style_car_id == style_car_id)
|
||||
|
||||
@@ -568,6 +598,10 @@ class IDACItemData(BaseData):
|
||||
if limit is not None:
|
||||
sql = sql.limit(limit)
|
||||
|
||||
# offset the result if needed
|
||||
if offset is not None:
|
||||
sql = sql.offset(offset)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
@@ -750,7 +784,9 @@ class IDACItemData(BaseData):
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_timetrial_event(self, aime_id: int, timetrial_event_id: int) -> Optional[Row]:
|
||||
def get_timetrial_event(
|
||||
self, aime_id: int, timetrial_event_id: int
|
||||
) -> Optional[Row]:
|
||||
sql = select(timetrial_event).where(
|
||||
and_(
|
||||
timetrial_event.c.user == aime_id,
|
||||
@@ -946,9 +982,7 @@ class IDACItemData(BaseData):
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_stamp(
|
||||
self, aime_id: int, stamp_data: Dict
|
||||
) -> Optional[int]:
|
||||
def put_stamp(self, aime_id: int, stamp_data: Dict) -> Optional[int]:
|
||||
stamp_data["user"] = aime_id
|
||||
|
||||
sql = insert(stamp).values(**stamp_data)
|
||||
@@ -956,9 +990,7 @@ class IDACItemData(BaseData):
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(
|
||||
f"putstamp: Failed to update! aime_id: {aime_id}"
|
||||
)
|
||||
self.logger.warn(f"putstamp: Failed to update! aime_id: {aime_id}")
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
|
||||
Reference in New Issue
Block a user