"""drop uq_artist_name — decouple display name from identity/storage

Revision ID: 0077
Revises: 0076
Create Date: 2026-07-04

Artist model fragility fix (milestone #130). One `slug` column was doing
identity + storage-path + display, and BOTH `name` and `slug` were UNIQUE, so
the display name couldn't be edited freely and two genuinely different creators
collided. Decouple: `slug` stays the immutable, unique storage/identity key (the
on-disk path component — untouched here); `name` becomes freely editable, NON-
unique display text. This migration only drops the `uq_artist_name` constraint;
no data moves and no path changes.
"""
from typing import Sequence, Union

from alembic import op

revision: str = "0077"
down_revision: Union[str, None] = "0076"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
    op.drop_constraint("uq_artist_name", "artist", type_="unique")


def downgrade() -> None:
    # Re-adding the UNIQUE would fail if duplicate names now exist; callers that
    # need to reverse this must dedupe names first.
    op.create_unique_constraint("uq_artist_name", "artist", ["name"])
