Merge branch 'main' of https://github.com/fourblocks2020/portfolio-hub
# Conflicts: # migrations/versions/20260519_0021_portfolio_tags_data_migration.py # migrations/versions/20260520_0022_service_token_unique_index_fix.py
This commit is contained in:
@@ -11,7 +11,6 @@ before running this migration in a live environment.
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
|
||||
import sqlalchemy as sa
|
||||
from alembic import op
|
||||
from sqlalchemy import inspect, text
|
||||
@@ -33,16 +32,20 @@ def _table_exists(inspector: sa.engine.Inspector, table_name: str) -> bool:
|
||||
|
||||
|
||||
def run_migration(connection, admin_user_id: str) -> None:
|
||||
"""Core migration logic — extracted for testability."""
|
||||
"""Core migration logic — extracted for testability.
|
||||
|
||||
admin_user_id can be either a UUID (id) or username.
|
||||
"""
|
||||
# Try to find user by id (UUID) first, then by username
|
||||
result = connection.execute(
|
||||
text("SELECT COUNT(*) FROM users WHERE id = :uid"),
|
||||
text("SELECT id FROM users WHERE id = :uid OR username = :uid LIMIT 1"),
|
||||
{"uid": admin_user_id},
|
||||
)
|
||||
count = result.scalar()
|
||||
if not count:
|
||||
user_id = result.scalar()
|
||||
if not user_id:
|
||||
raise ValueError(
|
||||
f"Migration admin user not found in users table: {admin_user_id}. "
|
||||
"Set MIGRATION_ADMIN_ID to a valid user ID before running."
|
||||
"Set MIGRATION_ADMIN_ID to a valid user ID (UUID) or username before running."
|
||||
)
|
||||
|
||||
# Migrate distinct (lowercased) tag_values from portfolio_tags → tags master
|
||||
@@ -54,7 +57,7 @@ def run_migration(connection, admin_user_id: str) -> None:
|
||||
GROUP BY LOWER(tag_value)
|
||||
ON CONFLICT (name) DO NOTHING
|
||||
"""),
|
||||
{"admin_id": admin_user_id},
|
||||
{"admin_id": user_id},
|
||||
)
|
||||
|
||||
# Fill portfolios.tag_ids from the migrated tags
|
||||
|
||||
@@ -25,6 +25,7 @@ def upgrade() -> None:
|
||||
bind = op.get_bind()
|
||||
inspector = inspect(bind)
|
||||
|
||||
# Drop old index if it exists (non-partial index)
|
||||
if _index_exists(inspector, "auth_tokens", "idx_auth_tokens_service_name_unique"):
|
||||
op.execute("DROP INDEX IF EXISTS idx_auth_tokens_service_name_unique")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user