"""Schlagwörter: mehrere Beträge je Wort erlauben. Bisher durfte ein Wort je Art nur einmal existieren – damit ließ sich genau ein Betrag hinterlegen. Wer im Personalrestaurant mal 5.00 und mal 7.50 zahlt, konnte den zweiten Preis nicht erfassen. Der Betrag gehört deshalb in den Unique-Schlüssel: „sv = 5.00" und „sv = 7.50" sind zwei Regeln, „sv" ohne Betrag bleibt der Auffang. Revision ID: 0011 Revises: 0010 Create Date: 2026-08-21 """ from alembic import op revision = "0011" down_revision = "0010" branch_labels = None depends_on = None def upgrade() -> None: with op.batch_alter_table("categorization_rules") as batch: batch.drop_constraint("uq_rule_owner_field_pattern_kind", type_="unique") batch.create_unique_constraint( "uq_rule_owner_field_pattern_kind_amount", ["owner_id", "match_field", "pattern", "kind", "amount_cents"], ) def downgrade() -> None: # Mehrfach-Beträge je Wort auf einen zusammenführen, sonst greift der alte # Schlüssel nicht mehr. op.execute( "DELETE FROM categorization_rules WHERE id NOT IN (" " SELECT MIN(id) FROM categorization_rules" " GROUP BY owner_id, match_field, pattern, kind)" ) with op.batch_alter_table("categorization_rules") as batch: batch.drop_constraint("uq_rule_owner_field_pattern_kind_amount", type_="unique") batch.create_unique_constraint( "uq_rule_owner_field_pattern_kind", ["owner_id", "match_field", "pattern", "kind"], )