[+] add Ticker table

This commit is contained in:
Siarhei Siniak 2025-07-07 10:33:44 +03:00
parent 3f1e8c57ac
commit 60ef0e386d
3 changed files with 71 additions and 1 deletions

@ -8,6 +8,8 @@ from sqlalchemy.ext.asyncio import async_engine_from_config
from sqlalchemy import engine_from_config from sqlalchemy import engine_from_config
from sqlalchemy import pool from sqlalchemy import pool
from sqlalchemy.engine.base import Connection
from alembic import context from alembic import context
from online.fxreader.pr34.test_task_2025_06_30_v1.tickers.settings import Settings from online.fxreader.pr34.test_task_2025_06_30_v1.tickers.settings import Settings
@ -47,7 +49,9 @@ target_metadata = Base.metadata
# ... etc. # ... etc.
def do_run_migrations(connection): def do_run_migrations(
connection: Connection,
):
context.configure(connection=connection, target_metadata=target_metadata) context.configure(connection=connection, target_metadata=target_metadata)
with context.begin_transaction(): with context.begin_transaction():

@ -0,0 +1,38 @@
"""add Ticker table
Revision ID: eb63f793db3a
Revises: 335b4c4f052c
Create Date: 2025-07-07 10:32:49.812738
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = 'eb63f793db3a'
down_revision: Union[str, Sequence[str], None] = '335b4c4f052c'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
"""Upgrade schema."""
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('tickers_ticker',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('timestamp', sa.DateTime(), nullable=False),
sa.Column('value', sa.Numeric(precision=32, scale=6), nullable=False),
sa.ForeignKeyConstraint(['id'], ['tickers_market.id'], ondelete='CASCADE'),
sa.UniqueConstraint('id', 'timestamp')
)
# ### end Alembic commands ###
def downgrade() -> None:
"""Downgrade schema."""
# ### commands auto generated by Alembic - please adjust! ###
op.drop_table('tickers_ticker')
# ### end Alembic commands ###

@ -1,3 +1,6 @@
import datetime
import decimal
from sqlalchemy.orm import ( from sqlalchemy.orm import (
mapped_column, mapped_column,
Mapped, Mapped,
@ -6,6 +9,8 @@ from sqlalchemy.orm import (
from sqlalchemy import ( from sqlalchemy import (
String, String,
ForeignKey, ForeignKey,
Numeric,
UniqueConstraint,
) )
from typing import (Optional,) from typing import (Optional,)
@ -21,3 +26,26 @@ class Market(Base):
def __repr__(self) -> str: def __repr__(self) -> str:
return f"Market(id={self.id!r}, name={self.name!r})" 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',
))
timestamp: Mapped[datetime.datetime] = mapped_column()
value: Mapped[decimal.Decimal] = mapped_column(Numeric(
precision=32, scale=6,
))
__table_args__ = (
UniqueConstraint('id', 'timestamp'),
)
__mapper_args__ = dict(
primary_key=('id', 'timestamp',)
)
def __repr__(self) -> str:
return f"Ticker(id={self.id!r}, timestamp={self.timestamp!r}, value={self.value!r})"