48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
"""moment_mappings — an install's own corrections to which actions reach which
|
|
moment
|
|
|
|
Revision ID: 0116
|
|
Revises: 0115
|
|
Create Date: 2026-10-05
|
|
|
|
The moments and their default actions are code; this table holds what an
|
|
install adds ("make ship" is a deliver here) and the defaults it switches off.
|
|
User-owned configuration, so it cascades with the user. No CHECK on `effect`,
|
|
which the service validates.
|
|
"""
|
|
import sqlalchemy as sa
|
|
from alembic import op
|
|
|
|
revision = "0116"
|
|
down_revision = "0115"
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
op.create_table(
|
|
"moment_mappings",
|
|
sa.Column("id", sa.BigInteger(), primary_key=True),
|
|
sa.Column(
|
|
"created_at", sa.DateTime(timezone=True), nullable=False,
|
|
server_default=sa.text("now()"),
|
|
),
|
|
sa.Column(
|
|
"user_id", sa.Integer(),
|
|
sa.ForeignKey("users.id", ondelete="CASCADE"), nullable=False,
|
|
),
|
|
sa.Column("tool", sa.Text(), nullable=False),
|
|
sa.Column("match", sa.Text(), nullable=False, server_default=""),
|
|
sa.Column("moment", sa.Text(), nullable=False),
|
|
sa.Column("effect", sa.Text(), nullable=False, server_default="add"),
|
|
sa.Column("reason", sa.Text(), nullable=False, server_default=""),
|
|
sa.Column("actor", sa.Text(), nullable=False, server_default="model"),
|
|
sa.UniqueConstraint(
|
|
"user_id", "tool", "match", "moment", name="uq_moment_mapping",
|
|
),
|
|
)
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.drop_table("moment_mappings")
|