kopia lustrzana https://github.com/bugout-dev/moonstream
Add get score endpoint.
rodzic
854a473043
commit
cfeae159d4
|
@ -1222,6 +1222,43 @@ def get_position(
|
||||||
return query.all()
|
return query.all()
|
||||||
|
|
||||||
|
|
||||||
|
def get_leaderboard_score(
|
||||||
|
db_session: Session,
|
||||||
|
leaderboard_id,
|
||||||
|
address,
|
||||||
|
version_number: Optional[int] = None,
|
||||||
|
) -> Optional[LeaderboardScores]:
|
||||||
|
"""
|
||||||
|
Return address score
|
||||||
|
"""
|
||||||
|
|
||||||
|
latest_version = leaderboard_version_filter(
|
||||||
|
db_session=db_session,
|
||||||
|
leaderboard_id=leaderboard_id,
|
||||||
|
version_number=version_number,
|
||||||
|
)
|
||||||
|
|
||||||
|
query = (
|
||||||
|
db_session.query(LeaderboardScores)
|
||||||
|
.join(
|
||||||
|
LeaderboardVersion,
|
||||||
|
and_(
|
||||||
|
LeaderboardVersion.leaderboard_id == LeaderboardScores.leaderboard_id,
|
||||||
|
LeaderboardVersion.version_number
|
||||||
|
== LeaderboardScores.leaderboard_version_number,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.filter(
|
||||||
|
LeaderboardVersion.published == True,
|
||||||
|
LeaderboardVersion.version_number == latest_version,
|
||||||
|
)
|
||||||
|
.filter(LeaderboardScores.leaderboard_id == leaderboard_id)
|
||||||
|
.filter(LeaderboardScores.address == address)
|
||||||
|
)
|
||||||
|
|
||||||
|
return query.one_or_none()
|
||||||
|
|
||||||
|
|
||||||
def get_leaderboard_positions(
|
def get_leaderboard_positions(
|
||||||
db_session: Session,
|
db_session: Session,
|
||||||
leaderboard_id,
|
leaderboard_id,
|
||||||
|
|
|
@ -60,6 +60,7 @@ leaderboard_whitelist = {
|
||||||
"/leaderboard/": "GET",
|
"/leaderboard/": "GET",
|
||||||
"/leaderboard/rank": "GET",
|
"/leaderboard/rank": "GET",
|
||||||
"/leaderboard/ranks": "GET",
|
"/leaderboard/ranks": "GET",
|
||||||
|
"/leaderboard/scores": "GET",
|
||||||
"/scores/changes": "GET",
|
"/scores/changes": "GET",
|
||||||
"/leaderboard/docs": "GET",
|
"/leaderboard/docs": "GET",
|
||||||
"/leaderboard/openapi.json": "GET",
|
"/leaderboard/openapi.json": "GET",
|
||||||
|
@ -619,6 +620,57 @@ async def ranks(
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
|
||||||
|
@app.get(
|
||||||
|
"/scores",
|
||||||
|
response_model=data.LeaderboardScore,
|
||||||
|
tags=["Public Endpoints"],
|
||||||
|
)
|
||||||
|
async def leaderboard_score(
|
||||||
|
address: str = Query(..., description="Address to get position for."),
|
||||||
|
leaderboard_id: UUID = Query(..., description="Leaderboard ID"),
|
||||||
|
version: Optional[int] = Query(None, description="Version of the leaderboard."),
|
||||||
|
normalize_addresses: bool = Query(
|
||||||
|
True, description="Normalize addresses to checksum."
|
||||||
|
),
|
||||||
|
db_session: Session = Depends(db.yield_db_session),
|
||||||
|
) -> data.LeaderboardScore:
|
||||||
|
"""
|
||||||
|
Returns the leaderboard posotion for the given address.
|
||||||
|
"""
|
||||||
|
|
||||||
|
### Check if leaderboard exists
|
||||||
|
try:
|
||||||
|
actions.get_leaderboard_by_id(db_session, leaderboard_id)
|
||||||
|
except NoResultFound as e:
|
||||||
|
raise EngineHTTPException(
|
||||||
|
status_code=404,
|
||||||
|
detail="Leaderboard not found.",
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Error while getting leaderboard: {e}")
|
||||||
|
raise EngineHTTPException(status_code=500, detail="Internal server error")
|
||||||
|
|
||||||
|
if normalize_addresses:
|
||||||
|
address = Web3.toChecksumAddress(address)
|
||||||
|
|
||||||
|
score = actions.get_leaderboard_score(
|
||||||
|
db_session,
|
||||||
|
leaderboard_id,
|
||||||
|
address,
|
||||||
|
version,
|
||||||
|
)
|
||||||
|
|
||||||
|
if score is None:
|
||||||
|
raise EngineHTTPException(status_code=204, detail="Score not found.")
|
||||||
|
|
||||||
|
return data.LeaderboardScore(
|
||||||
|
leaderboard_id=score.leaderboard_id,
|
||||||
|
address=score.address,
|
||||||
|
score=score.score,
|
||||||
|
points_data=score.points_data,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@app.put(
|
@app.put(
|
||||||
"/{leaderboard_id}/scores",
|
"/{leaderboard_id}/scores",
|
||||||
response_model=List[data.LeaderboardScore],
|
response_model=List[data.LeaderboardScore],
|
||||||
|
|
Ładowanie…
Reference in New Issue