Skip to content

Commit ad1f58b

Browse files
committed
Migration fix
1 parent b02a77f commit ad1f58b

File tree

2 files changed

+70
-2
lines changed

2 files changed

+70
-2
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
"""
2+
Add ticket and comment tables
3+
"""
4+
from alembic import op
5+
import sqlalchemy as sa
6+
import sqlmodel.sql.sqltypes
7+
from sqlalchemy.dialects.postgresql import UUID
8+
from uuid import uuid4
9+
10+
11+
# revision identifiers, used by Alembic.
12+
revision = 'f23a9c45d178'
13+
down_revision = '1a31ce608336'
14+
branch_labels = None
15+
depends_on = None
16+
17+
18+
def upgrade():
19+
# Create ticket table
20+
op.create_table(
21+
'ticket',
22+
sa.Column("id", UUID(), nullable=False, server_default=sa.text("gen_random_uuid()")),
23+
sa.Column("title", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
24+
sa.Column("description", sqlmodel.sql.sqltypes.AutoString(), nullable=True),
25+
sa.Column("status", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
26+
sa.Column("priority", sqlmodel.sql.sqltypes.AutoString(), nullable=True),
27+
sa.Column("created_at", sa.DateTime(), nullable=False, server_default=sa.text("now()")),
28+
sa.Column("updated_at", sa.DateTime(), nullable=True),
29+
sa.Column("owner_id", UUID(), nullable=False),
30+
sa.PrimaryKeyConstraint("id"),
31+
sa.ForeignKeyConstraint(
32+
["owner_id"], ["user.id"], ondelete="CASCADE"
33+
),
34+
)
35+
36+
# Create index for ticket lookup by owner
37+
op.create_index(op.f('ix_ticket_owner_id'), 'ticket', ['owner_id'], unique=False)
38+
39+
# Create comment table
40+
op.create_table(
41+
'comment',
42+
sa.Column("id", UUID(), nullable=False, server_default=sa.text("gen_random_uuid()")),
43+
sa.Column("content", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
44+
sa.Column("created_at", sa.DateTime(), nullable=False, server_default=sa.text("now()")),
45+
sa.Column("ticket_id", UUID(), nullable=False),
46+
sa.Column("user_id", UUID(), nullable=False),
47+
sa.PrimaryKeyConstraint("id"),
48+
sa.ForeignKeyConstraint(
49+
["ticket_id"], ["ticket.id"], ondelete="CASCADE"
50+
),
51+
sa.ForeignKeyConstraint(
52+
["user_id"], ["user.id"], ondelete="CASCADE"
53+
),
54+
)
55+
56+
# Create indexes for faster comment lookups
57+
op.create_index(op.f('ix_comment_ticket_id'), 'comment', ['ticket_id'], unique=False)
58+
op.create_index(op.f('ix_comment_user_id'), 'comment', ['user_id'], unique=False)
59+
60+
61+
def downgrade():
62+
# Drop tables in reverse order (comments first, then tickets)
63+
op.drop_index(op.f('ix_comment_user_id'), table_name='comment')
64+
op.drop_index(op.f('ix_comment_ticket_id'), table_name='comment')
65+
op.drop_table('comment')
66+
67+
op.drop_index(op.f('ix_ticket_owner_id'), table_name='ticket')
68+
op.drop_table('ticket')

backend/app/core/db.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ def init_db(session: Session) -> None:
1616
# Tables should be created with Alembic migrations
1717
# But if you don't want to use migrations, create
1818
# the tables un-commenting the next lines
19-
from sqlmodel import SQLModel
19+
# from sqlmodel import SQLModel
2020

2121
# This works because the models are already imported and registered from app.models
22-
SQLModel.metadata.create_all(engine)
22+
# SQLModel.metadata.create_all(engine)
2323

2424
user = session.exec(
2525
select(User).where(User.email == settings.FIRST_SUPERUSER)

0 commit comments

Comments
 (0)