Fascicoli+Tassonomia+permessi
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
"""
|
||||
Migrazione 0018: Livello di Rischio e Riservatezza per Comunicazione (Feature N3).
|
||||
|
||||
Aggiunge alla tabella `messages`:
|
||||
- risk_level ENUM(low, medium, high, critical) nullable
|
||||
- confidentiality ENUM(public, internal, confidential, secret) nullable
|
||||
|
||||
Entrambi i campi sono nullable: rimangono NULL finche' non vengono
|
||||
impostati manualmente o da una regola di smistamento (set_risk_level /
|
||||
set_confidentiality).
|
||||
"""
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy.dialects import postgresql
|
||||
|
||||
revision = "0018"
|
||||
down_revision = "0017"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# ── Crea i nuovi ENUM types ─────────────────────────────────────────────────
|
||||
risk_level_enum = postgresql.ENUM(
|
||||
"low", "medium", "high", "critical",
|
||||
name="risk_level",
|
||||
create_type=True,
|
||||
)
|
||||
confidentiality_enum = postgresql.ENUM(
|
||||
"public", "internal", "confidential", "secret",
|
||||
name="confidentiality_level",
|
||||
create_type=True,
|
||||
)
|
||||
risk_level_enum.create(op.get_bind(), checkfirst=True)
|
||||
confidentiality_enum.create(op.get_bind(), checkfirst=True)
|
||||
|
||||
# ── Aggiunge le colonne a messages ──────────────────────────────────────────
|
||||
op.add_column(
|
||||
"messages",
|
||||
sa.Column(
|
||||
"risk_level",
|
||||
sa.Enum("low", "medium", "high", "critical", name="risk_level", create_type=False),
|
||||
nullable=True,
|
||||
),
|
||||
)
|
||||
op.add_column(
|
||||
"messages",
|
||||
sa.Column(
|
||||
"confidentiality",
|
||||
sa.Enum("public", "internal", "confidential", "secret", name="confidentiality_level", create_type=False),
|
||||
nullable=True,
|
||||
),
|
||||
)
|
||||
|
||||
# ── Indici per filtrare rapidamente per rischio/riservatezza ────────────────
|
||||
op.create_index(
|
||||
"idx_messages_risk_level",
|
||||
"messages",
|
||||
["tenant_id", "risk_level"],
|
||||
postgresql_where=sa.text("risk_level IS NOT NULL"),
|
||||
)
|
||||
op.create_index(
|
||||
"idx_messages_confidentiality",
|
||||
"messages",
|
||||
["tenant_id", "confidentiality"],
|
||||
postgresql_where=sa.text("confidentiality IS NOT NULL"),
|
||||
)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
op.drop_index("idx_messages_confidentiality", table_name="messages")
|
||||
op.drop_index("idx_messages_risk_level", table_name="messages")
|
||||
op.drop_column("messages", "confidentiality")
|
||||
op.drop_column("messages", "risk_level")
|
||||
|
||||
risk_level_enum = postgresql.ENUM(name="risk_level")
|
||||
confidentiality_enum = postgresql.ENUM(name="confidentiality_level")
|
||||
risk_level_enum.drop(op.get_bind(), checkfirst=True)
|
||||
confidentiality_enum.drop(op.get_bind(), checkfirst=True)
|
||||
Reference in New Issue
Block a user