🔥 refactor(alembic): remove flowstyles table migration

🔥 refactor(alembic): remove add_flow_table migration

 feat(alembic): add adds_tables migration to create user and apikey tables

🔥 chore(alembic): remove unnecessary alembic migration files

The following alembic migration files were removed:
- `5512e39b4012_add_apikey_table.py`
- `6384181fb7e8_update_api_key.py`
- `d3749cf7ac7e_update_all_tables.py`

These files are no longer needed as they are no longer relevant to the current state of the database schema. Removing them helps to keep the project's codebase clean and organized.
This commit is contained in:
Gabriel Luiz Freitas Almeida 2023-08-27 20:04:15 -03:00
commit 5605b2aa44
6 changed files with 141 additions and 323 deletions

View file

@ -1,42 +0,0 @@
"""Remove FlowStyles table
Revision ID: 0a534bdfd84b
Revises: 4814b6f4abfd
Create Date: 2023-08-07 14:09:06.844104
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = "0a534bdfd84b"
down_revision: Union[str, None] = "4814b6f4abfd"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_table("flowstyle")
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.create_table(
"flowstyle",
sa.Column("color", sa.VARCHAR(), nullable=False),
sa.Column("emoji", sa.VARCHAR(), nullable=False),
sa.Column("flow_id", sa.CHAR(length=32), nullable=True),
sa.Column("id", sa.CHAR(length=32), nullable=False),
sa.ForeignKeyConstraint(
["flow_id"],
["flow.id"],
),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("id"),
)
# ### end Alembic commands ###

View file

@ -0,0 +1,141 @@
"""Adds tables
Revision ID: 260dbcc8b680
Revises:
Create Date: 2023-08-27 19:49:02.681355
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
import sqlmodel
from sqlalchemy.engine.reflection import Inspector
# revision identifiers, used by Alembic.
revision: str = "260dbcc8b680"
down_revision: Union[str, None] = None
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
conn = op.get_bind()
inspector = Inspector.from_engine(conn)
# List existing tables
existing_tables = inspector.get_table_names()
existing_indices_flow = []
if "flow" in existing_tables:
existing_indices_flow = [
index["name"] for index in inspector.get_indexes("flow")
]
# Existing foreign keys for the 'flow' table, if it exists
existing_fks_flow = []
if "flow" in existing_tables:
existing_fks_flow = [
fk["referred_table"] + "." + fk["referred_columns"][0]
for fk in inspector.get_foreign_keys("flow")
]
op.create_table(
"user",
sa.Column("id", sqlmodel.sql.sqltypes.GUID(), nullable=False),
sa.Column("username", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
sa.Column("password", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
sa.Column("is_active", sa.Boolean(), nullable=False),
sa.Column("is_superuser", sa.Boolean(), nullable=False),
sa.Column("create_at", sa.DateTime(), nullable=False),
sa.Column("updated_at", sa.DateTime(), nullable=False),
sa.Column("last_login_at", sa.DateTime(), nullable=True),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("id"),
)
with op.batch_alter_table("user", schema=None) as batch_op:
batch_op.create_index(batch_op.f("ix_user_username"), ["username"], unique=True)
op.create_table(
"apikey",
sa.Column("name", sqlmodel.sql.sqltypes.AutoString(), nullable=True),
sa.Column("created_at", sa.DateTime(), nullable=False),
sa.Column("last_used_at", sa.DateTime(), nullable=True),
sa.Column("total_uses", sa.Integer(), nullable=False),
sa.Column("is_active", sa.Boolean(), nullable=False),
sa.Column("id", sqlmodel.sql.sqltypes.GUID(), nullable=False),
sa.Column("api_key", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
sa.Column("user_id", sqlmodel.sql.sqltypes.GUID(), nullable=False),
sa.ForeignKeyConstraint(
["user_id"],
["user.id"],
),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("id"),
)
with op.batch_alter_table("apikey", schema=None) as batch_op:
batch_op.create_index(batch_op.f("ix_apikey_api_key"), ["api_key"], unique=True)
batch_op.create_index(batch_op.f("ix_apikey_name"), ["name"], unique=False)
batch_op.create_index(
batch_op.f("ix_apikey_user_id"), ["user_id"], unique=False
)
if "flow" not in existing_tables:
op.create_table(
"flow",
sa.Column("data", sa.JSON(), nullable=True),
sa.Column("name", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
sa.Column("description", sqlmodel.sql.sqltypes.AutoString(), nullable=True),
sa.Column("id", sqlmodel.sql.sqltypes.GUID(), nullable=False),
sa.Column("user_id", sqlmodel.sql.sqltypes.GUID(), nullable=False),
sa.ForeignKeyConstraint(
["user_id"],
["user.id"],
),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("id"),
)
elif "user.id" not in existing_fks_flow:
with op.batch_alter_table("flow") as batch_op:
batch_op.create_foreign_key("fk_flow_user_id", "user", ["user_id"], ["id"])
# Conditionally create indices for 'flow' table
with op.batch_alter_table("flow", schema=None) as batch_op:
if "ix_flow_description" not in existing_indices_flow:
batch_op.create_index(
batch_op.f("ix_flow_description"), ["description"], unique=False
)
if "ix_flow_name" not in existing_indices_flow:
batch_op.create_index(batch_op.f("ix_flow_name"), ["name"], unique=False)
if "ix_flow_user_id" not in existing_indices_flow:
batch_op.create_index(
batch_op.f("ix_flow_user_id"), ["user_id"], unique=False
)
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
conn = op.get_bind()
inspector = Inspector.from_engine(conn)
# List existing tables
existing_tables = inspector.get_table_names()
if "flow" in existing_tables:
with op.batch_alter_table("flow", schema=None) as batch_op:
batch_op.drop_index(batch_op.f("ix_flow_user_id"))
batch_op.drop_index(batch_op.f("ix_flow_name"))
batch_op.drop_index(batch_op.f("ix_flow_description"))
op.drop_table("flow")
if "apikey" in existing_tables:
with op.batch_alter_table("apikey", schema=None) as batch_op:
batch_op.drop_index(batch_op.f("ix_apikey_user_id"))
batch_op.drop_index(batch_op.f("ix_apikey_name"))
batch_op.drop_index(batch_op.f("ix_apikey_api_key"))
op.drop_table("apikey")
if "user" in existing_tables:
with op.batch_alter_table("user", schema=None) as batch_op:
batch_op.drop_index(batch_op.f("ix_user_username"))
op.drop_table("user")
# ### end Alembic commands ###

View file

@ -1,65 +0,0 @@
"""Add Flow table
Revision ID: 4814b6f4abfd
Revises:
Create Date: 2023-08-05 17:47:42.879824
"""
import contextlib
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
import sqlmodel
# revision identifiers, used by Alembic.
revision: str = "4814b6f4abfd"
down_revision: Union[str, None] = None
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
# This suppress is used to not break the migration if the table already exists.
with contextlib.suppress(sa.exc.OperationalError):
op.create_table(
"flow",
sa.Column("data", sa.JSON(), nullable=True),
sa.Column("name", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
sa.Column("description", sqlmodel.sql.sqltypes.AutoString(), nullable=True),
sa.Column("id", sqlmodel.sql.sqltypes.GUID(), nullable=False),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("id"),
)
op.create_index(
op.f("ix_flow_description"), "flow", ["description"], unique=False
)
op.create_index(op.f("ix_flow_name"), "flow", ["name"], unique=False)
with contextlib.suppress(sa.exc.OperationalError):
op.create_table(
"flowstyle",
sa.Column("color", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
sa.Column("emoji", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
sa.Column("flow_id", sqlmodel.sql.sqltypes.GUID(), nullable=True),
sa.Column("id", sqlmodel.sql.sqltypes.GUID(), nullable=False),
sa.ForeignKeyConstraint(
["flow_id"],
["flow.id"],
),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("id"),
)
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_table("flowstyle")
op.drop_index(op.f("ix_flow_name"), table_name="flow")
op.drop_index(op.f("ix_flow_description"), table_name="flow")
op.drop_table("flow")
# ### end Alembic commands ###

View file

@ -1,103 +0,0 @@
"""Add ApiKey table
Revision ID: 5512e39b4012
Revises: 0a534bdfd84b
Create Date: 2023-08-23 21:05:51.042203
"""
import contextlib
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
import sqlmodel
# revision identifiers, used by Alembic.
revision: str = "5512e39b4012"
down_revision: Union[str, None] = "0a534bdfd84b"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
with contextlib.suppress(sa.exc.OperationalError):
op.create_table(
"apikey",
sa.Column("api_key", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
sa.Column(
"hashed_api_key", sqlmodel.sql.sqltypes.AutoString(), nullable=False
),
sa.Column("name", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
sa.Column("create_at", sa.DateTime(), nullable=False),
sa.Column("last_used_at", sa.DateTime(), nullable=True),
sa.Column("id", sqlmodel.sql.sqltypes.GUID(), nullable=False),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("id"),
)
op.create_index(op.f("ix_apikey_api_key"), "apikey", ["api_key"], unique=True)
with contextlib.suppress(sa.exc.OperationalError):
op.create_table(
"user",
sa.Column("id", sqlmodel.sql.sqltypes.GUID(), nullable=False),
sa.Column("username", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
sa.Column("password", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
sa.Column("is_active", sa.Boolean(), nullable=False),
sa.Column("is_superuser", sa.Boolean(), nullable=False),
sa.Column("create_at", sa.DateTime(), nullable=False),
sa.Column("updated_at", sa.DateTime(), nullable=False),
sa.Column("last_login_at", sa.DateTime(), nullable=True),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("id"),
)
op.create_index(op.f("ix_user_username"), "user", ["username"], unique=True)
with contextlib.suppress(sa.exc.OperationalError):
op.drop_table("flowstyle")
with contextlib.suppress(sa.exc.OperationalError):
op.drop_index("ix_component_frontend_node_id", table_name="component")
op.drop_index("ix_component_name", table_name="component")
op.drop_table("component")
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.create_table(
"component",
sa.Column("id", sa.CHAR(length=32), nullable=False),
sa.Column("frontend_node_id", sa.CHAR(length=32), nullable=False),
sa.Column("name", sa.VARCHAR(), nullable=False),
sa.Column("description", sa.VARCHAR(), nullable=True),
sa.Column("python_code", sa.VARCHAR(), nullable=True),
sa.Column("return_type", sa.VARCHAR(), nullable=True),
sa.Column("is_disabled", sa.BOOLEAN(), nullable=False),
sa.Column("is_read_only", sa.BOOLEAN(), nullable=False),
sa.Column("create_at", sa.DATETIME(), nullable=False),
sa.Column("update_at", sa.DATETIME(), nullable=False),
sa.PrimaryKeyConstraint("id"),
)
op.create_index("ix_component_name", "component", ["name"], unique=False)
op.create_index(
"ix_component_frontend_node_id", "component", ["frontend_node_id"], unique=False
)
op.create_table(
"flowstyle",
sa.Column("color", sa.VARCHAR(), nullable=False),
sa.Column("emoji", sa.VARCHAR(), nullable=False),
sa.Column("flow_id", sa.CHAR(length=32), nullable=True),
sa.Column("id", sa.CHAR(length=32), nullable=False),
sa.ForeignKeyConstraint(
["flow_id"],
["flow.id"],
),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("id"),
)
op.drop_index(op.f("ix_user_username"), table_name="user")
op.drop_table("user")
op.drop_index(op.f("ix_apikey_api_key"), table_name="apikey")
op.drop_table("apikey")
# ### end Alembic commands ###

View file

@ -1,54 +0,0 @@
"""Update API key
Revision ID: 6384181fb7e8
Revises: d3749cf7ac7e
Create Date: 2023-08-25 20:00:22.889883
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
import sqlmodel
import contextlib
# revision identifiers, used by Alembic.
revision: str = "6384181fb7e8"
down_revision: Union[str, None] = "d3749cf7ac7e"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
with contextlib.suppress(sa.exc.OperationalError):
op.add_column(
"apikey",
sa.Column(
"hashed_api_key", sqlmodel.sql.sqltypes.AutoString(), nullable=False
),
)
op.alter_column("apikey", "name", existing_type=sa.VARCHAR(), nullable=True)
op.create_index(
op.f("ix_apikey_hashed_api_key"), "apikey", ["hashed_api_key"], unique=False
)
op.create_index(op.f("ix_apikey_name"), "apikey", ["name"], unique=False)
op.create_foreign_key(None, "apikey", "user", ["user_id"], ["id"])
with contextlib.suppress(sa.exc.OperationalError):
op.alter_column(
"flow", "user_id", existing_type=sa.CHAR(length=32), nullable=False
)
op.create_foreign_key(None, "flow", "user", ["user_id"], ["id"])
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_constraint(None, "flow", type_="foreignkey")
op.alter_column("flow", "user_id", existing_type=sa.CHAR(length=32), nullable=True)
op.drop_constraint(None, "apikey", type_="foreignkey")
op.drop_index(op.f("ix_apikey_name"), table_name="apikey")
op.drop_index(op.f("ix_apikey_hashed_api_key"), table_name="apikey")
op.alter_column("apikey", "name", existing_type=sa.VARCHAR(), nullable=False)
op.drop_column("apikey", "hashed_api_key")
# ### end Alembic commands ###

View file

@ -1,59 +0,0 @@
"""Update all tables
Revision ID: d3749cf7ac7e
Revises: 5512e39b4012
Create Date: 2023-08-25 15:16:00.970071
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
import sqlmodel
import contextlib
# revision identifiers, used by Alembic.
revision: str = "d3749cf7ac7e"
down_revision: Union[str, None] = "5512e39b4012"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
with contextlib.suppress(sa.exc.OperationalError):
op.add_column("apikey", sa.Column("created_at", sa.DateTime(), nullable=False))
with contextlib.suppress(sa.exc.OperationalError):
op.add_column(
"apikey", sa.Column("user_id", sqlmodel.sql.sqltypes.GUID(), nullable=False)
)
op.create_index(op.f("ix_apikey_user_id"), "apikey", ["user_id"], unique=False)
op.create_foreign_key(None, "apikey", "user", ["user_id"], ["id"])
with contextlib.suppress(sa.exc.OperationalError):
op.alter_column("apikey", "name", existing_type=sa.VARCHAR(), nullable=True)
op.create_index(op.f("ix_apikey_name"), "apikey", ["name"], unique=False)
with contextlib.suppress(sa.exc.OperationalError):
op.drop_column("apikey", "create_at")
with contextlib.suppress(sa.exc.OperationalError):
op.add_column(
"flow", sa.Column("user_id", sqlmodel.sql.sqltypes.GUID(), nullable=True)
)
op.create_index(op.f("ix_flow_user_id"), "flow", ["user_id"], unique=False)
op.create_foreign_key(None, "flow", "user", ["user_id"], ["id"])
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_constraint(None, "flow", type_="foreignkey")
op.drop_index(op.f("ix_flow_user_id"), table_name="flow")
op.drop_column("flow", "user_id")
op.add_column("apikey", sa.Column("create_at", sa.DATETIME(), nullable=False))
op.drop_constraint(None, "apikey", type_="foreignkey")
op.drop_index(op.f("ix_apikey_user_id"), table_name="apikey")
op.drop_index(op.f("ix_apikey_name"), table_name="apikey")
op.alter_column("apikey", "name", existing_type=sa.VARCHAR(), nullable=False)
op.drop_column("apikey", "user_id")
op.drop_column("apikey", "created_at")
# ### end Alembic commands ###