Add migration and endpoints changes.

pull/968/head
Andrey 2023-11-09 17:41:14 +02:00
rodzic 2c49f975e8
commit 949f6c4905
5 zmienionych plików z 136 dodań i 3 usunięć

Wyświetl plik

@ -0,0 +1,56 @@
"""leaderboard metadata
Revision ID: e86bb1230bca
Revises: 040f2dfde5a5
Create Date: 2023-11-09 16:43:21.553490
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
# revision identifiers, used by Alembic.
revision = "e86bb1230bca"
down_revision = "040f2dfde5a5"
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column(
"leaderboards",
sa.Column(
"blockchain_ids",
sa.ARRAY(sa.Integer()),
nullable=False,
server_default="{}",
),
)
op.add_column(
"leaderboards",
sa.Column("show_connect", sa.Boolean(), nullable=False, server_default="false"),
)
op.add_column(
"leaderboards",
sa.Column("public", sa.Boolean(), nullable=False, server_default="false"),
)
op.add_column(
"leaderboards",
sa.Column(
"columns_names",
postgresql.JSONB(astext_type=sa.Text()),
nullable=False,
server_default="{}",
),
)
# ### end Alembic commands ###
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", "blockchain_ids")
# ### end Alembic commands ###

Wyświetl plik

@ -1256,6 +1256,10 @@ def create_leaderboard(
title: str,
description: Optional[str],
token: Optional[Union[uuid.UUID, str]] = None,
public: bool = False,
show_connect: bool = False,
blockchain_ids: Optional[List[int]] = None,
columns_names: Optional[Dict[str, str]] = None,
) -> Leaderboard:
"""
Create a leaderboard
@ -1264,7 +1268,14 @@ def create_leaderboard(
if not token:
token = uuid.UUID(MOONSTREAM_ADMIN_ACCESS_TOKEN)
try:
leaderboard = Leaderboard(title=title, description=description)
leaderboard = Leaderboard(
title=title,
description=description,
public=public,
show_connect=show_connect,
blockchain_ids=blockchain_ids,
columns_names=columns_names,
)
db_session.add(leaderboard)
db_session.commit()
@ -1323,6 +1334,10 @@ def update_leaderboard(
leaderboard_id: uuid.UUID,
title: Optional[str],
description: Optional[str],
public: Optional[bool],
show_connect: Optional[bool],
blockchain_ids: Optional[List[int]],
columns_names: Optional[Dict[str, str]],
) -> Leaderboard:
"""
Update a leaderboard
@ -1336,6 +1351,14 @@ def update_leaderboard(
leaderboard.title = title
if description is not None:
leaderboard.description = description
if public is not None:
leaderboard.public = public
if show_connect is not None:
leaderboard.show_connect = show_connect
if blockchain_ids is not None:
leaderboard.blockchain_ids = blockchain_ids
if columns_names is not None:
leaderboard.columns_names = columns_names
db_session.commit()
@ -1346,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).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:

Wyświetl plik

@ -370,6 +370,10 @@ class Leaderboard(BaseModel):
title: str
description: Optional[str] = None
resource_id: Optional[UUID] = None
public: Optional[bool] = False
show_connect: Optional[bool] = False
blockchain_ids: Optional[List[int]] = None
columns_names: Optional[Dict[str, str]] = None
created_at: datetime
updated_at: datetime
@ -385,6 +389,10 @@ class LeaderboardInfoResponse(BaseModel):
class LeaderboardCreateRequest(BaseModel):
title: str
description: Optional[str] = None
public: Optional[bool] = False
show_connect: Optional[bool] = False
blockchain_ids: Optional[List[int]] = None
columns_names: Optional[Dict[str, str]] = None
class LeaderboardCreatedResponse(BaseModel):
@ -392,6 +400,10 @@ class LeaderboardCreatedResponse(BaseModel):
title: str
description: Optional[str] = None
resource_id: Optional[UUID] = None
public: Optional[bool] = False
show_connect: Optional[bool] = False
blockchain_ids: Optional[List[int]] = None
columns_names: Optional[Dict[str, str]] = None
created_at: datetime
updated_at: datetime
@ -404,6 +416,10 @@ class LeaderboardUpdatedResponse(BaseModel):
title: str
description: Optional[str] = None
resource_id: Optional[UUID] = None
public: Optional[bool] = False
show_connect: Optional[bool] = False
blockchain_ids: Optional[List[int]] = None
columns_names: Optional[Dict[str, str]] = None
created_at: datetime
updated_at: datetime
@ -414,6 +430,10 @@ class LeaderboardUpdatedResponse(BaseModel):
class LeaderboardUpdateRequest(BaseModel):
title: Optional[str] = None
description: Optional[str] = None
public: Optional[bool] = False
show_connect: Optional[bool] = False
blockchain_ids: Optional[List[int]] = None
columns_names: Optional[Dict[str, str]] = None
class LeaderboardDeletedResponse(BaseModel):
@ -421,6 +441,10 @@ class LeaderboardDeletedResponse(BaseModel):
title: str
description: Optional[str] = None
resource_id: Optional[UUID] = None
public: Optional[bool] = False
show_connect: Optional[bool] = False
blockchain_ids: Optional[List[int]] = None
columns_names: Optional[Dict[str, str]] = None
created_at: datetime
updated_at: datetime

Wyświetl plik

@ -1,6 +1,7 @@
import uuid
from sqlalchemy import (
ARRAY,
DECIMAL,
VARCHAR,
BigInteger,
@ -346,6 +347,10 @@ class Leaderboard(Base): # type: ignore
title = Column(VARCHAR(128), nullable=False)
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)
public = Column(Boolean, default=False, nullable=False)
columns_names = Column(JSONB, nullable=False, default={})
created_at = Column(
DateTime(timezone=True), server_default=utcnow(), nullable=False
)

Wyświetl plik

@ -114,6 +114,7 @@ async def leaderboard(
leaderboard_positions = actions.get_leaderboard_positions(
db_session, leaderboard_id, limit, offset
)
result = [
data.LeaderboardPosition(
address=position.address,
@ -140,7 +141,6 @@ async def create_leaderboard(
Authorization: str = AuthHeader,
) -> data.LeaderboardCreatedResponse:
"""
Create leaderboard.
"""
@ -152,6 +152,10 @@ async def create_leaderboard(
title=leaderboard.title,
description=leaderboard.description,
token=token,
public=leaderboard.public,
show_connect=leaderboard.show_connect,
blockchain_ids=leaderboard.blockchain_ids,
columns_names=leaderboard.columns_names,
)
except actions.LeaderboardCreateError as e:
logger.error(f"Error while creating leaderboard: {e}")
@ -171,6 +175,10 @@ async def create_leaderboard(
title=created_leaderboard.title, # type: ignore
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
blockchain_ids=created_leaderboard.blockchain_ids, # type: ignore
columns_names=created_leaderboard.columns_names, # type: ignore
created_at=created_leaderboard.created_at, # type: ignore
updated_at=created_leaderboard.updated_at, # type: ignore
)
@ -216,6 +224,10 @@ async def update_leaderboard(
leaderboard_id=leaderboard_id,
title=leaderboard.title,
description=leaderboard.description,
public=leaderboard.public,
show_connect=leaderboard.show_connect,
blockchain_ids=leaderboard.blockchain_ids,
columns_names=leaderboard.columns_names,
)
except actions.LeaderboardUpdateError as e:
logger.error(f"Error while updating leaderboard: {e}")
@ -233,6 +245,10 @@ async def update_leaderboard(
title=updated_leaderboard.title, # type: ignore
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
blockchain_ids=updated_leaderboard.blockchain_ids, # type: ignore
columns_names=updated_leaderboard.columns_names, # type: ignore
created_at=updated_leaderboard.created_at, # type: ignore
updated_at=updated_leaderboard.updated_at, # type: ignore
)
@ -292,6 +308,11 @@ async def delete_leaderboard(
id=deleted_leaderboard.id, # type: ignore
title=deleted_leaderboard.title, # type: ignore
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
blockchain_ids=deleted_leaderboard.blockchain_ids, # type: ignore
columns_names=deleted_leaderboard.columns_names, # type: ignore
created_at=deleted_leaderboard.created_at, # type: ignore
updated_at=deleted_leaderboard.updated_at, # type: ignore
)
@ -330,6 +351,10 @@ async def get_leaderboards(
title=leaderboard.title, # type: ignore
description=leaderboard.description, # type: ignore
resource_id=leaderboard.resource_id, # type: ignore
public=leaderboard.public, # type: ignore
show_connect=leaderboard.show_connect, # type: ignore
blockchain_ids=leaderboard.blockchain_ids, # type: ignore
columns_names=leaderboard.columns_names, # type: ignore
created_at=leaderboard.created_at, # type: ignore
updated_at=leaderboard.updated_at, # type: ignore
)