kopia lustrzana https://github.com/bugout-dev/moonstream
				
				
				
			Add migration and endpoints changes.
							rodzic
							
								
									2c49f975e8
								
							
						
					
					
						commit
						949f6c4905
					
				| 
						 | 
				
			
			@ -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 ###
 | 
			
		||||
| 
						 | 
				
			
			@ -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:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
    )
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
        )
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue