"""Add project 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 'project' table print("Creating project table") project_table = op.create_table( "project", 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 project 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 project table from document table for doc in documents: op.get_bind().execute( project_table.insert().values( id=doc.collection_name, user_id=doc.user_id, description=doc.name, meta={ "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("project")