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.

172 lines
6.8 KiB
Python

"""phase11 life-care: 11 tables (connector/health/finance/knowledge)
Revision ID: p11e5f6a7b8c9
Revises: p10d4e5f6a7b8
Create Date: 2026-06-14 04:00:00.000000
"""
from typing import Sequence, Union
import sqlalchemy as sa
import sqlmodel
from alembic import op
revision: str = "p11e5f6a7b8c9"
down_revision: Union[str, Sequence[str], None] = "p10d4e5f6a7b8"
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(
"connector_source",
sa.Column("id", S(), nullable=False),
sa.Column("domain", S(), nullable=False),
sa.Column("name", S(), nullable=False),
sa.Column("kind", S(), nullable=False),
sa.Column("tone", S(), nullable=False),
sa.Column("on", sa.Boolean(), nullable=False),
sa.Column("last", S(), nullable=False),
sa.Column("sort_order", sa.Integer(), nullable=False),
sa.PrimaryKeyConstraint("id"),
)
op.create_table(
"health_ring",
sa.Column("id", S(), nullable=False),
sa.Column("label", S(), nullable=False),
sa.Column("val", S(), nullable=False),
sa.Column("unit", S(), nullable=False),
sa.Column("goal", S(), nullable=False),
sa.Column("pct", sa.Integer(), nullable=False),
sa.Column("icon", S(), nullable=False),
sa.Column("tone", S(), nullable=False),
sa.Column("sort_order", sa.Integer(), nullable=False),
sa.PrimaryKeyConstraint("id"),
)
op.create_table(
"health_vital",
sa.Column("id", S(), nullable=False),
sa.Column("label", S(), nullable=False),
sa.Column("val", S(), nullable=False),
sa.Column("unit", S(), nullable=False),
sa.Column("trend", S(), nullable=False),
sa.Column("note", S(), nullable=False),
sa.Column("tone", S(), nullable=False),
sa.Column("sort_order", sa.Integer(), nullable=False),
sa.PrimaryKeyConstraint("id"),
)
op.create_table(
"sleep_night",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("total", S(), nullable=False),
sa.Column("score", sa.Integer(), nullable=False),
sa.Column("stages_json", S(), nullable=False),
sa.Column("week_json", S(), nullable=False),
sa.Column("note", S(), nullable=False),
sa.PrimaryKeyConstraint("id"),
)
op.create_table(
"health_habit",
sa.Column("id", S(), nullable=False),
sa.Column("title", S(), nullable=False),
sa.Column("goal", S(), nullable=False),
sa.Column("done", sa.Integer(), nullable=False),
sa.Column("total", sa.Integer(), nullable=False),
sa.Column("streak", sa.Integer(), nullable=False),
sa.Column("icon", S(), nullable=False),
sa.Column("tone", S(), nullable=False),
sa.Column("at", S(), nullable=False),
sa.Column("automation_rule_id", S(), nullable=True),
sa.Column("sort_order", sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(["automation_rule_id"], ["automation_rule.id"]),
sa.PrimaryKeyConstraint("id"),
)
op.create_table(
"finance_budget",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("spent", sa.Integer(), nullable=False),
sa.Column("limit", sa.Integer(), nullable=False),
sa.Column("pct", sa.Integer(), nullable=False),
sa.Column("delta_pct", sa.Integer(), nullable=False),
sa.Column("days_left", sa.Integer(), nullable=False),
sa.PrimaryKeyConstraint("id"),
)
op.create_table(
"finance_category",
sa.Column("id", S(), nullable=False),
sa.Column("name", S(), nullable=False),
sa.Column("amt", sa.Integer(), nullable=False),
sa.Column("pct", sa.Integer(), nullable=False),
sa.Column("icon", S(), nullable=False),
sa.Column("tone", S(), nullable=False),
sa.Column("over", sa.Boolean(), nullable=False),
sa.Column("sort_order", sa.Integer(), nullable=False),
sa.PrimaryKeyConstraint("id"),
)
op.create_table(
"finance_sub",
sa.Column("id", S(), nullable=False),
sa.Column("name", S(), nullable=False),
sa.Column("date", S(), nullable=False),
sa.Column("in_days", sa.Integer(), nullable=False),
sa.Column("amt", sa.Integer(), nullable=False),
sa.Column("icon", S(), nullable=False),
sa.Column("tone", S(), nullable=False),
sa.Column("note", S(), nullable=False),
sa.Column("paused", sa.Boolean(), nullable=False),
sa.Column("sort_order", sa.Integer(), nullable=False),
sa.PrimaryKeyConstraint("id"),
)
op.create_table(
"finance_insight",
sa.Column("id", S(), nullable=False),
sa.Column("kind", S(), nullable=False),
sa.Column("icon", S(), nullable=False),
sa.Column("title", S(), nullable=False),
sa.Column("body", S(), nullable=False),
sa.Column("action", S(), nullable=False),
sa.Column("action_ref", S(), nullable=False),
sa.Column("sort_order", sa.Integer(), nullable=False),
sa.PrimaryKeyConstraint("id"),
)
op.create_table(
"knowledge_collection",
sa.Column("id", S(), nullable=False),
sa.Column("name", S(), nullable=False),
sa.Column("count", sa.Integer(), nullable=False),
sa.Column("tone", S(), nullable=False),
sa.Column("sort_order", sa.Integer(), nullable=False),
sa.PrimaryKeyConstraint("id"),
)
op.create_table(
"knowledge_item",
sa.Column("id", S(), nullable=False),
sa.Column("type", S(), nullable=False),
sa.Column("title", S(), nullable=False),
sa.Column("src", S(), nullable=False),
sa.Column("time", S(), nullable=False),
sa.Column("tone", S(), nullable=False),
sa.Column("icon", S(), nullable=False),
sa.Column("tags_json", S(), nullable=False),
sa.Column("excerpt", S(), nullable=False),
sa.Column("ai", S(), nullable=False),
sa.Column("collection_id", S(), nullable=True),
sa.Column("connector_id", S(), nullable=True),
sa.Column("created_at", sa.DateTime(), nullable=False),
sa.Column("sort_order", sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(["collection_id"], ["knowledge_collection.id"]),
sa.ForeignKeyConstraint(["connector_id"], ["connector_source.id"]),
sa.PrimaryKeyConstraint("id"),
)
def downgrade() -> None:
for t in (
"knowledge_item", "knowledge_collection", "finance_insight", "finance_sub",
"finance_category", "finance_budget", "health_habit", "sleep_night",
"health_vital", "health_ring", "connector_source",
):
op.drop_table(t)