You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
178 lines
9.1 KiB
Python
178 lines
9.1 KiB
Python
"""init schema
|
|
|
|
Revision ID: 3e46d0f29340
|
|
Revises:
|
|
Create Date: 2026-06-13 18:54:35.709820
|
|
|
|
"""
|
|
from typing import Sequence, Union
|
|
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
import sqlmodel # SQLModel AutoString 등 컬럼 타입 참조
|
|
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision: str = '3e46d0f29340'
|
|
down_revision: Union[str, Sequence[str], None] = None
|
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
depends_on: Union[str, Sequence[str], None] = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
"""Upgrade schema."""
|
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
op.create_table('approval',
|
|
sa.Column('id', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('icon', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('tone', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('risk', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('time', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('title', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('detail', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('cta', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('alt', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('undo_label', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('sort_order', sa.Integer(), nullable=False),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_table('briefing',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('today', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('weather_temp', sa.Integer(), nullable=False),
|
|
sa.Column('weather_cond', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('weather_icon', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('commute', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('sleep', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('note', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('saved_today', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('today_routed', sa.Integer(), nullable=False),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_table('event',
|
|
sa.Column('id', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('time', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('title', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('tag', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('dur', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('tone', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('soon', sa.Boolean(), nullable=False),
|
|
sa.Column('sort_order', sa.Integer(), nullable=False),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_table('folder',
|
|
sa.Column('id', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('name', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('tone', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('icon', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('sort_order', sa.Integer(), nullable=False),
|
|
sa.Column('is_system', sa.Boolean(), nullable=False),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_table('goal',
|
|
sa.Column('id', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('title', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('pct', sa.Integer(), nullable=False),
|
|
sa.Column('sub', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('tone', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('sort_order', sa.Integer(), nullable=False),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_table('person',
|
|
sa.Column('id', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('name', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('initial', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('color', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('is_me', sa.Boolean(), nullable=False),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_table('project',
|
|
sa.Column('id', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('folder_id', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('parent_id', sqlmodel.sql.sqltypes.AutoString(), nullable=True),
|
|
sa.Column('name', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('tone', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('sort_order', sa.Integer(), nullable=False),
|
|
sa.Column('pinned', sa.Boolean(), nullable=False),
|
|
sa.ForeignKeyConstraint(['folder_id'], ['folder.id'], ),
|
|
sa.ForeignKeyConstraint(['parent_id'], ['project.id'], ),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_table('task',
|
|
sa.Column('id', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('project_id', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('parent_id', sqlmodel.sql.sqltypes.AutoString(), nullable=True),
|
|
sa.Column('title', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('status', sa.Enum('todo', 'doing', 'waiting', 'review', 'done', name='taskstatus'), nullable=False),
|
|
sa.Column('assignee_id', sqlmodel.sql.sqltypes.AutoString(), nullable=True),
|
|
sa.Column('due', sa.Date(), nullable=True),
|
|
sa.Column('prio', sa.Enum('high', 'normal', 'low', name='prio'), nullable=False),
|
|
sa.Column('notes', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('est', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('delegated', sa.Boolean(), nullable=False),
|
|
sa.Column('sort_order', sa.Integer(), nullable=False),
|
|
sa.Column('created_at', sa.DateTime(), nullable=False),
|
|
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
|
sa.ForeignKeyConstraint(['assignee_id'], ['person.id'], ),
|
|
sa.ForeignKeyConstraint(['parent_id'], ['task.id'], ),
|
|
sa.ForeignKeyConstraint(['project_id'], ['project.id'], ),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_table('inbox_item',
|
|
sa.Column('id', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('kind', sa.Enum('text', 'voice', 'image', name='inboxkind'), nullable=False),
|
|
sa.Column('raw', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('status', sa.Enum('new', 'classified', 'confirmed', 'dismissed', name='inboxstatus'), nullable=False),
|
|
sa.Column('created_at', sa.DateTime(), nullable=False),
|
|
sa.Column('materialized_task_id', sqlmodel.sql.sqltypes.AutoString(), nullable=True),
|
|
sa.ForeignKeyConstraint(['materialized_task_id'], ['task.id'], ),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_table('task_comment',
|
|
sa.Column('id', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('task_id', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('person_id', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('text', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('created_at', sa.DateTime(), nullable=False),
|
|
sa.ForeignKeyConstraint(['person_id'], ['person.id'], ),
|
|
sa.ForeignKeyConstraint(['task_id'], ['task.id'], ),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_table('inbox_classification',
|
|
sa.Column('id', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('inbox_item_id', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('type', sa.Enum('task', 'event', 'idea', name='clstype'), nullable=False),
|
|
sa.Column('sphere', sa.Enum('work', 'life', name='sphere'), nullable=False),
|
|
sa.Column('project_id', sqlmodel.sql.sqltypes.AutoString(), nullable=True),
|
|
sa.Column('proj_label', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('tone', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('due_text', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('when_text', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('extra', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('reason', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('confidence', sa.Float(), nullable=False),
|
|
sa.Column('model', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
|
sa.Column('created_at', sa.DateTime(), nullable=False),
|
|
sa.ForeignKeyConstraint(['inbox_item_id'], ['inbox_item.id'], ),
|
|
sa.ForeignKeyConstraint(['project_id'], ['project.id'], ),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
# ### end Alembic commands ###
|
|
|
|
|
|
def downgrade() -> None:
|
|
"""Downgrade schema."""
|
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
op.drop_table('inbox_classification')
|
|
op.drop_table('task_comment')
|
|
op.drop_table('inbox_item')
|
|
op.drop_table('task')
|
|
op.drop_table('project')
|
|
op.drop_table('person')
|
|
op.drop_table('goal')
|
|
op.drop_table('folder')
|
|
op.drop_table('event')
|
|
op.drop_table('briefing')
|
|
op.drop_table('approval')
|
|
# ### end Alembic commands ###
|