From e8cf50323cc23d0476435eadb3df440d3a7c9d7c Mon Sep 17 00:00:00 2001 From: petrCher <88943157+petrCher@users.noreply.github.com> Date: Thu, 27 Nov 2025 22:50:29 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D1=83=20=D0=BD=D0=B0?= =?UTF-8?q?=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=20JSON=20=D0=B2=20addit?= =?UTF-8?q?ional=5Fdata?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- marketing_api/models/db.py | 38 ++++++++++-------- marketing_api/routes/models.py | 2 +- ...b6371014e_new_version_sqlachemy_updates.py | 39 +++++++++++++++++++ 3 files changed, 62 insertions(+), 17 deletions(-) create mode 100644 migrations/versions/413b6371014e_new_version_sqlachemy_updates.py diff --git a/marketing_api/models/db.py b/marketing_api/models/db.py index 7415c0b..1a835c6 100644 --- a/marketing_api/models/db.py +++ b/marketing_api/models/db.py @@ -1,9 +1,13 @@ import enum from datetime import datetime -import sqlalchemy as sa -from sqlalchemy import Column -from sqlalchemy.orm import relationship +from sqlalchemy import ( + JSON, + DateTime, + Integer, + String, +) +from sqlalchemy.orm import Mapped, mapped_column, relationship from .base import Base @@ -16,12 +20,14 @@ class Actions(str, enum.Enum): class User(Base): - id = Column(sa.Integer, primary_key=True) - union_number = Column(sa.String, nullable=True) - user_agent = Column(sa.String, nullable=True) - auth_user_id = Column(sa.Integer, nullable=True) - modify_ts = Column(sa.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) - create_ts = Column(sa.DateTime, nullable=False, default=datetime.utcnow) + id: Mapped[int] = mapped_column(Integer, primary_key=True) + union_number: Mapped[str | None] = mapped_column(String, nullable=True) + user_agent: Mapped[str | None] = mapped_column(String, nullable=True) + auth_user_id: Mapped[int | None] = mapped_column(Integer, nullable=True) + modify_ts: Mapped[datetime] = mapped_column( + DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow + ) + create_ts: Mapped[datetime] = mapped_column(DateTime, nullable=False, default=datetime.utcnow) actions = relationship( "ActionsInfo", @@ -37,13 +43,13 @@ def __repr__(self): class ActionsInfo(Base): """Actions from user""" - id = Column(sa.Integer, primary_key=True) - user_id = Column(sa.Integer, nullable=True) - action = Column(sa.String, nullable=False) - path_from = Column(sa.String, nullable=True) - path_to = Column(sa.String, nullable=True) - additional_data = Column(sa.String, nullable=True) - create_ts = Column(sa.DateTime, nullable=False, default=datetime.utcnow) + id: Mapped[int] = mapped_column(Integer, primary_key=True) + user_id: Mapped[int | None] = mapped_column(Integer, nullable=True) + action: Mapped[str] = mapped_column(String, nullable=False) + path_from: Mapped[str | None] = mapped_column(String, nullable=True) + path_to: Mapped[str | None] = mapped_column(String, nullable=True) + additional_data: Mapped[dict | None] = mapped_column(JSON, nullable=True) + create_ts: Mapped[datetime] = mapped_column(DateTime, nullable=False, default=datetime.utcnow) user = relationship( User, primaryjoin="foreign(ActionsInfo.user_id)==User.id", uselist=False, back_populates="actions" diff --git a/marketing_api/routes/models.py b/marketing_api/routes/models.py index 4a0123b..df04ede 100644 --- a/marketing_api/routes/models.py +++ b/marketing_api/routes/models.py @@ -8,7 +8,7 @@ class Base(BaseModel): class ActionInfo(Base): user_id: int | None = None action: str - additional_data: str | None = None + additional_data: dict | None = None path_from: str | None = None path_to: str | None = None diff --git a/migrations/versions/413b6371014e_new_version_sqlachemy_updates.py b/migrations/versions/413b6371014e_new_version_sqlachemy_updates.py new file mode 100644 index 0000000..cdfe749 --- /dev/null +++ b/migrations/versions/413b6371014e_new_version_sqlachemy_updates.py @@ -0,0 +1,39 @@ +"""New version sqlachemy updates + +Revision ID: 413b6371014e +Revises: 0ea7185ac58b +Create Date: 2025-11-27 22:27:15.710601 + +""" + +import sqlalchemy as sa +from alembic import op + + +# revision identifiers, used by Alembic. +revision = '413b6371014e' +down_revision = '0ea7185ac58b' +branch_labels = None +depends_on = None + + +def upgrade(): + op.alter_column( + 'actions_info', + 'additional_data', + existing_type=sa.VARCHAR(), + type_=sa.JSON(), + existing_nullable=True, + postgresql_using='additional_data::json', + ) + + +def downgrade(): + op.alter_column( + 'actions_info', + 'additional_data', + existing_type=sa.JSON(), + type_=sa.VARCHAR(), + existing_nullable=True, + postgresql_using='additional_data::text', + ) From 19741eb8b0e6ad67f50fb68e621154f411f0fe4d Mon Sep 17 00:00:00 2001 From: petrCher <88943157+petrCher@users.noreply.github.com> Date: Sat, 29 Nov 2025 23:52:00 +0300 Subject: [PATCH 2/2] added json format to schemas --- marketing_api/routes/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/marketing_api/routes/models.py b/marketing_api/routes/models.py index df04ede..18f48b3 100644 --- a/marketing_api/routes/models.py +++ b/marketing_api/routes/models.py @@ -8,7 +8,7 @@ class Base(BaseModel): class ActionInfo(Base): user_id: int | None = None action: str - additional_data: dict | None = None + additional_data: dict | list[dict] | None = None path_from: str | None = None path_to: str | None = None