From f2fca50d5a826276b217138488cb6c47c3347663 Mon Sep 17 00:00:00 2001 From: Ilya Bikmeev Date: Thu, 20 Nov 2025 23:29:56 +0700 Subject: [PATCH] Add unique constraint for session id --- .../ingest-service/alembic/script.py.mako | 27 +++++++++++++++ ...dd_unique_constraint_to_call_session_id.py | 33 +++++++++++++++++++ .../ingest-service/app/models/call_event.py | 2 +- 3 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 services/ingest-service/alembic/script.py.mako create mode 100644 services/ingest-service/alembic/versions/9163176d6848_add_unique_constraint_to_call_session_id.py diff --git a/services/ingest-service/alembic/script.py.mako b/services/ingest-service/alembic/script.py.mako new file mode 100644 index 0000000..a54b33d --- /dev/null +++ b/services/ingest-service/alembic/script.py.mako @@ -0,0 +1,27 @@ +"""${message} + +Revision ID: ${up_revision} +Revises: ${down_revision | comma,n} +Create Date: ${create_date} + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +${imports if imports else ""} + +# revision identifiers, used by Alembic. +revision: str = ${repr(up_revision)} +down_revision: Union[str, Sequence[str], None] = ${repr(down_revision)} +branch_labels: Union[str, Sequence[str], None] = ${repr(branch_labels)} +depends_on: Union[str, Sequence[str], None] = ${repr(depends_on)} + + +def upgrade() -> None: + ${upgrades if upgrades else "pass"} + + +def downgrade() -> None: + ${downgrades if downgrades else "pass"} + diff --git a/services/ingest-service/alembic/versions/9163176d6848_add_unique_constraint_to_call_session_id.py b/services/ingest-service/alembic/versions/9163176d6848_add_unique_constraint_to_call_session_id.py new file mode 100644 index 0000000..dbaed93 --- /dev/null +++ b/services/ingest-service/alembic/versions/9163176d6848_add_unique_constraint_to_call_session_id.py @@ -0,0 +1,33 @@ +"""add_unique_constraint_to_call_session_id + +Revision ID: 9163176d6848 +Revises: a7e5c5ef6bc1 +Create Date: 2025-11-20 23:28:40.770696 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = '9163176d6848' +down_revision: Union[str, Sequence[str], None] = 'a7e5c5ef6bc1' +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.drop_index(op.f('ix_call_events_call_session_id'), table_name='call_events') + op.create_index(op.f('ix_call_events_call_session_id'), 'call_events', ['call_session_id'], unique=True) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_index(op.f('ix_call_events_call_session_id'), table_name='call_events') + op.create_index(op.f('ix_call_events_call_session_id'), 'call_events', ['call_session_id'], unique=False) + # ### end Alembic commands ### + diff --git a/services/ingest-service/app/models/call_event.py b/services/ingest-service/app/models/call_event.py index a27c60c..be2c0f3 100644 --- a/services/ingest-service/app/models/call_event.py +++ b/services/ingest-service/app/models/call_event.py @@ -7,7 +7,7 @@ class CallEvent(Base): __tablename__ = "call_events" id = Column(PG_UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, index=True) - call_session_id = Column(BigInteger, nullable=False, index=True) + call_session_id = Column(BigInteger, nullable=False, unique=True, index=True) direction = Column(String, nullable=False) notification_mnemonic = Column(String, nullable=False) last_answered_employee_full_name = Column(String, nullable=True)