"""Add knowledge table Revision ID: 6a39f3d8e55c Revises: c0fbf31ca0db Create Date: 2024-10-01 14:02:35.241684 """ from alembic import op import sqlalchemy as sa from sqlalchemy.sql import table, column, select import json revision = '6a39f3d8e55c' down_revision = 'c0fbf31ca0db' branch_labels = None depends_on = None def upgrade(): # Creating the 'knowledge' table print('Creating knowledge table') knowledge_table = op.create_table( 'knowledge', sa.Column('id', sa.Text(), primary_key=True), sa.Column('user_id', sa.Text(), nullable=False), sa.Column('name', sa.Text(), nullable=False), sa.Column('description', sa.Text(), nullable=True), sa.Column('data', sa.JSON(), nullable=True), sa.Column('meta', sa.JSON(), nullable=True), sa.Column('created_at', sa.BigInteger(), nullable=False), sa.Column('updated_at', sa.BigInteger(), nullable=True), ) print('Migrating data from document table to knowledge table') # Representation of the existing 'document' table document_table = table( 'document', column('collection_name', sa.String()), column('user_id', sa.String()), column('name', sa.String()), column('title', sa.Text()), column('content', sa.Text()), column('timestamp', sa.BigInteger()), ) # Select all from existing document table documents = op.get_bind().execute( select( document_table.c.collection_name, document_table.c.user_id, document_table.c.name, document_table.c.title, document_table.c.content, document_table.c.timestamp, ) ) # Insert data into knowledge table from document table for doc in documents: op.get_bind().execute( knowledge_table.insert().values( id=doc.collection_name, user_id=doc.user_id, description=doc.name, meta={ 'legacy': True, 'document': True, 'tags': json.loads(doc.content or '{}').get('tags', []), }, name=doc.title, created_at=doc.timestamp, updated_at=doc.timestamp, # using created_at for both created_at and updated_at in project ) ) def downgrade(): op.drop_table('knowledge')