|
1 | 1 | """initial schema |
2 | 2 |
|
3 | 3 | Revision ID: 56e1a9d2ba59 |
4 | | -Revises: |
| 4 | +Revises: |
5 | 5 | Create Date: 2025-10-18 16:36:38.674310 |
6 | 6 |
|
7 | 7 | """ |
| 8 | + |
8 | 9 | from typing import Sequence, Union |
9 | 10 |
|
10 | 11 | from alembic import op |
11 | 12 | import sqlalchemy as sa |
12 | 13 |
|
13 | 14 |
|
14 | 15 | # revision identifiers, used by Alembic. |
15 | | -revision: str = '56e1a9d2ba59' |
| 16 | +revision: str = "56e1a9d2ba59" |
16 | 17 | down_revision: Union[str, Sequence[str], None] = None |
17 | 18 | branch_labels: Union[str, Sequence[str], None] = None |
18 | 19 | depends_on: Union[str, Sequence[str], None] = None |
|
21 | 22 | def upgrade() -> None: |
22 | 23 | """Upgrade schema.""" |
23 | 24 | # ### commands auto generated by Alembic - please adjust! ### |
24 | | - op.create_table('alignment_events', |
25 | | - sa.Column('id', sa.Integer(), nullable=False), |
26 | | - sa.Column('event_id', sa.String(length=64), nullable=False), |
27 | | - sa.Column('title', sa.String(length=512), nullable=False), |
28 | | - sa.Column('context', sa.Text(), nullable=True), |
29 | | - sa.Column('suggestions', sa.JSON(), nullable=False), |
30 | | - sa.Column('notification_status', sa.String(length=64), nullable=False), |
31 | | - sa.Column('notification_meta', sa.JSON(), nullable=False), |
32 | | - sa.Column('followup_status', sa.String(length=64), nullable=True), |
33 | | - sa.Column('followup_recorded_at', sa.DateTime(timezone=True), nullable=True), |
34 | | - sa.Column('created_at', sa.DateTime(timezone=True), nullable=False), |
35 | | - sa.PrimaryKeyConstraint('id') |
| 25 | + op.create_table( |
| 26 | + "alignment_events", |
| 27 | + sa.Column("id", sa.Integer(), nullable=False), |
| 28 | + sa.Column("event_id", sa.String(length=64), nullable=False), |
| 29 | + sa.Column("title", sa.String(length=512), nullable=False), |
| 30 | + sa.Column("context", sa.Text(), nullable=True), |
| 31 | + sa.Column("suggestions", sa.JSON(), nullable=False), |
| 32 | + sa.Column("notification_status", sa.String(length=64), nullable=False), |
| 33 | + sa.Column("notification_meta", sa.JSON(), nullable=False), |
| 34 | + sa.Column("followup_status", sa.String(length=64), nullable=True), |
| 35 | + sa.Column("followup_recorded_at", sa.DateTime(timezone=True), nullable=True), |
| 36 | + sa.Column("created_at", sa.DateTime(timezone=True), nullable=False), |
| 37 | + sa.PrimaryKeyConstraint("id"), |
36 | 38 | ) |
37 | | - op.create_index(op.f('ix_alignment_events_created_at'), 'alignment_events', ['created_at'], unique=False) |
38 | | - op.create_index(op.f('ix_alignment_events_event_id'), 'alignment_events', ['event_id'], unique=True) |
39 | | - op.create_table('feedback', |
40 | | - sa.Column('id', sa.Integer(), nullable=False), |
41 | | - sa.Column('plan_id', sa.String(length=64), nullable=False), |
42 | | - sa.Column('user', sa.String(length=255), nullable=True), |
43 | | - sa.Column('rating', sa.Integer(), nullable=True), |
44 | | - sa.Column('edited_prd', sa.Text(), nullable=True), |
45 | | - sa.Column('comments', sa.Text(), nullable=True), |
46 | | - sa.Column('created_at', sa.DateTime(timezone=True), nullable=False), |
47 | | - sa.PrimaryKeyConstraint('id') |
| 39 | + op.create_index(op.f("ix_alignment_events_created_at"), "alignment_events", ["created_at"], unique=False) |
| 40 | + op.create_index(op.f("ix_alignment_events_event_id"), "alignment_events", ["event_id"], unique=True) |
| 41 | + op.create_table( |
| 42 | + "feedback", |
| 43 | + sa.Column("id", sa.Integer(), nullable=False), |
| 44 | + sa.Column("plan_id", sa.String(length=64), nullable=False), |
| 45 | + sa.Column("user", sa.String(length=255), nullable=True), |
| 46 | + sa.Column("rating", sa.Integer(), nullable=True), |
| 47 | + sa.Column("edited_prd", sa.Text(), nullable=True), |
| 48 | + sa.Column("comments", sa.Text(), nullable=True), |
| 49 | + sa.Column("created_at", sa.DateTime(timezone=True), nullable=False), |
| 50 | + sa.PrimaryKeyConstraint("id"), |
48 | 51 | ) |
49 | | - op.create_index(op.f('ix_feedback_created_at'), 'feedback', ['created_at'], unique=False) |
50 | | - op.create_index(op.f('ix_feedback_plan_id'), 'feedback', ['plan_id'], unique=False) |
51 | | - op.create_table('plans', |
52 | | - sa.Column('id', sa.Integer(), nullable=False), |
53 | | - sa.Column('plan_id', sa.String(length=64), nullable=False), |
54 | | - sa.Column('title', sa.String(length=512), nullable=False), |
55 | | - sa.Column('context', sa.Text(), nullable=True), |
56 | | - sa.Column('constraints', sa.JSON(), nullable=False), |
57 | | - sa.Column('prd_markdown', sa.Text(), nullable=True), |
58 | | - sa.Column('ticket_plan', sa.JSON(), nullable=True), |
59 | | - sa.Column('status_digest', sa.Text(), nullable=True), |
60 | | - sa.Column('critic_review', sa.JSON(), nullable=True), |
61 | | - sa.Column('revision_history', sa.JSON(), nullable=False), |
62 | | - sa.Column('trace_name', sa.String(length=255), nullable=True), |
63 | | - sa.Column('embedding', sa.JSON(), nullable=True), |
64 | | - sa.Column('tokens_used', sa.Integer(), nullable=True), |
65 | | - sa.Column('cost_usd', sa.Float(), nullable=True), |
66 | | - sa.Column('created_at', sa.DateTime(timezone=True), nullable=False), |
67 | | - sa.Column('completed_at', sa.DateTime(timezone=True), nullable=True), |
68 | | - sa.PrimaryKeyConstraint('id') |
| 52 | + op.create_index(op.f("ix_feedback_created_at"), "feedback", ["created_at"], unique=False) |
| 53 | + op.create_index(op.f("ix_feedback_plan_id"), "feedback", ["plan_id"], unique=False) |
| 54 | + op.create_table( |
| 55 | + "plans", |
| 56 | + sa.Column("id", sa.Integer(), nullable=False), |
| 57 | + sa.Column("plan_id", sa.String(length=64), nullable=False), |
| 58 | + sa.Column("title", sa.String(length=512), nullable=False), |
| 59 | + sa.Column("context", sa.Text(), nullable=True), |
| 60 | + sa.Column("constraints", sa.JSON(), nullable=False), |
| 61 | + sa.Column("prd_markdown", sa.Text(), nullable=True), |
| 62 | + sa.Column("ticket_plan", sa.JSON(), nullable=True), |
| 63 | + sa.Column("status_digest", sa.Text(), nullable=True), |
| 64 | + sa.Column("critic_review", sa.JSON(), nullable=True), |
| 65 | + sa.Column("revision_history", sa.JSON(), nullable=False), |
| 66 | + sa.Column("trace_name", sa.String(length=255), nullable=True), |
| 67 | + sa.Column("embedding", sa.JSON(), nullable=True), |
| 68 | + sa.Column("tokens_used", sa.Integer(), nullable=True), |
| 69 | + sa.Column("cost_usd", sa.Float(), nullable=True), |
| 70 | + sa.Column("created_at", sa.DateTime(timezone=True), nullable=False), |
| 71 | + sa.Column("completed_at", sa.DateTime(timezone=True), nullable=True), |
| 72 | + sa.PrimaryKeyConstraint("id"), |
69 | 73 | ) |
70 | | - op.create_index(op.f('ix_plans_created_at'), 'plans', ['created_at'], unique=False) |
71 | | - op.create_index(op.f('ix_plans_plan_id'), 'plans', ['plan_id'], unique=True) |
72 | | - op.create_table('prd_approvals', |
73 | | - sa.Column('id', sa.Integer(), nullable=False), |
74 | | - sa.Column('version_id', sa.String(length=64), nullable=False), |
75 | | - sa.Column('reviewer', sa.String(length=255), nullable=False), |
76 | | - sa.Column('reviewer_email', sa.String(length=255), nullable=True), |
77 | | - sa.Column('status', sa.String(length=64), nullable=False), |
78 | | - sa.Column('comments', sa.Text(), nullable=True), |
79 | | - sa.Column('created_at', sa.DateTime(timezone=True), nullable=False), |
80 | | - sa.PrimaryKeyConstraint('id') |
| 74 | + op.create_index(op.f("ix_plans_created_at"), "plans", ["created_at"], unique=False) |
| 75 | + op.create_index(op.f("ix_plans_plan_id"), "plans", ["plan_id"], unique=True) |
| 76 | + op.create_table( |
| 77 | + "prd_approvals", |
| 78 | + sa.Column("id", sa.Integer(), nullable=False), |
| 79 | + sa.Column("version_id", sa.String(length=64), nullable=False), |
| 80 | + sa.Column("reviewer", sa.String(length=255), nullable=False), |
| 81 | + sa.Column("reviewer_email", sa.String(length=255), nullable=True), |
| 82 | + sa.Column("status", sa.String(length=64), nullable=False), |
| 83 | + sa.Column("comments", sa.Text(), nullable=True), |
| 84 | + sa.Column("created_at", sa.DateTime(timezone=True), nullable=False), |
| 85 | + sa.PrimaryKeyConstraint("id"), |
81 | 86 | ) |
82 | | - op.create_index(op.f('ix_prd_approvals_created_at'), 'prd_approvals', ['created_at'], unique=False) |
83 | | - op.create_index(op.f('ix_prd_approvals_version_id'), 'prd_approvals', ['version_id'], unique=False) |
84 | | - op.create_table('prd_versions', |
85 | | - sa.Column('id', sa.Integer(), nullable=False), |
86 | | - sa.Column('version_id', sa.String(length=64), nullable=False), |
87 | | - sa.Column('plan_id', sa.String(length=64), nullable=False), |
88 | | - sa.Column('parent_version_id', sa.String(length=64), nullable=True), |
89 | | - sa.Column('branch', sa.String(length=255), nullable=False), |
90 | | - sa.Column('prd_markdown', sa.Text(), nullable=False), |
91 | | - sa.Column('commit_message', sa.String(length=512), nullable=True), |
92 | | - sa.Column('author', sa.String(length=255), nullable=True), |
93 | | - sa.Column('author_email', sa.String(length=255), nullable=True), |
94 | | - sa.Column('status', sa.String(length=64), nullable=False), |
95 | | - sa.Column('diff_summary', sa.JSON(), nullable=True), |
96 | | - sa.Column('created_at', sa.DateTime(timezone=True), nullable=False), |
97 | | - sa.PrimaryKeyConstraint('id') |
| 87 | + op.create_index(op.f("ix_prd_approvals_created_at"), "prd_approvals", ["created_at"], unique=False) |
| 88 | + op.create_index(op.f("ix_prd_approvals_version_id"), "prd_approvals", ["version_id"], unique=False) |
| 89 | + op.create_table( |
| 90 | + "prd_versions", |
| 91 | + sa.Column("id", sa.Integer(), nullable=False), |
| 92 | + sa.Column("version_id", sa.String(length=64), nullable=False), |
| 93 | + sa.Column("plan_id", sa.String(length=64), nullable=False), |
| 94 | + sa.Column("parent_version_id", sa.String(length=64), nullable=True), |
| 95 | + sa.Column("branch", sa.String(length=255), nullable=False), |
| 96 | + sa.Column("prd_markdown", sa.Text(), nullable=False), |
| 97 | + sa.Column("commit_message", sa.String(length=512), nullable=True), |
| 98 | + sa.Column("author", sa.String(length=255), nullable=True), |
| 99 | + sa.Column("author_email", sa.String(length=255), nullable=True), |
| 100 | + sa.Column("status", sa.String(length=64), nullable=False), |
| 101 | + sa.Column("diff_summary", sa.JSON(), nullable=True), |
| 102 | + sa.Column("created_at", sa.DateTime(timezone=True), nullable=False), |
| 103 | + sa.PrimaryKeyConstraint("id"), |
98 | 104 | ) |
99 | | - op.create_index(op.f('ix_prd_versions_branch'), 'prd_versions', ['branch'], unique=False) |
100 | | - op.create_index(op.f('ix_prd_versions_created_at'), 'prd_versions', ['created_at'], unique=False) |
101 | | - op.create_index(op.f('ix_prd_versions_parent_version_id'), 'prd_versions', ['parent_version_id'], unique=False) |
102 | | - op.create_index(op.f('ix_prd_versions_plan_id'), 'prd_versions', ['plan_id'], unique=False) |
103 | | - op.create_index(op.f('ix_prd_versions_status'), 'prd_versions', ['status'], unique=False) |
104 | | - op.create_index(op.f('ix_prd_versions_version_id'), 'prd_versions', ['version_id'], unique=True) |
105 | | - op.create_table('tasks', |
106 | | - sa.Column('id', sa.Integer(), nullable=False), |
107 | | - sa.Column('task_id', sa.String(length=64), nullable=False), |
108 | | - sa.Column('name', sa.String(length=255), nullable=False), |
109 | | - sa.Column('status', sa.Enum('PENDING', 'RUNNING', 'COMPLETED', 'FAILED', 'RETRYING', name='taskstatusdb'), nullable=False), |
110 | | - sa.Column('payload', sa.JSON(), nullable=True), |
111 | | - sa.Column('result', sa.JSON(), nullable=True), |
112 | | - sa.Column('error', sa.Text(), nullable=True), |
113 | | - sa.Column('retry_count', sa.Integer(), nullable=False), |
114 | | - sa.Column('max_retries', sa.Integer(), nullable=False), |
115 | | - sa.Column('created_at', sa.DateTime(timezone=True), nullable=False), |
116 | | - sa.Column('started_at', sa.DateTime(timezone=True), nullable=True), |
117 | | - sa.Column('completed_at', sa.DateTime(timezone=True), nullable=True), |
118 | | - sa.PrimaryKeyConstraint('id') |
| 105 | + op.create_index(op.f("ix_prd_versions_branch"), "prd_versions", ["branch"], unique=False) |
| 106 | + op.create_index(op.f("ix_prd_versions_created_at"), "prd_versions", ["created_at"], unique=False) |
| 107 | + op.create_index(op.f("ix_prd_versions_parent_version_id"), "prd_versions", ["parent_version_id"], unique=False) |
| 108 | + op.create_index(op.f("ix_prd_versions_plan_id"), "prd_versions", ["plan_id"], unique=False) |
| 109 | + op.create_index(op.f("ix_prd_versions_status"), "prd_versions", ["status"], unique=False) |
| 110 | + op.create_index(op.f("ix_prd_versions_version_id"), "prd_versions", ["version_id"], unique=True) |
| 111 | + op.create_table( |
| 112 | + "tasks", |
| 113 | + sa.Column("id", sa.Integer(), nullable=False), |
| 114 | + sa.Column("task_id", sa.String(length=64), nullable=False), |
| 115 | + sa.Column("name", sa.String(length=255), nullable=False), |
| 116 | + sa.Column( |
| 117 | + "status", |
| 118 | + sa.Enum("PENDING", "RUNNING", "COMPLETED", "FAILED", "RETRYING", name="taskstatusdb"), |
| 119 | + nullable=False, |
| 120 | + ), |
| 121 | + sa.Column("payload", sa.JSON(), nullable=True), |
| 122 | + sa.Column("result", sa.JSON(), nullable=True), |
| 123 | + sa.Column("error", sa.Text(), nullable=True), |
| 124 | + sa.Column("retry_count", sa.Integer(), nullable=False), |
| 125 | + sa.Column("max_retries", sa.Integer(), nullable=False), |
| 126 | + sa.Column("created_at", sa.DateTime(timezone=True), nullable=False), |
| 127 | + sa.Column("started_at", sa.DateTime(timezone=True), nullable=True), |
| 128 | + sa.Column("completed_at", sa.DateTime(timezone=True), nullable=True), |
| 129 | + sa.PrimaryKeyConstraint("id"), |
119 | 130 | ) |
120 | | - op.create_index(op.f('ix_tasks_created_at'), 'tasks', ['created_at'], unique=False) |
121 | | - op.create_index(op.f('ix_tasks_status'), 'tasks', ['status'], unique=False) |
122 | | - op.create_index(op.f('ix_tasks_task_id'), 'tasks', ['task_id'], unique=True) |
| 131 | + op.create_index(op.f("ix_tasks_created_at"), "tasks", ["created_at"], unique=False) |
| 132 | + op.create_index(op.f("ix_tasks_status"), "tasks", ["status"], unique=False) |
| 133 | + op.create_index(op.f("ix_tasks_task_id"), "tasks", ["task_id"], unique=True) |
123 | 134 | # ### end Alembic commands ### |
124 | 135 |
|
125 | 136 |
|
126 | 137 | def downgrade() -> None: |
127 | 138 | """Downgrade schema.""" |
128 | 139 | # ### commands auto generated by Alembic - please adjust! ### |
129 | | - op.drop_index(op.f('ix_tasks_task_id'), table_name='tasks') |
130 | | - op.drop_index(op.f('ix_tasks_status'), table_name='tasks') |
131 | | - op.drop_index(op.f('ix_tasks_created_at'), table_name='tasks') |
132 | | - op.drop_table('tasks') |
133 | | - op.drop_index(op.f('ix_prd_versions_version_id'), table_name='prd_versions') |
134 | | - op.drop_index(op.f('ix_prd_versions_status'), table_name='prd_versions') |
135 | | - op.drop_index(op.f('ix_prd_versions_plan_id'), table_name='prd_versions') |
136 | | - op.drop_index(op.f('ix_prd_versions_parent_version_id'), table_name='prd_versions') |
137 | | - op.drop_index(op.f('ix_prd_versions_created_at'), table_name='prd_versions') |
138 | | - op.drop_index(op.f('ix_prd_versions_branch'), table_name='prd_versions') |
139 | | - op.drop_table('prd_versions') |
140 | | - op.drop_index(op.f('ix_prd_approvals_version_id'), table_name='prd_approvals') |
141 | | - op.drop_index(op.f('ix_prd_approvals_created_at'), table_name='prd_approvals') |
142 | | - op.drop_table('prd_approvals') |
143 | | - op.drop_index(op.f('ix_plans_plan_id'), table_name='plans') |
144 | | - op.drop_index(op.f('ix_plans_created_at'), table_name='plans') |
145 | | - op.drop_table('plans') |
146 | | - op.drop_index(op.f('ix_feedback_plan_id'), table_name='feedback') |
147 | | - op.drop_index(op.f('ix_feedback_created_at'), table_name='feedback') |
148 | | - op.drop_table('feedback') |
149 | | - op.drop_index(op.f('ix_alignment_events_event_id'), table_name='alignment_events') |
150 | | - op.drop_index(op.f('ix_alignment_events_created_at'), table_name='alignment_events') |
151 | | - op.drop_table('alignment_events') |
| 140 | + op.drop_index(op.f("ix_tasks_task_id"), table_name="tasks") |
| 141 | + op.drop_index(op.f("ix_tasks_status"), table_name="tasks") |
| 142 | + op.drop_index(op.f("ix_tasks_created_at"), table_name="tasks") |
| 143 | + op.drop_table("tasks") |
| 144 | + op.drop_index(op.f("ix_prd_versions_version_id"), table_name="prd_versions") |
| 145 | + op.drop_index(op.f("ix_prd_versions_status"), table_name="prd_versions") |
| 146 | + op.drop_index(op.f("ix_prd_versions_plan_id"), table_name="prd_versions") |
| 147 | + op.drop_index(op.f("ix_prd_versions_parent_version_id"), table_name="prd_versions") |
| 148 | + op.drop_index(op.f("ix_prd_versions_created_at"), table_name="prd_versions") |
| 149 | + op.drop_index(op.f("ix_prd_versions_branch"), table_name="prd_versions") |
| 150 | + op.drop_table("prd_versions") |
| 151 | + op.drop_index(op.f("ix_prd_approvals_version_id"), table_name="prd_approvals") |
| 152 | + op.drop_index(op.f("ix_prd_approvals_created_at"), table_name="prd_approvals") |
| 153 | + op.drop_table("prd_approvals") |
| 154 | + op.drop_index(op.f("ix_plans_plan_id"), table_name="plans") |
| 155 | + op.drop_index(op.f("ix_plans_created_at"), table_name="plans") |
| 156 | + op.drop_table("plans") |
| 157 | + op.drop_index(op.f("ix_feedback_plan_id"), table_name="feedback") |
| 158 | + op.drop_index(op.f("ix_feedback_created_at"), table_name="feedback") |
| 159 | + op.drop_table("feedback") |
| 160 | + op.drop_index(op.f("ix_alignment_events_event_id"), table_name="alignment_events") |
| 161 | + op.drop_index(op.f("ix_alignment_events_created_at"), table_name="alignment_events") |
| 162 | + op.drop_table("alignment_events") |
152 | 163 | # ### end Alembic commands ### |
0 commit comments