From beae3ac6791f8b5b8a1d2a032e07902c84d32769 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o?= Date: Wed, 24 Sep 2025 12:07:37 +0200 Subject: [PATCH 1/2] add new tables --- .../versions/e354666f951d_inferred_user.py | 72 +++++++++++++++++++ welearn_datastack/data/db_models.py | 59 +++++++++++++++ 2 files changed, 131 insertions(+) create mode 100644 alembic/versions/e354666f951d_inferred_user.py diff --git a/alembic/versions/e354666f951d_inferred_user.py b/alembic/versions/e354666f951d_inferred_user.py new file mode 100644 index 0000000..909712d --- /dev/null +++ b/alembic/versions/e354666f951d_inferred_user.py @@ -0,0 +1,72 @@ +"""inferred_user + +Revision ID: e354666f951d +Revises: 89920abb7ff8 +Create Date: 2025-09-24 12:05:19.794659 + +""" + +from typing import Sequence, Union + +import sqlalchemy as sa +from sqlalchemy.dialects import postgresql + +from alembic import op + +# revision identifiers, used by Alembic. +revision: str = "e354666f951d" +down_revision: Union[str, None] = "89920abb7ff8" +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_table( + "inferred_user", + sa.Column("id", sa.Uuid(), server_default="gen_random_uuid()", nullable=False), + sa.Column( + "created_at", postgresql.TIMESTAMP(), server_default="NOW()", nullable=False + ), + sa.PrimaryKeyConstraint("id"), + schema="user_related", + ) + op.create_table( + "session", + sa.Column("id", sa.Uuid(), server_default="gen_random_uuid()", nullable=False), + sa.Column("inferred_user_id", sa.Uuid(), nullable=False), + sa.Column( + "created_at", postgresql.TIMESTAMP(), server_default="NOW()", nullable=False + ), + sa.Column("end_at", postgresql.TIMESTAMP(), nullable=False), + sa.Column("host", sa.String(), nullable=True), + sa.ForeignKeyConstraint( + ["inferred_user_id"], + ["user_related.inferred_user.id"], + ), + sa.PrimaryKeyConstraint("id"), + schema="user_related", + ) + op.create_table( + "endpoint_request", + sa.Column("id", sa.Uuid(), server_default="gen_random_uuid()", nullable=False), + sa.Column("session_id", sa.Uuid(), nullable=False), + sa.Column("endpoint_name", sa.String(), nullable=False), + sa.Column("http_code", sa.Integer(), nullable=False), + sa.Column("message", sa.String(), nullable=True), + sa.Column( + "created_at", postgresql.TIMESTAMP(), server_default="NOW()", nullable=False + ), + sa.ForeignKeyConstraint( + ["session_id"], + ["user_related.session.id"], + ), + sa.PrimaryKeyConstraint("id"), + schema="user_related", + ) + + +def downgrade() -> None: + op.drop_table("endpoint_request", schema="user_related") + op.drop_table("session", schema="user_related") + op.drop_table("inferred_user", schema="user_related") diff --git a/welearn_datastack/data/db_models.py b/welearn_datastack/data/db_models.py index 7b4a1ea..e917cc4 100644 --- a/welearn_datastack/data/db_models.py +++ b/welearn_datastack/data/db_models.py @@ -619,3 +619,62 @@ class APIKeyManagement(Base): server_default="NOW()", onupdate=func.localtimestamp(), ) + + +class Session(Base): + __tablename__ = "session" + __table_args__ = {"schema": "user_related"} + id: Mapped[UUID] = mapped_column( + types.Uuid, primary_key=True, nullable=False, server_default="gen_random_uuid()" + ) + inferred_user_id: Mapped[UUID] = mapped_column( + types.Uuid, + ForeignKey("user_related.inferred_user.id"), + nullable=False, + ) + created_at: Mapped[datetime] = mapped_column( + TIMESTAMP(timezone=False), + nullable=False, + default=func.localtimestamp(), + server_default="NOW()", + ) + end_at: Mapped[datetime] = mapped_column(TIMESTAMP(timezone=False), nullable=False) + host: Mapped[str | None] + user = relationship("InferredUser", foreign_keys=[inferred_user_id]) + + +class InferredUser(Base): + __tablename__ = "inferred_user" + __table_args__ = {"schema": "user_related"} + id: Mapped[UUID] = mapped_column( + types.Uuid, primary_key=True, nullable=False, server_default="gen_random_uuid()" + ) + created_at: Mapped[datetime] = mapped_column( + TIMESTAMP(timezone=False), + nullable=False, + default=func.localtimestamp(), + server_default="NOW()", + ) + + +class EndpointRequest(Base): + __tablename__ = "endpoint_request" + __table_args__ = {"schema": "user_related"} + id: Mapped[UUID] = mapped_column( + types.Uuid, primary_key=True, nullable=False, server_default="gen_random_uuid()" + ) + session_id: Mapped[UUID] = mapped_column( + types.Uuid, + ForeignKey("user_related.session.id"), + nullable=False, + ) + endpoint_name: Mapped[str] + http_code: Mapped[int] + message: Mapped[str | None] + created_at: Mapped[datetime] = mapped_column( + TIMESTAMP(timezone=False), + nullable=False, + default=func.localtimestamp(), + server_default="NOW()", + ) + session = relationship("Session", foreign_keys=[session_id]) From aba2451cdbe54cfcb40f2673c48b7d1f0950a6df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o?= Date: Wed, 24 Sep 2025 12:10:25 +0200 Subject: [PATCH 2/2] modify server default method --- .../versions/e354666f951d_inferred_user.py | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/alembic/versions/e354666f951d_inferred_user.py b/alembic/versions/e354666f951d_inferred_user.py index 909712d..0cfabf2 100644 --- a/alembic/versions/e354666f951d_inferred_user.py +++ b/alembic/versions/e354666f951d_inferred_user.py @@ -8,6 +8,7 @@ from typing import Sequence, Union +import sqlalchemy import sqlalchemy as sa from sqlalchemy.dialects import postgresql @@ -24,7 +25,12 @@ def upgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### op.create_table( "inferred_user", - sa.Column("id", sa.Uuid(), server_default="gen_random_uuid()", nullable=False), + sa.Column( + "id", + sa.Uuid(), + server_default=sqlalchemy.func.gen_random_uuid(), + nullable=False, + ), sa.Column( "created_at", postgresql.TIMESTAMP(), server_default="NOW()", nullable=False ), @@ -33,7 +39,12 @@ def upgrade() -> None: ) op.create_table( "session", - sa.Column("id", sa.Uuid(), server_default="gen_random_uuid()", nullable=False), + sa.Column( + "id", + sa.Uuid(), + server_default=sqlalchemy.func.gen_random_uuid(), + nullable=False, + ), sa.Column("inferred_user_id", sa.Uuid(), nullable=False), sa.Column( "created_at", postgresql.TIMESTAMP(), server_default="NOW()", nullable=False @@ -49,7 +60,12 @@ def upgrade() -> None: ) op.create_table( "endpoint_request", - sa.Column("id", sa.Uuid(), server_default="gen_random_uuid()", nullable=False), + sa.Column( + "id", + sa.Uuid(), + server_default=sqlalchemy.func.gen_random_uuid(), + nullable=False, + ), sa.Column("session_id", sa.Uuid(), nullable=False), sa.Column("endpoint_name", sa.String(), nullable=False), sa.Column("http_code", sa.Integer(), nullable=False),