Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,54 +3,58 @@
Revision ID: af63c0205b19
Revises: 4cc89f2f896b
Create Date: 2025-07-09 15:00:40.189587

"""

# revision identifiers, used by Alembic.
revision = 'af63c0205b19'
down_revision = '4cc89f2f896b'


from alembic import op
import sqlalchemy as sa
import json

from sqlalchemy.dialects import postgresql

def upgrade():
#with app.app_context() as c:
# db.session.add(Model())
# db.session.commit()

# ### commands auto generated by Alembic - please adjust! ###
# Add foreign key constraint to users table
op.add_column('users', sa.Column('library_id', sa.Integer(), nullable=True))
op.create_foreign_key(None, 'users', 'library', ['library_id'], ['id'])


bind = op.get_bind()
# Get all users with link_server in user_data
# Delete link_server from user_data
# But save the link_server in the library table instead to be accessible via users.library_id

users = bind.execute("SELECT id, user_data FROM users WHERE user_data ? 'link_server'")

for user_id, user_data in users:

if user_data and isinstance(user_data, dict):
link_server = user_data.get('link_server')
if link_server:
library = bind.execute(
"SELECT id FROM library WHERE libserver = %s", (link_server,)
library_result = bind.execute(
"SELECT id FROM library WHERE libserver = %(libserver)s",
{"libserver": link_server}
).fetchone()

library_id = library[0] if library else None
library_id = library_result[0] if library_result else None

new_user_data = user_data.copy()
new_user_data.pop('link_server', None)

# Convert dictionary to JSON string for PostgreSQL
bind.execute(
"UPDATE users SET user_data = %s, library_id = %s WHERE id = %s",
(new_user_data, library_id, user_id)
"UPDATE users SET user_data = %(user_data)s, library_id = %(library_id)s WHERE id = %(user_id)s",
{
"user_data": json.dumps(new_user_data),
"library_id": library_id,
"user_id": user_id
}
)

def downgrade():
Expand All @@ -59,14 +63,20 @@ def downgrade():
bind = op.get_bind()

result = bind.execute("SELECT u.id, u.user_data, l.libserver FROM users u JOIN library l ON u.library_id = l.id WHERE u.library_id IS NOT NULL")

for user_id, user_data, libserver in result:
user_data = user_data or {}
if isinstance(user_data, dict):
if libserver is not None:
user_data['link_server'] = libserver
bind.execute("UPDATE users SET user_data = %s WHERE id = %s", (json.dumps(user_data), user_id))

bind.execute(
"UPDATE users SET user_data = %(user_data)s WHERE id = %(user_id)s",
{
"user_data": json.dumps(user_data),
"user_id": user_id
}
)

op.drop_constraint(None, 'users', type_='foreignkey')
op.drop_column('users', 'library_id')
# ### end Alembic commands ###
# ### end Alembic commands ###