feat(db): phone_call.record_media_hash 列 + 迁移(录音本地化 FK→Media)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -456,6 +456,11 @@ class PhoneCall(Base):
|
|||||||
sim_number: Mapped[str | None] = mapped_column(String(64), nullable=True)
|
sim_number: Mapped[str | None] = mapped_column(String(64), nullable=True)
|
||||||
imei: Mapped[str | None] = mapped_column(String(128), nullable=True)
|
imei: Mapped[str | None] = mapped_column(String(128), nullable=True)
|
||||||
record_file: Mapped[str | None] = mapped_column(String(1024), 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)
|
is_upload: Mapped[bool | None] = mapped_column(Boolean, nullable=True)
|
||||||
download_count: Mapped[int | None] = mapped_column(Integer, nullable=True)
|
download_count: Mapped[int | None] = mapped_column(Integer, nullable=True)
|
||||||
ai_asr: Mapped[str | None] = mapped_column(Text, nullable=True)
|
ai_asr: Mapped[str | None] = mapped_column(Text, nullable=True)
|
||||||
|
|||||||
@@ -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')
|
||||||
Reference in New Issue
Block a user