kopia lustrzana https://github.com/bugout-dev/moonstream
Add fixes for get leaderboard.
rodzic
949f6c4905
commit
5878e66aaf
|
@ -1,8 +1,8 @@
|
|||
"""leaderboard metadata
|
||||
|
||||
Revision ID: e86bb1230bca
|
||||
Revision ID: 71e888082a6d
|
||||
Revises: 040f2dfde5a5
|
||||
Create Date: 2023-11-09 16:43:21.553490
|
||||
Create Date: 2023-11-15 13:21:16.108399
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
|
@ -10,7 +10,7 @@ import sqlalchemy as sa
|
|||
from sqlalchemy.dialects import postgresql
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = "e86bb1230bca"
|
||||
revision = "71e888082a6d"
|
||||
down_revision = "040f2dfde5a5"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
@ -29,11 +29,13 @@ def upgrade():
|
|||
)
|
||||
op.add_column(
|
||||
"leaderboards",
|
||||
sa.Column("show_connect", sa.Boolean(), nullable=False, server_default="false"),
|
||||
sa.Column(
|
||||
"wallet_connect", sa.Boolean(), nullable=False, server_default="false"
|
||||
),
|
||||
)
|
||||
op.add_column(
|
||||
"leaderboards",
|
||||
sa.Column("public", sa.Boolean(), nullable=False, server_default="false"),
|
||||
sa.Column("public", sa.Boolean(), nullable=False, server_default="true"),
|
||||
)
|
||||
op.add_column(
|
||||
"leaderboards",
|
||||
|
@ -51,6 +53,6 @@ def downgrade():
|
|||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.drop_column("leaderboards", "columns_names")
|
||||
op.drop_column("leaderboards", "public")
|
||||
op.drop_column("leaderboards", "show_connect")
|
||||
op.drop_column("leaderboards", "wallet_connect")
|
||||
op.drop_column("leaderboards", "blockchain_ids")
|
||||
# ### end Alembic commands ###
|
|
@ -1257,7 +1257,7 @@ def create_leaderboard(
|
|||
description: Optional[str],
|
||||
token: Optional[Union[uuid.UUID, str]] = None,
|
||||
public: bool = False,
|
||||
show_connect: bool = False,
|
||||
wallet_connect: bool = False,
|
||||
blockchain_ids: Optional[List[int]] = None,
|
||||
columns_names: Optional[Dict[str, str]] = None,
|
||||
) -> Leaderboard:
|
||||
|
@ -1272,7 +1272,7 @@ def create_leaderboard(
|
|||
title=title,
|
||||
description=description,
|
||||
public=public,
|
||||
show_connect=show_connect,
|
||||
wallet_connect=wallet_connect,
|
||||
blockchain_ids=blockchain_ids,
|
||||
columns_names=columns_names,
|
||||
)
|
||||
|
@ -1335,7 +1335,7 @@ def update_leaderboard(
|
|||
title: Optional[str],
|
||||
description: Optional[str],
|
||||
public: Optional[bool],
|
||||
show_connect: Optional[bool],
|
||||
wallet_connect: Optional[bool],
|
||||
blockchain_ids: Optional[List[int]],
|
||||
columns_names: Optional[Dict[str, str]],
|
||||
) -> Leaderboard:
|
||||
|
@ -1353,8 +1353,8 @@ def update_leaderboard(
|
|||
leaderboard.description = description
|
||||
if public is not None:
|
||||
leaderboard.public = public
|
||||
if show_connect is not None:
|
||||
leaderboard.show_connect = show_connect
|
||||
if wallet_connect is not None:
|
||||
leaderboard.wallet_connect = wallet_connect
|
||||
if blockchain_ids is not None:
|
||||
leaderboard.blockchain_ids = blockchain_ids
|
||||
if columns_names is not None:
|
||||
|
@ -1369,7 +1369,7 @@ def get_leaderboard_by_id(db_session: Session, leaderboard_id) -> Leaderboard:
|
|||
"""
|
||||
Get the leaderboard by id
|
||||
"""
|
||||
return db_session.query(Leaderboard).filter(Leaderboard.id == leaderboard_id).filter(leaderboard.public == True).one() # type: ignore
|
||||
return db_session.query(Leaderboard).filter(Leaderboard.id == leaderboard_id).filter(Leaderboard.public == True).one() # type: ignore
|
||||
|
||||
|
||||
def get_leaderboard_by_title(db_session: Session, title) -> Leaderboard:
|
||||
|
|
|
@ -342,6 +342,16 @@ class Score(BaseModel):
|
|||
points_data: Dict[str, Any]
|
||||
|
||||
|
||||
class LeaderboardUnformattedPosition(BaseModel):
|
||||
column_1: str = Field(serialization_alias="address")
|
||||
column_2: int = Field(serialization_alias="rank")
|
||||
column_3: int = Field(serialization_alias="score")
|
||||
column_4: Dict[str, Any] = Field(serialization_alias="points_data")
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
|
||||
|
||||
class LeaderboardPosition(BaseModel):
|
||||
address: str
|
||||
rank: int
|
||||
|
@ -371,7 +381,7 @@ class Leaderboard(BaseModel):
|
|||
description: Optional[str] = None
|
||||
resource_id: Optional[UUID] = None
|
||||
public: Optional[bool] = False
|
||||
show_connect: Optional[bool] = False
|
||||
wallet_connect: Optional[bool] = False
|
||||
blockchain_ids: Optional[List[int]] = None
|
||||
columns_names: Optional[Dict[str, str]] = None
|
||||
created_at: datetime
|
||||
|
@ -390,7 +400,7 @@ class LeaderboardCreateRequest(BaseModel):
|
|||
title: str
|
||||
description: Optional[str] = None
|
||||
public: Optional[bool] = False
|
||||
show_connect: Optional[bool] = False
|
||||
wallet_connect: Optional[bool] = False
|
||||
blockchain_ids: Optional[List[int]] = None
|
||||
columns_names: Optional[Dict[str, str]] = None
|
||||
|
||||
|
@ -401,7 +411,7 @@ class LeaderboardCreatedResponse(BaseModel):
|
|||
description: Optional[str] = None
|
||||
resource_id: Optional[UUID] = None
|
||||
public: Optional[bool] = False
|
||||
show_connect: Optional[bool] = False
|
||||
wallet_connect: Optional[bool] = False
|
||||
blockchain_ids: Optional[List[int]] = None
|
||||
columns_names: Optional[Dict[str, str]] = None
|
||||
created_at: datetime
|
||||
|
@ -417,7 +427,7 @@ class LeaderboardUpdatedResponse(BaseModel):
|
|||
description: Optional[str] = None
|
||||
resource_id: Optional[UUID] = None
|
||||
public: Optional[bool] = False
|
||||
show_connect: Optional[bool] = False
|
||||
wallet_connect: Optional[bool] = False
|
||||
blockchain_ids: Optional[List[int]] = None
|
||||
columns_names: Optional[Dict[str, str]] = None
|
||||
created_at: datetime
|
||||
|
@ -431,7 +441,7 @@ class LeaderboardUpdateRequest(BaseModel):
|
|||
title: Optional[str] = None
|
||||
description: Optional[str] = None
|
||||
public: Optional[bool] = False
|
||||
show_connect: Optional[bool] = False
|
||||
wallet_connect: Optional[bool] = False
|
||||
blockchain_ids: Optional[List[int]] = None
|
||||
columns_names: Optional[Dict[str, str]] = None
|
||||
|
||||
|
@ -442,7 +452,7 @@ class LeaderboardDeletedResponse(BaseModel):
|
|||
description: Optional[str] = None
|
||||
resource_id: Optional[UUID] = None
|
||||
public: Optional[bool] = False
|
||||
show_connect: Optional[bool] = False
|
||||
wallet_connect: Optional[bool] = False
|
||||
blockchain_ids: Optional[List[int]] = None
|
||||
columns_names: Optional[Dict[str, str]] = None
|
||||
created_at: datetime
|
||||
|
|
|
@ -348,7 +348,8 @@ class Leaderboard(Base): # type: ignore
|
|||
description = Column(String, nullable=True)
|
||||
resource_id = Column(UUID(as_uuid=True), nullable=True, index=True)
|
||||
blockchain_ids = Column(ARRAY(Integer), nullable=False, default=[])
|
||||
show_connect = Column(Boolean, default=False, nullable=False)
|
||||
|
||||
wallet_connect = Column(Boolean, default=False, nullable=False)
|
||||
public = Column(Boolean, default=False, nullable=False)
|
||||
columns_names = Column(JSONB, nullable=False, default={})
|
||||
created_at = Column(
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
Leaderboard API.
|
||||
"""
|
||||
import logging
|
||||
from typing import Any, Dict, List, Optional
|
||||
from typing import Any, Dict, List, Optional, Any, Union
|
||||
from uuid import UUID
|
||||
|
||||
from bugout.exceptions import BugoutResponseException
|
||||
|
@ -87,21 +87,33 @@ app.add_middleware(
|
|||
)
|
||||
|
||||
|
||||
@app.get("", response_model=List[data.LeaderboardPosition], tags=["Public Endpoints"])
|
||||
@app.get("/", response_model=List[data.LeaderboardPosition], tags=["Public Endpoints"])
|
||||
@app.get(
|
||||
"",
|
||||
response_model=Union[
|
||||
List[data.LeaderboardPosition], List[data.LeaderboardUnformattedPosition]
|
||||
],
|
||||
tags=["Public Endpoints"],
|
||||
)
|
||||
@app.get(
|
||||
"/",
|
||||
response_model=Union[
|
||||
List[data.LeaderboardPosition], List[data.LeaderboardUnformattedPosition]
|
||||
],
|
||||
tags=["Public Endpoints"],
|
||||
)
|
||||
async def leaderboard(
|
||||
leaderboard_id: UUID = Query(..., description="Leaderboard ID"),
|
||||
limit: int = Query(10),
|
||||
offset: int = Query(0),
|
||||
db_session: Session = Depends(db.yield_db_session),
|
||||
) -> List[data.LeaderboardPosition]:
|
||||
) -> Any:
|
||||
"""
|
||||
Returns the leaderboard positions.
|
||||
"""
|
||||
|
||||
### Check if leaderboard exists
|
||||
try:
|
||||
actions.get_leaderboard_by_id(db_session, leaderboard_id)
|
||||
leaderboard = actions.get_leaderboard_by_id(db_session, leaderboard_id)
|
||||
except NoResultFound as e:
|
||||
raise EngineHTTPException(
|
||||
status_code=404,
|
||||
|
@ -114,16 +126,28 @@ async def leaderboard(
|
|||
leaderboard_positions = actions.get_leaderboard_positions(
|
||||
db_session, leaderboard_id, limit, offset
|
||||
)
|
||||
if len(leaderboard.columns_names) > 0:
|
||||
# breakpoint()
|
||||
result = [
|
||||
data.LeaderboardUnformattedPosition(
|
||||
column_1=position[1],
|
||||
column_2=position[2],
|
||||
column_3=position[4],
|
||||
column_4=position[3],
|
||||
)
|
||||
for position in leaderboard_positions
|
||||
]
|
||||
|
||||
result = [
|
||||
data.LeaderboardPosition(
|
||||
address=position.address,
|
||||
score=position.score,
|
||||
rank=position.rank,
|
||||
points_data=position.points_data,
|
||||
)
|
||||
for position in leaderboard_positions
|
||||
]
|
||||
else:
|
||||
result = [
|
||||
data.LeaderboardPosition(
|
||||
address=position.address,
|
||||
score=position.score,
|
||||
rank=position.rank,
|
||||
points_data=position.points_data,
|
||||
)
|
||||
for position in leaderboard_positions
|
||||
]
|
||||
|
||||
return result
|
||||
|
||||
|
@ -153,7 +177,7 @@ async def create_leaderboard(
|
|||
description=leaderboard.description,
|
||||
token=token,
|
||||
public=leaderboard.public,
|
||||
show_connect=leaderboard.show_connect,
|
||||
wallet_connect=leaderboard.wallet_connect,
|
||||
blockchain_ids=leaderboard.blockchain_ids,
|
||||
columns_names=leaderboard.columns_names,
|
||||
)
|
||||
|
@ -176,7 +200,7 @@ async def create_leaderboard(
|
|||
description=created_leaderboard.description, # type: ignore
|
||||
resource_id=created_leaderboard.resource_id, # type: ignore
|
||||
public=created_leaderboard.public, # type: ignore
|
||||
show_connect=created_leaderboard.show_connect, # type: ignore
|
||||
wallet_connect=created_leaderboard.wallet_connect, # type: ignore
|
||||
blockchain_ids=created_leaderboard.blockchain_ids, # type: ignore
|
||||
columns_names=created_leaderboard.columns_names, # type: ignore
|
||||
created_at=created_leaderboard.created_at, # type: ignore
|
||||
|
@ -225,7 +249,7 @@ async def update_leaderboard(
|
|||
title=leaderboard.title,
|
||||
description=leaderboard.description,
|
||||
public=leaderboard.public,
|
||||
show_connect=leaderboard.show_connect,
|
||||
wallet_connect=leaderboard.wallet_connect,
|
||||
blockchain_ids=leaderboard.blockchain_ids,
|
||||
columns_names=leaderboard.columns_names,
|
||||
)
|
||||
|
@ -246,7 +270,7 @@ async def update_leaderboard(
|
|||
description=updated_leaderboard.description, # type: ignore
|
||||
resource_id=updated_leaderboard.resource_id, # type: ignore
|
||||
public=updated_leaderboard.public, # type: ignore
|
||||
show_connect=updated_leaderboard.show_connect, # type: ignore
|
||||
wallet_connect=updated_leaderboard.wallet_connect, # type: ignore
|
||||
blockchain_ids=updated_leaderboard.blockchain_ids, # type: ignore
|
||||
columns_names=updated_leaderboard.columns_names, # type: ignore
|
||||
created_at=updated_leaderboard.created_at, # type: ignore
|
||||
|
@ -310,7 +334,7 @@ async def delete_leaderboard(
|
|||
description=deleted_leaderboard.description, # type: ignore
|
||||
resource_id=deleted_leaderboard.resource_id, # type: ignore
|
||||
public=deleted_leaderboard.public, # type: ignore
|
||||
show_connect=deleted_leaderboard.show_connect, # type: ignore
|
||||
wallet_connect=deleted_leaderboard.wallet_connect, # type: ignore
|
||||
blockchain_ids=deleted_leaderboard.blockchain_ids, # type: ignore
|
||||
columns_names=deleted_leaderboard.columns_names, # type: ignore
|
||||
created_at=deleted_leaderboard.created_at, # type: ignore
|
||||
|
@ -352,7 +376,7 @@ async def get_leaderboards(
|
|||
description=leaderboard.description, # type: ignore
|
||||
resource_id=leaderboard.resource_id, # type: ignore
|
||||
public=leaderboard.public, # type: ignore
|
||||
show_connect=leaderboard.show_connect, # type: ignore
|
||||
wallet_connect=leaderboard.wallet_connect, # type: ignore
|
||||
blockchain_ids=leaderboard.blockchain_ids, # type: ignore
|
||||
columns_names=leaderboard.columns_names, # type: ignore
|
||||
created_at=leaderboard.created_at, # type: ignore
|
||||
|
|
Ładowanie…
Reference in New Issue