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