Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions app/model/db/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
from .idx_agreement import AgreementStatus, IDXAgreement
from .idx_block_data import IDXBlockData, IDXBlockDataBlockNumber
from .idx_consume_coupon import IDXConsumeCoupon
from .idx_lock_unlock import IDXLock, IDXUnlock
from .idx_lock_unlock import IDXLock, IDXUnlock, LockDataMessage, UnlockDataMessage
from .idx_order import IDXOrder
from .idx_position import (
IDXLockedPosition,
Expand All @@ -42,10 +42,10 @@
)
from .idx_token_list_register import IDXTokenListBlockNumber, IDXTokenListRegister
from .idx_transfer import (
DataMessage,
IDXTransfer,
IDXTransferBlockNumber,
IDXTransferSourceEventType,
TransferDataMessage,
)
from .idx_transfer_approval import IDXTransferApproval, IDXTransferApprovalBlockNumber
from .idx_tx_data import IDXTxData
Expand Down
26 changes: 24 additions & 2 deletions app/model/db/idx_lock_unlock.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@
"""

from datetime import datetime, timedelta, timezone
from enum import StrEnum
from zoneinfo import ZoneInfo

from pydantic import BaseModel
from sqlalchemy import JSON, BigInteger, Boolean, DateTime, String
from sqlalchemy.orm import Mapped, mapped_column

Expand All @@ -30,6 +32,26 @@
local_tz = ZoneInfo(TZ)


class LockMessage(StrEnum):
garnishment = "garnishment"
force_lock = "force_lock"
ibet_wst_bridge = "ibet_wst_bridge"


class LockDataMessage(BaseModel):
message: LockMessage


class UnlockMessage(StrEnum):
garnishment = "garnishment"
force_unlock = "force_unlock"
ibet_wst_bridge = "ibet_wst_bridge"


class UnlockDataMessage(BaseModel):
message: UnlockMessage


class IDXLock(Base):
"""Token Lock Event (INDEX)"""

Expand All @@ -55,7 +77,7 @@ class IDXLock(Base):
account_address: Mapped[str] = mapped_column(String(42), index=True, nullable=False)
# Locked Amount
value: Mapped[int] = mapped_column(BigInteger, index=True, nullable=False)
# Data
# Data(LockDataMessage)
data: Mapped[dict] = mapped_column(JSON, nullable=False)
# Lock Datetime
block_timestamp: Mapped[datetime] = mapped_column(
Expand Down Expand Up @@ -135,7 +157,7 @@ class IDXUnlock(Base):
)
# Locked Amount
value: Mapped[int] = mapped_column(BigInteger, index=True, nullable=False)
# Data
# Data(UnlockDataMessage)
data: Mapped[dict] = mapped_column(JSON, nullable=False)
# Lock Datetime
block_timestamp: Mapped[datetime] = mapped_column(
Expand Down
3 changes: 1 addition & 2 deletions app/model/db/idx_transfer.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,9 @@ class IDXTransferSourceEventType(StrEnum):
REALLOCATION = "Reallocation"


class DataMessage(BaseModel):
class TransferDataMessage(BaseModel):
message: Literal[
"garnishment",
"inheritance",
"force_unlock",
"ibet_wst_bridge",
]
Expand Down
4 changes: 4 additions & 0 deletions batch/indexer_Position_Bond.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@
IDXPositionBondBlockNumber,
IDXUnlock,
Listing,
LockDataMessage,
UnlockDataMessage,
)
from app.model.schema.base import TokenType
from app.utils.asyncio_utils import SemaphoreTaskGroup
Expand Down Expand Up @@ -1751,6 +1753,7 @@ def __insert_lock_idx(
"""
try:
data = json.loads(data_str)
LockDataMessage.model_validate(data)
except Exception:
data = {}
lock = IDXLock()
Expand Down Expand Up @@ -1797,6 +1800,7 @@ def __insert_unlock_idx(
"""
try:
data = json.loads(data_str)
UnlockDataMessage.model_validate(data)
except:
data = {}
unlock = IDXUnlock()
Expand Down
4 changes: 4 additions & 0 deletions batch/indexer_Position_Share.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@
IDXPositionShareBlockNumber,
IDXUnlock,
Listing,
LockDataMessage,
UnlockDataMessage,
)
from app.model.schema.base import TokenType
from app.utils.asyncio_utils import SemaphoreTaskGroup
Expand Down Expand Up @@ -1751,6 +1753,7 @@ def __insert_lock_idx(
"""
try:
data = json.loads(data_str)
LockDataMessage.model_validate(data)
except Exception:
data = {}
lock = IDXLock()
Expand Down Expand Up @@ -1797,6 +1800,7 @@ def __insert_unlock_idx(
"""
try:
data = json.loads(data_str)
UnlockDataMessage.model_validate(data)
except:
data = {}
unlock = IDXUnlock()
Expand Down
4 changes: 2 additions & 2 deletions batch/indexer_Transfer.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,11 @@
from app.database import BatchAsyncSessionLocal
from app.errors import ServiceUnavailable
from app.model.db import (
DataMessage,
IDXTransfer,
IDXTransferBlockNumber,
IDXTransferSourceEventType,
Listing,
TransferDataMessage,
)
from app.model.schema.base import TokenType
from app.utils.web3_utils import AsyncWeb3Wrapper
Expand Down Expand Up @@ -183,7 +183,7 @@ def __insert_idx(
if data_str is not None:
try:
data = json.loads(data_str)
validated_data = DataMessage(**data)
validated_data = TransferDataMessage(**data)
message = validated_data.message
except ValidationError:
data = {}
Expand Down
47 changes: 47 additions & 0 deletions migrations/versions/819325835c3d_v25_9_0_feature_1657.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
"""v25_9_0_feature_1657

Revision ID: 819325835c3d
Revises: 9a28ed8d4afd
Create Date: 2025-07-23 18:08:21.277260

"""

from alembic import op
import sqlalchemy as sa
from sqlalchemy import update, cast, String


from app.database import get_db_schema
from app.model.db import IDXTransfer, IDXLock, IDXUnlock

# revision identifiers, used by Alembic.
revision = "819325835c3d"
down_revision = "9a28ed8d4afd"
branch_labels = None
depends_on = None


def upgrade():
connection = op.get_bind()

op.get_bind().execute(
update(IDXTransfer)
.values(message=None, data={})
.where(IDXTransfer.message == "inheritance")
)
op.get_bind().execute(
update(IDXLock)
.values(data={})
.where(cast(IDXLock.data, String).like(f"%inheritance%"))
)
op.get_bind().execute(
update(IDXUnlock)
.values(data={})
.where(cast(IDXUnlock.data, String).like(f"%inheritance%"))
)


def downgrade():
connection = op.get_bind()

pass
Loading
Loading