12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- """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")
|