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.

108 lines
4.3 KiB
Python

"""phase8 calendar+meetings: calendar/cal_event/focus_block/meeting/meeting_action
Revision ID: p8b2c3d4e5f6
Revises: p7a1b2c3d4e5
Create Date: 2026-06-14 01:00:00.000000
"""
from typing import Sequence, Union
import sqlalchemy as sa
import sqlmodel
from alembic import op
revision: str = "p8b2c3d4e5f6"
down_revision: Union[str, Sequence[str], None] = "p7a1b2c3d4e5"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
S = sqlmodel.sql.sqltypes.AutoString
def upgrade() -> None:
op.create_table(
"calendar",
sa.Column("id", S(), nullable=False),
sa.Column("name", S(), nullable=False),
sa.Column("tone", S(), nullable=False),
sa.Column("on", sa.Boolean(), nullable=False),
sa.Column("sort_order", sa.Integer(), nullable=False),
sa.PrimaryKeyConstraint("id"),
)
op.create_table(
"cal_event",
sa.Column("id", S(), nullable=False),
sa.Column("day", sa.Integer(), nullable=False),
sa.Column("start", S(), nullable=False),
sa.Column("end", S(), nullable=False),
sa.Column("title", S(), nullable=False),
sa.Column("cal", S(), nullable=False),
sa.Column("loc", S(), nullable=False),
sa.Column("note", S(), nullable=False),
sa.Column("soon", sa.Boolean(), nullable=False),
sa.Column("people", S(), nullable=False),
sa.Column("sort_order", sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(["cal"], ["calendar.id"]),
sa.PrimaryKeyConstraint("id"),
)
op.create_table(
"focus_block",
sa.Column("id", S(), nullable=False),
sa.Column("day", sa.Integer(), nullable=False),
sa.Column("start", S(), nullable=False),
sa.Column("end", S(), nullable=False),
sa.Column("title", S(), nullable=False),
sa.Column("type", S(), nullable=False),
sa.Column("tag", S(), nullable=False),
sa.Column("task_id", S(), nullable=True),
sa.Column("auto", sa.Boolean(), nullable=False),
sa.Column("sort_order", sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(["task_id"], ["task.id"]),
sa.PrimaryKeyConstraint("id"),
)
op.create_table(
"meeting",
sa.Column("id", S(), nullable=False),
sa.Column("event_id", S(), nullable=False),
sa.Column("phase", S(), nullable=False),
sa.Column("one_on_one", sa.Boolean(), nullable=False),
sa.Column("meta", S(), nullable=False),
sa.Column("starts_in", S(), nullable=False),
sa.Column("summary_json", S(), nullable=False),
sa.Column("decisions_json", S(), nullable=False),
sa.Column("agenda_json", S(), nullable=False),
sa.Column("last_meeting_json", S(), nullable=False),
sa.Column("last_actions_json", S(), nullable=False),
sa.Column("insights_json", S(), nullable=False),
sa.Column("docs_json", S(), nullable=False),
sa.Column("person_json", S(), nullable=False),
sa.Column("promises_json", S(), nullable=False),
sa.Column("signals_json", S(), nullable=False),
sa.Column("talking_points_json", S(), nullable=False),
sa.ForeignKeyConstraint(["event_id"], ["cal_event.id"]),
sa.PrimaryKeyConstraint("id"),
)
op.create_table(
"meeting_action",
sa.Column("id", S(), nullable=False),
sa.Column("meeting_id", S(), nullable=True),
sa.Column("event_id", S(), nullable=True),
sa.Column("source", S(), nullable=False),
sa.Column("idx", sa.Integer(), nullable=False),
sa.Column("text", S(), nullable=False),
sa.Column("who", S(), nullable=False),
sa.Column("when_text", S(), nullable=False),
sa.Column("added", sa.Boolean(), nullable=False),
sa.Column("materialized_task_id", S(), nullable=True),
sa.Column("sort_order", sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(["meeting_id"], ["meeting.id"]),
sa.ForeignKeyConstraint(["event_id"], ["cal_event.id"]),
sa.ForeignKeyConstraint(["materialized_task_id"], ["task.id"]),
sa.PrimaryKeyConstraint("id"),
)
def downgrade() -> None:
for t in ("meeting_action", "meeting", "focus_block", "cal_event", "calendar"):
op.drop_table(t)