diff --git a/backend/README.md b/backend/README.md index 17210a2f2..0bdbd8c75 100644 --- a/backend/README.md +++ b/backend/README.md @@ -138,9 +138,11 @@ $ docker compose exec backend bash * After changing a model (for example, adding a column), inside the container, create a revision, e.g.: ```console -$ alembic revision --autogenerate -m "Add column last_name to User model" +$ alembic revision --autogenerate -m "Add column last_name to User model" --rev-id 040 ``` +* The rev-id should always be the latest existing revision ID plus 1. + * Commit to the git repository the files generated in the alembic directory. * After creating the revision, run the migration in the database (this is what will actually change the database): diff --git a/backend/alembic.ini b/backend/alembic.ini index 24841c2bf..c29322a9a 100755 --- a/backend/alembic.ini +++ b/backend/alembic.ini @@ -4,6 +4,7 @@ # path to migration scripts script_location = app/alembic + # template used to generate migration files # file_template = %%(rev)s_%%(slug)s diff --git a/backend/app/alembic/migrate_api_key.py b/backend/app/alembic/migrate_api_key.py deleted file mode 100644 index ab48901db..000000000 --- a/backend/app/alembic/migrate_api_key.py +++ /dev/null @@ -1,198 +0,0 @@ -""" -Migration script to convert encrypted API keys to hashed format. - -This script: -1. Decrypts existing API keys from the old encrypted format -2. Extracts the prefix and secret from the decrypted keys -3. Hashes the secret using bcrypt -4. Generates UUID4 for the new primary key -5. Stores the prefix, hash, and UUID in the new format for backward compatibility - -The format is: "ApiKey {12-char-prefix}{31-char-secret}" (total 43 chars) -""" - -import logging -import uuid -from sqlalchemy.orm import Session -from sqlalchemy import text -from passlib.context import CryptContext - -from app.core.security import decrypt_api_key - -logger = logging.getLogger(__name__) - -# Use the same hash algorithm as APIKeyManager -pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") - -# Old format constants -OLD_PREFIX_NAME = "ApiKey " -OLD_PREFIX_LENGTH = 12 -OLD_SECRET_LENGTH = 31 -OLD_KEY_LENGTH = 43 # Total: 12 + 31 - - -def migrate_api_keys(session: Session, generate_uuid: bool = False) -> None: - """ - Migrate all existing API keys from encrypted format to hashed format. - - This function: - 1. Fetches all API keys with the old 'key' column - 2. Decrypts each key - 3. Extracts prefix and secret - 4. Hashes the secret - 5. Generates UUID4 for new_id column if generate_uuid is True - 6. Updates key_prefix, key_hash, and optionally new_id columns - - Args: - session: SQLAlchemy database session - generate_uuid: Whether to generate and set UUID for new_id column - """ - logger.info( - "[migrate_api_keys] Starting API key migration from encrypted to hashed format" - ) - - try: - # Fetch all API keys that have the old 'key' column - result = session.execute( - text("SELECT id, key FROM apikey WHERE key IS NOT NULL") - ) - api_keys = result.fetchall() - - if not api_keys: - logger.info("[migrate_api_keys] No API keys found to migrate") - return - - logger.info(f"[migrate_api_keys] Found {len(api_keys)} API keys to migrate") - - migrated_count = 0 - failed_count = 0 - - for row in api_keys: - key_id = row[0] - encrypted_key = row[1] - - try: - # Decrypt the API key - decrypted_key = decrypt_api_key(encrypted_key) - - # Validate format - if not decrypted_key.startswith(OLD_PREFIX_NAME): - logger.error( - f"[migrate_api_keys] Invalid key format for ID {key_id}: " - f"does not start with '{OLD_PREFIX_NAME}'" - ) - failed_count += 1 - continue - - # Extract the key part (after "ApiKey ") - key_part = decrypted_key[len(OLD_PREFIX_NAME) :] - - if len(key_part) != OLD_KEY_LENGTH: - logger.error( - f"[migrate_api_keys] Invalid key length for ID {key_id}: " - f"expected {OLD_KEY_LENGTH}, got {len(key_part)}" - ) - failed_count += 1 - continue - - # Extract prefix and secret - key_prefix = key_part[:OLD_PREFIX_LENGTH] - secret_key = key_part[OLD_PREFIX_LENGTH:] - - # Hash the secret - key_hash = pwd_context.hash(secret_key) - - # Generate UUID if requested - if generate_uuid: - new_uuid = uuid.uuid4() - # Update the record with prefix, hash, and UUID - session.execute( - text( - "UPDATE apikey SET key_prefix = :prefix, key_hash = :hash, new_id = :new_id " - "WHERE id = :id" - ), - { - "prefix": key_prefix, - "hash": key_hash, - "new_id": new_uuid, - "id": key_id, - }, - ) - else: - # Update the record with prefix and hash only - session.execute( - text( - "UPDATE apikey SET key_prefix = :prefix, key_hash = :hash " - "WHERE id = :id" - ), - {"prefix": key_prefix, "hash": key_hash, "id": key_id}, - ) - - migrated_count += 1 - logger.info( - f"[migrate_api_keys] Successfully migrated key ID {key_id} " - f"with prefix {key_prefix[:4]}..." - ) - - except Exception as e: - logger.error( - f"[migrate_api_keys] Failed to migrate key ID {key_id}: {str(e)}", - exc_info=True, - ) - failed_count += 1 - continue - - logger.info( - f"[migrate_api_keys] Migration completed: " - f"{migrated_count} successful, {failed_count} failed" - ) - - except Exception as e: - logger.error( - f"[migrate_api_keys] Fatal error during migration: {str(e)}", exc_info=True - ) - raise - - -def verify_migration(session: Session) -> bool: - """ - Verify that all API keys have been migrated successfully. - - Args: - session: SQLAlchemy database session - - Returns: - bool: True if all keys are migrated, False otherwise - """ - try: - # Check for any keys with NULL key_prefix or key_hash - result = session.execute( - text( - "SELECT COUNT(*) FROM apikey " - "WHERE key_prefix IS NULL OR key_hash IS NULL" - ) - ) - null_count = result.scalar() - - if null_count > 0: - logger.warning( - f"[verify_migration] Found {null_count} API keys with NULL " - "key_prefix or key_hash" - ) - return False - - # Check total count - result = session.execute(text("SELECT COUNT(*) FROM apikey")) - total_count = result.scalar() - - logger.info( - f"[verify_migration] All {total_count} API keys have been " - "successfully migrated" - ) - return True - - except Exception as e: - logger.error( - f"[verify_migration] Error verifying migration: {str(e)}", exc_info=True - ) - return False diff --git a/backend/app/alembic/versions/e2412789c190_initialize_models.py b/backend/app/alembic/versions/001_initialize_models.py similarity index 96% rename from backend/app/alembic/versions/e2412789c190_initialize_models.py rename to backend/app/alembic/versions/001_initialize_models.py index 9fa1784c0..8edba7727 100644 --- a/backend/app/alembic/versions/e2412789c190_initialize_models.py +++ b/backend/app/alembic/versions/001_initialize_models.py @@ -1,6 +1,6 @@ """Initialize models -Revision ID: e2412789c190 +Revision ID: 001 Revises: Create Date: 2023-11-24 22:55:43.195942 @@ -10,7 +10,7 @@ from alembic import op # revision identifiers, used by Alembic. -revision = "e2412789c190" +revision = "001" down_revision = None branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/9c0a54914c78_add_max_length_for_string_varchar_.py b/backend/app/alembic/versions/002_add_max_length_for_string_varchar_.py similarity index 95% rename from backend/app/alembic/versions/9c0a54914c78_add_max_length_for_string_varchar_.py rename to backend/app/alembic/versions/002_add_max_length_for_string_varchar_.py index f84a56520..175c248d9 100755 --- a/backend/app/alembic/versions/9c0a54914c78_add_max_length_for_string_varchar_.py +++ b/backend/app/alembic/versions/002_add_max_length_for_string_varchar_.py @@ -1,7 +1,7 @@ """Add max length for string(varchar) fields in User and Items models -Revision ID: 9c0a54914c78 -Revises: e2412789c190 +Revision ID: 002 +Revises: 001 Create Date: 2024-06-17 14:42:44.639457 """ @@ -11,8 +11,8 @@ # revision identifiers, used by Alembic. -revision = "9c0a54914c78" -down_revision = "e2412789c190" +revision = "002" +down_revision = "001" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/d98dd8ec85a3_edit_replace_id_integers_in_all_models_.py b/backend/app/alembic/versions/003_edit_replace_id_integers_in_all_models_.py similarity index 97% rename from backend/app/alembic/versions/d98dd8ec85a3_edit_replace_id_integers_in_all_models_.py rename to backend/app/alembic/versions/003_edit_replace_id_integers_in_all_models_.py index 8e3196958..997dedd8c 100755 --- a/backend/app/alembic/versions/d98dd8ec85a3_edit_replace_id_integers_in_all_models_.py +++ b/backend/app/alembic/versions/003_edit_replace_id_integers_in_all_models_.py @@ -1,7 +1,7 @@ """Edit replace id integers in all models to use UUID instead -Revision ID: d98dd8ec85a3 -Revises: 9c0a54914c78 +Revision ID: 003 +Revises: 002 Create Date: 2024-07-19 04:08:04.000976 """ @@ -12,8 +12,8 @@ # revision identifiers, used by Alembic. -revision = "d98dd8ec85a3" -down_revision = "9c0a54914c78" +revision = "003" +down_revision = "002" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/1a31ce608336_add_cascade_delete_relationships.py b/backend/app/alembic/versions/004_add_cascade_delete_relationships.py similarity index 90% rename from backend/app/alembic/versions/1a31ce608336_add_cascade_delete_relationships.py rename to backend/app/alembic/versions/004_add_cascade_delete_relationships.py index e4cdcf35e..1f718228a 100644 --- a/backend/app/alembic/versions/1a31ce608336_add_cascade_delete_relationships.py +++ b/backend/app/alembic/versions/004_add_cascade_delete_relationships.py @@ -1,7 +1,7 @@ """Add cascade delete relationships -Revision ID: 1a31ce608336 -Revises: d98dd8ec85a3 +Revision ID: 004 +Revises: 003 Create Date: 2024-07-31 22:24:34.447891 """ @@ -11,8 +11,8 @@ # revision identifiers, used by Alembic. -revision = "1a31ce608336" -down_revision = "d98dd8ec85a3" +revision = "004" +down_revision = "003" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/99f4fc325617_add_organization_project_setup.py b/backend/app/alembic/versions/005_add_organization_project_setup.py similarity index 96% rename from backend/app/alembic/versions/99f4fc325617_add_organization_project_setup.py rename to backend/app/alembic/versions/005_add_organization_project_setup.py index 6fe3cadd2..fd53b8372 100644 --- a/backend/app/alembic/versions/99f4fc325617_add_organization_project_setup.py +++ b/backend/app/alembic/versions/005_add_organization_project_setup.py @@ -1,7 +1,7 @@ """add organization project setup -Revision ID: 99f4fc325617 -Revises: 1a31ce608336 +Revision ID: 005 +Revises: 004 Create Date: 2025-03-21 20:51:00.759926 """ @@ -11,8 +11,8 @@ # revision identifiers, used by Alembic. -revision = "99f4fc325617" -down_revision = "1a31ce608336" +revision = "005" +down_revision = "004" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/0f205e3779ee_add_api_key_table.py b/backend/app/alembic/versions/006_add_api_key_table.py similarity index 93% rename from backend/app/alembic/versions/0f205e3779ee_add_api_key_table.py rename to backend/app/alembic/versions/006_add_api_key_table.py index b62314076..7ac74d52a 100644 --- a/backend/app/alembic/versions/0f205e3779ee_add_api_key_table.py +++ b/backend/app/alembic/versions/006_add_api_key_table.py @@ -1,7 +1,7 @@ """add api key table -Revision ID: 0f205e3779ee -Revises: 99f4fc325617 +Revision ID: 006 +Revises: 005 Create Date: 2025-03-21 23:43:34.181704 """ @@ -11,8 +11,8 @@ # revision identifiers, used by Alembic. -revision = "0f205e3779ee" -down_revision = "99f4fc325617" +revision = "006" +down_revision = "005" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/c43313eca57d_add_document_tables.py b/backend/app/alembic/versions/007_add_document_tables.py similarity index 91% rename from backend/app/alembic/versions/c43313eca57d_add_document_tables.py rename to backend/app/alembic/versions/007_add_document_tables.py index 86adbb1ce..b9381636f 100644 --- a/backend/app/alembic/versions/c43313eca57d_add_document_tables.py +++ b/backend/app/alembic/versions/007_add_document_tables.py @@ -1,7 +1,7 @@ """Add document tables -Revision ID: c43313eca57d -Revises: 0f205e3779ee +Revision ID: 007 +Revises: 006 Create Date: 2025-04-07 10:04:10.414165 """ @@ -11,8 +11,8 @@ # revision identifiers, used by Alembic. -revision = "c43313eca57d" -down_revision = "0f205e3779ee" +revision = "007" +down_revision = "006" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/8d7a05fd0ad4_item_table_drop.py b/backend/app/alembic/versions/008_item_table_drop.py similarity index 91% rename from backend/app/alembic/versions/8d7a05fd0ad4_item_table_drop.py rename to backend/app/alembic/versions/008_item_table_drop.py index db9686a5b..dea567d22 100644 --- a/backend/app/alembic/versions/8d7a05fd0ad4_item_table_drop.py +++ b/backend/app/alembic/versions/008_item_table_drop.py @@ -1,7 +1,7 @@ """item table drop -Revision ID: 8d7a05fd0ad4 -Revises: c43313eca57d +Revision ID: 008 +Revises: 007 Create Date: 2025-04-08 15:26:46.613516 """ @@ -11,8 +11,8 @@ # revision identifiers, used by Alembic. -revision = "8d7a05fd0ad4" -down_revision = "c43313eca57d" +revision = "008" +down_revision = "007" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/543f97951bd0_add_credential_table.py b/backend/app/alembic/versions/009_add_credential_table.py similarity index 90% rename from backend/app/alembic/versions/543f97951bd0_add_credential_table.py rename to backend/app/alembic/versions/009_add_credential_table.py index 7b04421c7..5ced9043c 100644 --- a/backend/app/alembic/versions/543f97951bd0_add_credential_table.py +++ b/backend/app/alembic/versions/009_add_credential_table.py @@ -1,7 +1,7 @@ """add credential table -Revision ID: 543f97951bd0 -Revises: 8d7a05fd0ad4 +Revision ID: 009 +Revises: 008 Create Date: 2025-04-14 23:50:51.118373 """ @@ -11,8 +11,8 @@ # revision identifiers, used by Alembic. -revision = "543f97951bd0" -down_revision = "8d7a05fd0ad4" +revision = "009" +down_revision = "008" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/f23675767ed2_add_collection_tables.py b/backend/app/alembic/versions/010_add_collection_tables.py similarity index 93% rename from backend/app/alembic/versions/f23675767ed2_add_collection_tables.py rename to backend/app/alembic/versions/010_add_collection_tables.py index 82621bd87..aed78c723 100644 --- a/backend/app/alembic/versions/f23675767ed2_add_collection_tables.py +++ b/backend/app/alembic/versions/010_add_collection_tables.py @@ -1,7 +1,7 @@ """Add collection tables -Revision ID: f23675767ed2 -Revises: 543f97951bd0 +Revision ID: 010 +Revises: 009 Create Date: 2025-04-23 20:42:48.254463 """ @@ -11,8 +11,8 @@ # revision identifiers, used by Alembic. -revision = "f23675767ed2" -down_revision = "543f97951bd0" +revision = "010" +down_revision = "009" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/79e47bc3aac6_add_threads_table.py b/backend/app/alembic/versions/011_add_threads_table.py similarity index 95% rename from backend/app/alembic/versions/79e47bc3aac6_add_threads_table.py rename to backend/app/alembic/versions/011_add_threads_table.py index ea1fd6c19..a9332c104 100644 --- a/backend/app/alembic/versions/79e47bc3aac6_add_threads_table.py +++ b/backend/app/alembic/versions/011_add_threads_table.py @@ -1,7 +1,7 @@ """add threads table -Revision ID: 79e47bc3aac6 -Revises: f23675767ed2 +Revision ID: 011 +Revises: 010 Create Date: 2025-05-12 15:49:39.142806 """ @@ -11,8 +11,8 @@ # revision identifiers, used by Alembic. -revision = "79e47bc3aac6" -down_revision = "f23675767ed2" +revision = "011" +down_revision = "010" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/904ed70e7dab_added_provider_column_to_the_credential_.py b/backend/app/alembic/versions/012_added_provider_column_to_the_credential_.py similarity index 95% rename from backend/app/alembic/versions/904ed70e7dab_added_provider_column_to_the_credential_.py rename to backend/app/alembic/versions/012_added_provider_column_to_the_credential_.py index 0991fe3de..46069b4e0 100644 --- a/backend/app/alembic/versions/904ed70e7dab_added_provider_column_to_the_credential_.py +++ b/backend/app/alembic/versions/012_added_provider_column_to_the_credential_.py @@ -1,7 +1,7 @@ """Added provider column to the credential table -Revision ID: 904ed70e7dab -Revises: 79e47bc3aac6 +Revision ID: 012 +Revises: 011 Create Date: 2025-05-10 11:13:17.868238 """ @@ -10,8 +10,8 @@ import sqlmodel.sql.sqltypes -revision = "904ed70e7dab" -down_revision = "79e47bc3aac6" +revision = "012" +down_revision = "011" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/60b6c511a485_add_project_id_in_api_key_table.py b/backend/app/alembic/versions/013_add_project_id_in_api_key_table.py similarity index 92% rename from backend/app/alembic/versions/60b6c511a485_add_project_id_in_api_key_table.py rename to backend/app/alembic/versions/013_add_project_id_in_api_key_table.py index 2c172191d..63ce69514 100644 --- a/backend/app/alembic/versions/60b6c511a485_add_project_id_in_api_key_table.py +++ b/backend/app/alembic/versions/013_add_project_id_in_api_key_table.py @@ -1,7 +1,7 @@ """Add project_id in api_key table -Revision ID: 60b6c511a485 -Revises: 904ed70e7dab +Revision ID: 013 +Revises: 012 Create Date: 2025-06-10 13:22:59.947971 """ @@ -11,8 +11,8 @@ # revision identifiers, used by Alembic. -revision = "60b6c511a485" -down_revision = "904ed70e7dab" +revision = "013" +down_revision = "012" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/66abc97f3782_user_id_from_uuid_to_int.py b/backend/app/alembic/versions/014_user_id_from_uuid_to_int.py similarity index 97% rename from backend/app/alembic/versions/66abc97f3782_user_id_from_uuid_to_int.py rename to backend/app/alembic/versions/014_user_id_from_uuid_to_int.py index 0035b705b..10e0fbba7 100644 --- a/backend/app/alembic/versions/66abc97f3782_user_id_from_uuid_to_int.py +++ b/backend/app/alembic/versions/014_user_id_from_uuid_to_int.py @@ -1,7 +1,7 @@ """user_id from uuid to int -Revision ID: 66abc97f3782 -Revises: 60b6c511a485 +Revision ID: 014 +Revises: 013 Create Date: 2025-06-16 11:05:36.196795 """ @@ -11,8 +11,8 @@ # revision identifiers, used by Alembic. -revision = "66abc97f3782" -down_revision = "60b6c511a485" +revision = "014" +down_revision = "013" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/8e7dc5eab0b0_add_fk_constraint_to_user_id_columns.py b/backend/app/alembic/versions/015_add_fk_constraint_to_user_id_columns.py similarity index 94% rename from backend/app/alembic/versions/8e7dc5eab0b0_add_fk_constraint_to_user_id_columns.py rename to backend/app/alembic/versions/015_add_fk_constraint_to_user_id_columns.py index 09fe3ef99..4aab9faf4 100644 --- a/backend/app/alembic/versions/8e7dc5eab0b0_add_fk_constraint_to_user_id_columns.py +++ b/backend/app/alembic/versions/015_add_fk_constraint_to_user_id_columns.py @@ -1,7 +1,7 @@ """add fk constraint to user id columns -Revision ID: 8e7dc5eab0b0 -Revises: 66abc97f3782 +Revision ID: 015 +Revises: 014 Create Date: 2025-06-16 11:08:46.893642 """ @@ -11,8 +11,8 @@ # revision identifiers, used by Alembic. -revision = "8e7dc5eab0b0" -down_revision = "66abc97f3782" +revision = "015" +down_revision = "014" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/8eefcfedc409_create_assistant_table.py b/backend/app/alembic/versions/016_create_assistant_table.py similarity index 93% rename from backend/app/alembic/versions/8eefcfedc409_create_assistant_table.py rename to backend/app/alembic/versions/016_create_assistant_table.py index 6dad89272..055edf8fc 100644 --- a/backend/app/alembic/versions/8eefcfedc409_create_assistant_table.py +++ b/backend/app/alembic/versions/016_create_assistant_table.py @@ -1,7 +1,7 @@ """create assistant table -Revision ID: 8757b005d681 -Revises: 8e7dc5eab0b0 +Revision ID: 016 +Revises: 015 Create Date: 2025-06-16 13:40:10.447538 """ @@ -11,8 +11,8 @@ # revision identifiers, used by Alembic. -revision = "8757b005d681" -down_revision = "8e7dc5eab0b0" +revision = "016" +down_revision = "015" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/3389c67fdcb4_add_alter_columns_in_collections_table.py b/backend/app/alembic/versions/017_add_alter_columns_in_collections_table.py similarity index 95% rename from backend/app/alembic/versions/3389c67fdcb4_add_alter_columns_in_collections_table.py rename to backend/app/alembic/versions/017_add_alter_columns_in_collections_table.py index 9581de3ee..980e582a4 100644 --- a/backend/app/alembic/versions/3389c67fdcb4_add_alter_columns_in_collections_table.py +++ b/backend/app/alembic/versions/017_add_alter_columns_in_collections_table.py @@ -1,7 +1,7 @@ """add/alter columns in collections table -Revision ID: 3389c67fdcb4 -Revises: 8757b005d681 +Revision ID: 017 +Revises: 016 Create Date: 2025-06-20 18:08:16.585843 """ @@ -12,8 +12,8 @@ # revision identifiers, used by Alembic. -revision = "3389c67fdcb4" -down_revision = "8757b005d681" +revision = "017" +down_revision = "016" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/f2589428c1d0_change_vector_store_id_to_vector_store_ids.py b/backend/app/alembic/versions/018_change_vector_store_id_to_vector_store_ids.py similarity index 93% rename from backend/app/alembic/versions/f2589428c1d0_change_vector_store_id_to_vector_store_ids.py rename to backend/app/alembic/versions/018_change_vector_store_id_to_vector_store_ids.py index f8c49fad2..134354b54 100644 --- a/backend/app/alembic/versions/f2589428c1d0_change_vector_store_id_to_vector_store_ids.py +++ b/backend/app/alembic/versions/018_change_vector_store_id_to_vector_store_ids.py @@ -1,7 +1,7 @@ """Change vector_store_id to vector_store_ids in openai_assistant table -Revision ID: f2589428c1d0 -Revises: 3389c67fdcb4 +Revision ID: 018 +Revises: 017 Create Date: 2025-07-10 11:18:21.223114 """ @@ -10,8 +10,8 @@ from sqlalchemy.dialects import postgresql # revision identifiers, used by Alembic. -revision = "f2589428c1d0" -down_revision = "3389c67fdcb4" +revision = "018" +down_revision = "017" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/4aa1f48c6321_add_inconistency_fixes.py b/backend/app/alembic/versions/019_add_inconistency_fixes.py similarity index 95% rename from backend/app/alembic/versions/4aa1f48c6321_add_inconistency_fixes.py rename to backend/app/alembic/versions/019_add_inconistency_fixes.py index f8163202d..c9c2db00c 100644 --- a/backend/app/alembic/versions/4aa1f48c6321_add_inconistency_fixes.py +++ b/backend/app/alembic/versions/019_add_inconistency_fixes.py @@ -1,7 +1,7 @@ """Fixing inconsistencies -Revision ID: 4aa1f48c6321 -Revises: 3389c67fdcb4 +Revision ID: 019 +Revises: 018 Create Date: 2025-07-03 16:46:13.642386 """ @@ -11,8 +11,8 @@ from sqlalchemy.dialects import postgresql # revision identifiers, used by Alembic. -revision = "4aa1f48c6321" -down_revision = "f2589428c1d0" +revision = "019" +down_revision = "018" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/e8ee93526b37_add_is_deleted_column_in_assistant_table.py b/backend/app/alembic/versions/020_add_is_deleted_column_in_assistant_table.py similarity index 85% rename from backend/app/alembic/versions/e8ee93526b37_add_is_deleted_column_in_assistant_table.py rename to backend/app/alembic/versions/020_add_is_deleted_column_in_assistant_table.py index 76f71e6b4..809501ae7 100644 --- a/backend/app/alembic/versions/e8ee93526b37_add_is_deleted_column_in_assistant_table.py +++ b/backend/app/alembic/versions/020_add_is_deleted_column_in_assistant_table.py @@ -1,7 +1,7 @@ """Add is_deleted column in assistant table -Revision ID: e8ee93526b37 -Revises: 4aa1f48c6321 +Revision ID: 020 +Revises: 019 Create Date: 2025-07-21 12:40:03.791321 """ @@ -10,8 +10,8 @@ # revision identifiers, used by Alembic. -revision = "e8ee93526b37" -down_revision = "4aa1f48c6321" +revision = "020" +down_revision = "019" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/e9dd35eff62c_add_openai_conversation_table.py b/backend/app/alembic/versions/021_add_openai_conversation_table.py similarity index 96% rename from backend/app/alembic/versions/e9dd35eff62c_add_openai_conversation_table.py rename to backend/app/alembic/versions/021_add_openai_conversation_table.py index 9ff047ecc..294273bce 100644 --- a/backend/app/alembic/versions/e9dd35eff62c_add_openai_conversation_table.py +++ b/backend/app/alembic/versions/021_add_openai_conversation_table.py @@ -1,7 +1,7 @@ """add_openai_conversation_table -Revision ID: e9dd35eff62c -Revises: e8ee93526b37 +Revision ID: 021 +Revises: 020 Create Date: 2025-07-25 18:26:38.132146 """ @@ -11,8 +11,8 @@ # revision identifiers, used by Alembic. -revision = "e9dd35eff62c" -down_revision = "e8ee93526b37" +revision = "021" +down_revision = "020" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/5a59c6c29a82_add_error_message_column_in_collections_.py b/backend/app/alembic/versions/022_add_error_message_column_in_collections_.py similarity index 81% rename from backend/app/alembic/versions/5a59c6c29a82_add_error_message_column_in_collections_.py rename to backend/app/alembic/versions/022_add_error_message_column_in_collections_.py index 6be001ce0..94e8608b5 100644 --- a/backend/app/alembic/versions/5a59c6c29a82_add_error_message_column_in_collections_.py +++ b/backend/app/alembic/versions/022_add_error_message_column_in_collections_.py @@ -1,7 +1,7 @@ """add error message column in collections table -Revision ID: 5a59c6c29a82 -Revises: e9dd35eff62c +Revision ID: 022 +Revises: 021 Create Date: 2025-08-11 15:40:40.127161 """ @@ -11,8 +11,8 @@ # revision identifiers, used by Alembic. -revision = "5a59c6c29a82" -down_revision = "e9dd35eff62c" +revision = "022" +down_revision = "021" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/38f0e8c8dc92_alter_unique_constraint_assistant_table.py b/backend/app/alembic/versions/023_alter_unique_constraint_assistant_table.py similarity index 91% rename from backend/app/alembic/versions/38f0e8c8dc92_alter_unique_constraint_assistant_table.py rename to backend/app/alembic/versions/023_alter_unique_constraint_assistant_table.py index 046aafbc1..3c4662682 100644 --- a/backend/app/alembic/versions/38f0e8c8dc92_alter_unique_constraint_assistant_table.py +++ b/backend/app/alembic/versions/023_alter_unique_constraint_assistant_table.py @@ -1,7 +1,7 @@ """Alter unique constraint assistant table -Revision ID: 38f0e8c8dc92 -Revises: 5a59c6c29a82 +Revision ID: 023 +Revises: 022 Create Date: 2025-08-20 15:02:39.151977 """ @@ -11,8 +11,8 @@ # revision identifiers, used by Alembic. -revision = "38f0e8c8dc92" -down_revision = "5a59c6c29a82" +revision = "023" +down_revision = "022" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/8725df286943_unique_constraint_on_project_name_and_.py b/backend/app/alembic/versions/024_unique_constraint_on_project_name_and_.py similarity index 86% rename from backend/app/alembic/versions/8725df286943_unique_constraint_on_project_name_and_.py rename to backend/app/alembic/versions/024_unique_constraint_on_project_name_and_.py index 342751fb5..fa195ee7b 100644 --- a/backend/app/alembic/versions/8725df286943_unique_constraint_on_project_name_and_.py +++ b/backend/app/alembic/versions/024_unique_constraint_on_project_name_and_.py @@ -1,7 +1,7 @@ """unique constraint on project_name and org id -Revision ID: 8725df286943 -Revises: 38f0e8c8dc92 +Revision ID: 024 +Revises: 023 Create Date: 2025-08-27 12:22:36.633904 """ @@ -11,8 +11,8 @@ # revision identifiers, used by Alembic. -revision = "8725df286943" -down_revision = "38f0e8c8dc92" +revision = "024" +down_revision = "023" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/40307ab77e9f_add_storage_path_to_project_and_project_to_document_table.py b/backend/app/alembic/versions/025_add_storage_path_to_project_and_project_to_document_table.py similarity index 96% rename from backend/app/alembic/versions/40307ab77e9f_add_storage_path_to_project_and_project_to_document_table.py rename to backend/app/alembic/versions/025_add_storage_path_to_project_and_project_to_document_table.py index 14bee3148..41059c9bf 100644 --- a/backend/app/alembic/versions/40307ab77e9f_add_storage_path_to_project_and_project_to_document_table.py +++ b/backend/app/alembic/versions/025_add_storage_path_to_project_and_project_to_document_table.py @@ -1,7 +1,7 @@ """add storage_path to project and project_id to document table -Revision ID: 40307ab77e9f -Revises: 8725df286943 +Revision ID: 025 +Revises: 024 Create Date: 2025-08-28 10:54:30.712627 """ @@ -10,8 +10,8 @@ # revision identifiers, used by Alembic. -revision = "40307ab77e9f" -down_revision = "8725df286943" +revision = "025" +down_revision = "024" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/b5b9412d3d2a_add_source_document_id_to_document_table.py b/backend/app/alembic/versions/026_add_source_document_id_to_document_table.py similarity index 88% rename from backend/app/alembic/versions/b5b9412d3d2a_add_source_document_id_to_document_table.py rename to backend/app/alembic/versions/026_add_source_document_id_to_document_table.py index d0eec5edd..574afa5c1 100644 --- a/backend/app/alembic/versions/b5b9412d3d2a_add_source_document_id_to_document_table.py +++ b/backend/app/alembic/versions/026_add_source_document_id_to_document_table.py @@ -1,7 +1,7 @@ """add source document id to document table -Revision ID: b5b9412d3d2a -Revises: 40307ab77e9f +Revision ID: 026 +Revises: 025 Create Date: 2025-08-29 15:59:34.347031 """ @@ -11,8 +11,8 @@ # revision identifiers, used by Alembic. -revision = "b5b9412d3d2a" -down_revision = "40307ab77e9f" +revision = "026" +down_revision = "025" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/9f8a4af9d6fd_create_doc_transformation_job_table.py b/backend/app/alembic/versions/027_create_doc_transformation_job_table.py similarity index 93% rename from backend/app/alembic/versions/9f8a4af9d6fd_create_doc_transformation_job_table.py rename to backend/app/alembic/versions/027_create_doc_transformation_job_table.py index 822c2d873..eaeba4a39 100644 --- a/backend/app/alembic/versions/9f8a4af9d6fd_create_doc_transformation_job_table.py +++ b/backend/app/alembic/versions/027_create_doc_transformation_job_table.py @@ -1,7 +1,7 @@ """create doc transformation job table -Revision ID: 9f8a4af9d6fd -Revises: b5b9412d3d2a +Revision ID: 027 +Revises: 026 Create Date: 2025-08-29 16:00:47.848950 """ @@ -11,8 +11,8 @@ # revision identifiers, used by Alembic. -revision = "9f8a4af9d6fd" -down_revision = "b5b9412d3d2a" +revision = "027" +down_revision = "026" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/6ed6ed401847_add_fine_tuning_and_model_evaluation_.py b/backend/app/alembic/versions/028_add_fine_tuning_and_model_evaluation_.py similarity index 97% rename from backend/app/alembic/versions/6ed6ed401847_add_fine_tuning_and_model_evaluation_.py rename to backend/app/alembic/versions/028_add_fine_tuning_and_model_evaluation_.py index e3fb4bfad..3a3c8aee9 100644 --- a/backend/app/alembic/versions/6ed6ed401847_add_fine_tuning_and_model_evaluation_.py +++ b/backend/app/alembic/versions/028_add_fine_tuning_and_model_evaluation_.py @@ -1,7 +1,7 @@ """add fine tuning and model evaluation table -Revision ID: 6ed6ed401847 -Revises: 40307ab77e9f +Revision ID: 028 +Revises: 027 Create Date: 2025-09-01 14:54:03.553608 """ @@ -11,8 +11,8 @@ from sqlalchemy.dialects import postgresql # revision identifiers, used by Alembic. -revision = "6ed6ed401847" -down_revision = "9f8a4af9d6fd" +revision = "028" +down_revision = "027" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/c6fb6d0b5897_create_job_table.py b/backend/app/alembic/versions/029_create_job_table.py similarity index 92% rename from backend/app/alembic/versions/c6fb6d0b5897_create_job_table.py rename to backend/app/alembic/versions/029_create_job_table.py index 029bb1740..5bb8a850f 100644 --- a/backend/app/alembic/versions/c6fb6d0b5897_create_job_table.py +++ b/backend/app/alembic/versions/029_create_job_table.py @@ -1,7 +1,7 @@ """create job table -Revision ID: c6fb6d0b5897 -Revises: 6ed6ed401847 +Revision ID: 029 +Revises: 028 Create Date: 2025-09-22 17:55:57.558157 """ @@ -11,8 +11,8 @@ # revision identifiers, used by Alembic. -revision = "c6fb6d0b5897" -down_revision = "6ed6ed401847" +revision = "029" +down_revision = "028" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/7ab577d3af26_delete_non_successful_columns_from_collection_table.py b/backend/app/alembic/versions/030_delete_non_successful_columns_from_collection_table.py similarity index 83% rename from backend/app/alembic/versions/7ab577d3af26_delete_non_successful_columns_from_collection_table.py rename to backend/app/alembic/versions/030_delete_non_successful_columns_from_collection_table.py index 229083ee0..5aa3fc758 100644 --- a/backend/app/alembic/versions/7ab577d3af26_delete_non_successful_columns_from_collection_table.py +++ b/backend/app/alembic/versions/030_delete_non_successful_columns_from_collection_table.py @@ -1,7 +1,7 @@ """delete processing and failed columns from collection table -Revision ID: 7ab577d3af26 -Revises: c6fb6d0b5897 +Revision ID: 030 +Revises: 029 Create Date: 2025-10-06 13:59:28.561706 """ @@ -11,8 +11,8 @@ # revision identifiers, used by Alembic. -revision = "7ab577d3af26" -down_revision = "c6fb6d0b5897" +revision = "030" +down_revision = "029" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/b30727137e65_adding_collection_job_table_and_alter_collection_table.py b/backend/app/alembic/versions/031_adding_collection_job_table_and_alter_collection_table.py similarity index 97% rename from backend/app/alembic/versions/b30727137e65_adding_collection_job_table_and_alter_collection_table.py rename to backend/app/alembic/versions/031_adding_collection_job_table_and_alter_collection_table.py index fdd47876e..9970bafbb 100644 --- a/backend/app/alembic/versions/b30727137e65_adding_collection_job_table_and_alter_collection_table.py +++ b/backend/app/alembic/versions/031_adding_collection_job_table_and_alter_collection_table.py @@ -1,7 +1,7 @@ """adding collection job table and altering collections table -Revision ID: b30727137e65 -Revises: 7ab577d3af26 +Revision ID: 031 +Revises: 030 Create Date: 2025-10-05 14:19:14.213933 """ @@ -11,8 +11,8 @@ from sqlalchemy.dialects import postgresql # revision identifiers, used by Alembic. -revision = "b30727137e65" -down_revision = "7ab577d3af26" +revision = "031" +down_revision = "030" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/93d484f5798e_refactor_project_user.py b/backend/app/alembic/versions/032_refactor_project_user.py similarity index 94% rename from backend/app/alembic/versions/93d484f5798e_refactor_project_user.py rename to backend/app/alembic/versions/032_refactor_project_user.py index 704217cd0..de5159222 100644 --- a/backend/app/alembic/versions/93d484f5798e_refactor_project_user.py +++ b/backend/app/alembic/versions/032_refactor_project_user.py @@ -1,7 +1,7 @@ """Refactor Project user -Revision ID: 93d484f5798e -Revises: b30727137e65 +Revision ID: 032 +Revises: 031 Create Date: 2025-10-10 17:55:46.327616 """ @@ -11,8 +11,8 @@ from sqlalchemy.dialects import postgresql # revision identifiers, used by Alembic. -revision = "93d484f5798e" -down_revision = "b30727137e65" +revision = "032" +down_revision = "031" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/27c271ab6dd0_drop_deleted_at_credentials.py b/backend/app/alembic/versions/033_drop_deleted_at_credentials.py similarity index 89% rename from backend/app/alembic/versions/27c271ab6dd0_drop_deleted_at_credentials.py rename to backend/app/alembic/versions/033_drop_deleted_at_credentials.py index 287f7b220..e24268183 100644 --- a/backend/app/alembic/versions/27c271ab6dd0_drop_deleted_at_credentials.py +++ b/backend/app/alembic/versions/033_drop_deleted_at_credentials.py @@ -1,7 +1,7 @@ """drop column deleted_at from credentials -Revision ID: 27c271ab6dd0 -Revises: 93d484f5798e +Revision ID: 033 +Revises: 032 Create Date: 2025-10-15 11:10:02.554097 """ @@ -9,8 +9,8 @@ import sqlalchemy as sa # revision identifiers, used by Alembic. -revision = "27c271ab6dd0" -down_revision = "93d484f5798e" +revision = "033" +down_revision = "032" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/e7c68e43ce6f_refactor_api_key_table.py b/backend/app/alembic/versions/034_refactor_api_key_table.py similarity index 64% rename from backend/app/alembic/versions/e7c68e43ce6f_refactor_api_key_table.py rename to backend/app/alembic/versions/034_refactor_api_key_table.py index 42d5080c1..8e967ec0c 100644 --- a/backend/app/alembic/versions/e7c68e43ce6f_refactor_api_key_table.py +++ b/backend/app/alembic/versions/034_refactor_api_key_table.py @@ -1,7 +1,7 @@ """Refactor API key table -Revision ID: e7c68e43ce6f -Revises: 27c271ab6dd0 +Revision ID: 034 +Revises: 033 Create Date: 2025-10-16 13:06:51.777671 """ @@ -9,12 +9,11 @@ import sqlalchemy as sa import sqlmodel.sql.sqltypes from sqlalchemy.orm import Session -from app.alembic.migrate_api_key import migrate_api_keys, verify_migration # revision identifiers, used by Alembic. -revision = "e7c68e43ce6f" -down_revision = "27c271ab6dd0" +revision = "034" +down_revision = "033" branch_labels = None depends_on = None @@ -34,30 +33,17 @@ def upgrade(): # Step 2: Add UUID column before migration op.add_column("apikey", sa.Column("new_id", sa.Uuid(), nullable=True)) - # Step 3: Migrate existing encrypted keys to the new hashed format and generate UUIDs - bind = op.get_bind() - with Session(bind=bind) as session: - migrate_api_keys(session, generate_uuid=True) - - # Step 4: Verify migration was successful - if not verify_migration(session): - raise Exception( - "API key migration verification failed. Please check the logs." - ) - - session.flush() - - # Step 5: Make the columns non-nullable after migration + # Step 3: Make the columns non-nullable after migration op.alter_column("apikey", "key_prefix", nullable=False) op.alter_column("apikey", "key_hash", nullable=False) - # Step 6: Replace old PK with UUID-based PK + # Step 4: Replace old PK with UUID-based PK op.drop_constraint("apikey_pkey", "apikey", type_="primary") op.drop_column("apikey", "id") op.alter_column("apikey", "new_id", new_column_name="id", nullable=False) op.create_primary_key("apikey_pkey", "apikey", ["id"]) - # Step 7: Update indexes and drop old key column + # Step 5: Update indexes and drop old key column op.drop_index("ix_apikey_key", table_name="apikey") op.create_index(op.f("ix_apikey_key_prefix"), "apikey", ["key_prefix"], unique=True) op.drop_column("apikey", "key") diff --git a/backend/app/alembic/versions/219033c644de_add_llm_im_jobs_table.py b/backend/app/alembic/versions/035_add_llm_im_jobs_table.py similarity index 82% rename from backend/app/alembic/versions/219033c644de_add_llm_im_jobs_table.py rename to backend/app/alembic/versions/035_add_llm_im_jobs_table.py index db2e83e85..ba91fd8d3 100644 --- a/backend/app/alembic/versions/219033c644de_add_llm_im_jobs_table.py +++ b/backend/app/alembic/versions/035_add_llm_im_jobs_table.py @@ -1,7 +1,7 @@ """Add LLM in jobs table -Revision ID: 219033c644de -Revises: e7c68e43ce6f +Revision ID: 035 +Revises: 034 Create Date: 2025-10-17 15:38:33.565674 """ @@ -10,8 +10,8 @@ # revision identifiers, used by Alembic. -revision = "219033c644de" -down_revision = "e7c68e43ce6f" +revision = "035" +down_revision = "034" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/6fe772038a5a_create_evaluation_run_table.py b/backend/app/alembic/versions/036_create_evaluation_run_table.py similarity index 98% rename from backend/app/alembic/versions/6fe772038a5a_create_evaluation_run_table.py rename to backend/app/alembic/versions/036_create_evaluation_run_table.py index d636000dd..4b0d1ff90 100644 --- a/backend/app/alembic/versions/6fe772038a5a_create_evaluation_run_table.py +++ b/backend/app/alembic/versions/036_create_evaluation_run_table.py @@ -1,7 +1,7 @@ """create_evaluation_run_table, batch_job_table, and evaluation_dataset_table -Revision ID: 6fe772038a5a -Revises: 219033c644de +Revision ID: 036 +Revises: 035 Create Date: 2025-11-05 22:47:18.266070 """ @@ -12,8 +12,8 @@ from sqlalchemy.dialects import postgresql # revision identifiers, used by Alembic. -revision = "6fe772038a5a" -down_revision = "219033c644de" +revision = "036" +down_revision = "035" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/633e69806207_evaluation_update_constraints.py b/backend/app/alembic/versions/037_evaluation_update_constraints.py similarity index 96% rename from backend/app/alembic/versions/633e69806207_evaluation_update_constraints.py rename to backend/app/alembic/versions/037_evaluation_update_constraints.py index 7503c603e..8c617fd5d 100644 --- a/backend/app/alembic/versions/633e69806207_evaluation_update_constraints.py +++ b/backend/app/alembic/versions/037_evaluation_update_constraints.py @@ -1,7 +1,7 @@ """evaluation update constraints -Revision ID: 633e69806207 -Revises: 6fe772038a5a +Revision ID: 037 +Revises: 036 Create Date: 2025-11-13 11:36:16.484694 """ @@ -11,8 +11,8 @@ from sqlalchemy.dialects import postgresql # revision identifiers, used by Alembic. -revision = "633e69806207" -down_revision = "6fe772038a5a" +revision = "037" +down_revision = "036" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/ecda6b144627_config_management_tables.py b/backend/app/alembic/versions/038_config_management_tables.py similarity index 96% rename from backend/app/alembic/versions/ecda6b144627_config_management_tables.py rename to backend/app/alembic/versions/038_config_management_tables.py index 378d232c9..a980777a6 100644 --- a/backend/app/alembic/versions/ecda6b144627_config_management_tables.py +++ b/backend/app/alembic/versions/038_config_management_tables.py @@ -1,7 +1,7 @@ """Config management tables -Revision ID: ecda6b144627 -Revises: 633e69806207 +Revision ID: 038 +Revises: 037 Create Date: 2025-11-19 13:16:50.954576 """ @@ -11,8 +11,8 @@ from sqlalchemy.dialects import postgresql # revision identifiers, used by Alembic. -revision = "ecda6b144627" -down_revision = "633e69806207" +revision = "038" +down_revision = "037" branch_labels = None depends_on = None diff --git a/backend/app/alembic/versions/eed36ae3c79a_alter_doc_transform_table_for_celery.py b/backend/app/alembic/versions/039_alter_doc_transform_table_for_celery.py similarity index 89% rename from backend/app/alembic/versions/eed36ae3c79a_alter_doc_transform_table_for_celery.py rename to backend/app/alembic/versions/039_alter_doc_transform_table_for_celery.py index 5f3ff2151..32a0525cb 100644 --- a/backend/app/alembic/versions/eed36ae3c79a_alter_doc_transform_table_for_celery.py +++ b/backend/app/alembic/versions/039_alter_doc_transform_table_for_celery.py @@ -1,7 +1,7 @@ """alter doc transform table for celery -Revision ID: eed36ae3c79a -Revises: ecda6b144627 +Revision ID: 039 +Revises: 038 Create Date: 2025-11-12 20:08:39.774862 """ @@ -11,8 +11,8 @@ from sqlalchemy.dialects import postgresql # revision identifiers, used by Alembic. -revision = "eed36ae3c79a" -down_revision = "ecda6b144627" +revision = "039" +down_revision = "038" branch_labels = None depends_on = None