From 8f70ac52201feab7cce05f227080b849fb79b4de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E5=BF=B5?= Date: Fri, 7 Aug 2026 16:20:18 +0800 Subject: [PATCH] =?UTF-8?q?feat(db):=20phone=5Fcall.record=5Fmedia=5Fhash?= =?UTF-8?q?=20=E5=88=97=20+=20=E8=BF=81=E7=A7=BB=EF=BC=88=E5=BD=95?= =?UTF-8?q?=E9=9F=B3=E6=9C=AC=E5=9C=B0=E5=8C=96=20FK=E2=86=92Media?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude --- yunke-server/app/db/models.py | 5 ++++ ...4f1d2a9e6b_phone_call_record_media_hash.py | 30 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 yunke-server/migrations/versions/8c4f1d2a9e6b_phone_call_record_media_hash.py diff --git a/yunke-server/app/db/models.py b/yunke-server/app/db/models.py index 644e90e..e2c34fa 100644 --- a/yunke-server/app/db/models.py +++ b/yunke-server/app/db/models.py @@ -456,6 +456,11 @@ class PhoneCall(Base): sim_number: Mapped[str | None] = mapped_column(String(64), nullable=True) imei: Mapped[str | None] = mapped_column(String(128), nullable=True) record_file: Mapped[str | None] = mapped_column(String(1024), nullable=True) + # sha256 media_hash of the localized recording blob (FK -> Media.media_hash); + # NULL until sync_call_recordings downloads it. Populated by the + # call_recordings sync pass; playback prefers /api/media/{this} over the + # OSS record_file URL. + record_media_hash: Mapped[str | None] = mapped_column(String(64), nullable=True) is_upload: Mapped[bool | None] = mapped_column(Boolean, nullable=True) download_count: Mapped[int | None] = mapped_column(Integer, nullable=True) ai_asr: Mapped[str | None] = mapped_column(Text, nullable=True) diff --git a/yunke-server/migrations/versions/8c4f1d2a9e6b_phone_call_record_media_hash.py b/yunke-server/migrations/versions/8c4f1d2a9e6b_phone_call_record_media_hash.py new file mode 100644 index 0000000..4829700 --- /dev/null +++ b/yunke-server/migrations/versions/8c4f1d2a9e6b_phone_call_record_media_hash.py @@ -0,0 +1,30 @@ +"""phone_call record_media_hash + +Revision ID: 8c4f1d2a9e6b +Revises: 3892dbfab839 +Create Date: 2026-08-07 00:00:00.000000 + +""" +from collections.abc import Sequence + +import sqlalchemy as sa +from alembic import op + + +# revision identifiers, used by Alembic. +revision: str = '8c4f1d2a9e6b' +down_revision: str | Sequence[str] | None = '3892dbfab839' +branch_labels: str | Sequence[str] | None = None +depends_on: str | Sequence[str] | None = None + + +def upgrade() -> None: + """Upgrade schema.""" + with op.batch_alter_table('phone_call', schema=None) as batch_op: + batch_op.add_column(sa.Column('record_media_hash', sa.String(length=64), nullable=True)) + + +def downgrade() -> None: + """Downgrade schema.""" + with op.batch_alter_table('phone_call', schema=None) as batch_op: + batch_op.drop_column('record_media_hash')