[+] update payloads.models

This commit is contained in:
Siarhei Siniak 2025-07-18 09:51:05 +03:00
parent cfdd6b72f0
commit 0ee9e87b7f

@ -1,5 +1,6 @@
import datetime import datetime
import decimal import decimal
import json
from sqlalchemy.orm import ( from sqlalchemy.orm import (
mapped_column, mapped_column,
@ -13,6 +14,7 @@ from sqlalchemy import (
Numeric, Numeric,
DateTime, DateTime,
UniqueConstraint, UniqueConstraint,
JSON,
) )
from typing import (Optional,) from typing import (Optional,)
@ -20,44 +22,25 @@ from typing import (Optional,)
class Base(DeclarativeBase): class Base(DeclarativeBase):
pass pass
class Market(Base): class Payload(Base):
__tablename__ = 'tickers_market' __tablename__ = 'payloads_payload'
id: Mapped[int] = mapped_column(primary_key=True) id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(32)) output: Mapped[list[str]] = mapped_column(JSON())
list_1: Mapped[list[str]] = mapped_column(JSON())
tickers: Mapped[list['Ticker']] = relationship( list_2: Mapped[list[str]] = mapped_column(JSON())
back_populates='market', input_hash: Mapped[str] = mapped_column()
)
def __repr__(self) -> str:
return f"Market(id={self.id!r}, name={self.name!r})"
class Ticker(Base):
__tablename__ = 'tickers_ticker'
id: Mapped[int] = mapped_column(ForeignKey(
'tickers_market.id',
ondelete='CASCADE',
))
market: Mapped['Market'] = relationship(
back_populates='tickers'
)
timestamp: Mapped[datetime.datetime] = mapped_column(
DateTime(timezone=True,)
)
value: Mapped[decimal.Decimal] = mapped_column(Numeric(
precision=32, scale=6,
))
__table_args__ = ( __table_args__ = (
UniqueConstraint('id', 'timestamp'), UniqueConstraint('input_hash'),
)
__mapper_args__ = dict(
primary_key=('id', 'timestamp',)
) )
def __repr__(self) -> str: def __repr__(self) -> str:
return f"Ticker(id={self.id!r}, timestamp={self.timestamp!r}, value={self.value!r})" return json.dumps(dict(
model=str(type(self)),
id=self.id,
output=self.output,
list_1=self.list_1,
list_2=self.list_2,
input_hash=self.input_hash,
))