"""audit_events: the audit log Revision ID: 0039 Revises: 0038 Create Date: 2026-10-08 Credential events were only written to the app log, which is not queryable and is gone at the container's log rotation (#2939 §5). This keeps them in the database for `audit_retention_days`, for admins to read in Settings → Activity. ## Downgrade Drops the table and every event in it. """ import sqlalchemy as sa from alembic import op from sqlalchemy.dialects.postgresql import UUID revision = "0039" down_revision = "0038" branch_labels = None depends_on = None def upgrade() -> None: op.create_table( "audit_events", sa.Column("id", UUID(as_uuid=True), primary_key=True), sa.Column("at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()), sa.Column("event", sa.Text(), nullable=False), sa.Column("user_id", UUID(as_uuid=True), sa.ForeignKey("users.id", ondelete="SET NULL"), nullable=True), sa.Column("email", sa.Text(), nullable=True), sa.Column("address", sa.Text(), nullable=True), sa.Column("detail", sa.Text(), nullable=True), ) op.create_index("ix_audit_events_at", "audit_events", ["at"]) def downgrade() -> None: op.drop_index("ix_audit_events_at", table_name="audit_events") op.drop_table("audit_events")