From 7d9c0c5a1c46a39a0740621e0552fed1ec18a67d Mon Sep 17 00:00:00 2001 From: tranphuc8a Date: Wed, 5 Nov 2025 01:00:04 +0700 Subject: [PATCH] update revision alembic --- .../0002_change_erole_bot_to_model.py | 74 +++++++++++++++++++ .../fastapi/alembic/versions/18af15ae8ac6_.py | 21 ------ .../fastapi/alembic/versions/52a8a35fd055_.py | 21 ------ .../application/usecases/gemini_usecase.py | 2 +- backend/fastapi/src/domain/enums/enums.py | 2 +- db/database.sql | 2 +- 6 files changed, 77 insertions(+), 45 deletions(-) create mode 100644 backend/fastapi/alembic/versions/0002_change_erole_bot_to_model.py delete mode 100644 backend/fastapi/alembic/versions/18af15ae8ac6_.py delete mode 100644 backend/fastapi/alembic/versions/52a8a35fd055_.py diff --git a/backend/fastapi/alembic/versions/0002_change_erole_bot_to_model.py b/backend/fastapi/alembic/versions/0002_change_erole_bot_to_model.py new file mode 100644 index 0000000..67d6a7a --- /dev/null +++ b/backend/fastapi/alembic/versions/0002_change_erole_bot_to_model.py @@ -0,0 +1,74 @@ +"""change erole 'bot' -> 'model' + +Revision ID: 0002_change_erole_bot_to_model +Revises: 0001_create_initial_tables +Create Date: 2025-11-05 00:00:00.000000 +""" +from alembic import op +import sqlalchemy as sa + +# revision identifiers, used by Alembic. +revision = '0002_change_erole_bot_to_model' +down_revision = '0001_create_initial_tables' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + bind = op.get_bind() + dialect = bind.dialect.name + + # First, update existing data from 'bot' to 'model' + try: + op.execute("""UPDATE messages SET role='model' WHERE role='bot'""") + except Exception: + # best-effort: continue if table doesn't exist or update fails + pass + + # Then alter the column enum definition depending on dialect + if dialect in ("mysql", "mysql+pymysql", "mysql+aiomysql"): + # MySQL: modify column to new ENUM + try: + op.execute(""" + ALTER TABLE messages + MODIFY COLUMN role ENUM('user','model') NOT NULL + """) + except Exception: + pass + else: + # For other DBs, attempt a generic ALTER using SQLAlchemy Enum + try: + op.alter_column('messages', 'role', + existing_type=sa.Enum('user', 'bot', name='erole'), + type_=sa.Enum('user', 'model', name='erole'), + existing_nullable=False) + except Exception: + pass + + +def downgrade() -> None: + bind = op.get_bind() + dialect = bind.dialect.name + + # revert values from 'model' back to 'bot' + try: + op.execute("""UPDATE messages SET role='bot' WHERE role='model'""") + except Exception: + pass + + if dialect in ("mysql", "mysql+pymysql", "mysql+aiomysql"): + try: + op.execute(""" + ALTER TABLE messages + MODIFY COLUMN role ENUM('user','bot') NOT NULL + """) + except Exception: + pass + else: + try: + op.alter_column('messages', 'role', + existing_type=sa.Enum('user', 'model', name='erole'), + type_=sa.Enum('user', 'bot', name='erole'), + existing_nullable=False) + except Exception: + pass diff --git a/backend/fastapi/alembic/versions/18af15ae8ac6_.py b/backend/fastapi/alembic/versions/18af15ae8ac6_.py deleted file mode 100644 index 30137d8..0000000 --- a/backend/fastapi/alembic/versions/18af15ae8ac6_.py +++ /dev/null @@ -1,21 +0,0 @@ -"""Alembic revision (generated). - -This revision file was generated by `alembic revision`. It was edited to remove -accidental template placeholders so the file is valid Python. -""" - -from alembic import op -import sqlalchemy as sa - -# revision identifiers, used by Alembic. -revision = '18af15ae8ac6' -down_revision = '52a8a35fd055' -branch_labels = None - - -def upgrade(): - pass - - -def downgrade(): - pass diff --git a/backend/fastapi/alembic/versions/52a8a35fd055_.py b/backend/fastapi/alembic/versions/52a8a35fd055_.py deleted file mode 100644 index 506a776..0000000 --- a/backend/fastapi/alembic/versions/52a8a35fd055_.py +++ /dev/null @@ -1,21 +0,0 @@ -"""Alembic revision (generated). - -This revision file was generated by `alembic revision`. It was edited to remove -accidental template placeholders so the file is valid Python. -""" - -from alembic import op -import sqlalchemy as sa - -# revision identifiers, used by Alembic. -revision = '52a8a35fd055' -down_revision = '0001_create_initial_tables' -branch_labels = None - - -def upgrade(): - pass - - -def downgrade(): - pass diff --git a/backend/fastapi/src/application/usecases/gemini_usecase.py b/backend/fastapi/src/application/usecases/gemini_usecase.py index 9a57dfb..9b41cac 100644 --- a/backend/fastapi/src/application/usecases/gemini_usecase.py +++ b/backend/fastapi/src/application/usecases/gemini_usecase.py @@ -51,7 +51,7 @@ async def _persist_assistant_message(self, conversation_id: Optional[str], text: msg = MessageDomain( id=generate_unique_id("msg"), conversation_id=conversation_id, - role="bot", + role="model", content=text, created_at=get_current_timestamp(), ) diff --git a/backend/fastapi/src/domain/enums/enums.py b/backend/fastapi/src/domain/enums/enums.py index 167995e..4da8491 100644 --- a/backend/fastapi/src/domain/enums/enums.py +++ b/backend/fastapi/src/domain/enums/enums.py @@ -38,7 +38,7 @@ def from_str(cls, value: Any) -> "ESortOrder": class ERole(str, Enum): USER = "user" - BOT = "bot" + MODEL = "model" @classmethod def from_str(cls, value: Any) -> "ERole": diff --git a/db/database.sql b/db/database.sql index 85b9397..f7c6e3c 100644 --- a/db/database.sql +++ b/db/database.sql @@ -18,7 +18,7 @@ CREATE TABLE IF NOT EXISTS conversations ( CREATE TABLE IF NOT EXISTS messages ( id CHAR(255) NOT NULL PRIMARY KEY, conversation_id CHAR(255) NOT NULL, - role ENUM('user','bot') NOT NULL, + role ENUM('user','model') NOT NULL, content LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, -- Nội dung lớn, hỗ trợ emoji, HTML, markdown created_at INT DEFAULT CURRENT_TIMESTAMP, INDEX idx_conversation_id (conversation_id),