"""nullable and unique

Revision ID: 551996c3c989
Revises: a38c9f6ae8ab
Create Date: 2021-03-10 16:37:15.538450

"""
from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = "551996c3c989"
down_revision = "a38c9f6ae8ab"
branch_labels = None
depends_on = None


def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.alter_column(
        "cmf_staff_control",
        "person_id",
        existing_type=sa.VARCHAR(length=64),
        nullable=False,
    )
    # удаляем дубликаты перед навешиванием unqiue index
    t = sa.table(
        "cmf_staff_control", sa.column("cmf_modified_at"), sa.column("person_id")
    )
    t1 = sa.alias(t)
    op.execute(
        t.delete()
        .where(t.c.cmf_modified_at < t1.c.cmf_modified_at)
        .where(t.c.person_id == t1.c.person_id)
    )
    op.drop_index("ix_cmf_staff_control_person_id", table_name="cmf_staff_control")
    op.create_index(
        op.f("ix_cmf_staff_control_person_id"),
        "cmf_staff_control",
        ["person_id"],
        unique=True,
    )

    op.alter_column(
        "cmf_status_opt",
        "status_id",
        existing_type=sa.VARCHAR(length=64),
        nullable=False,
    )
    op.alter_column(
        "cmf_status_opt",
        "work_list_id",
        existing_type=sa.VARCHAR(length=64),
        nullable=False,
    )
    # ### end Alembic commands ###


def downgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.alter_column(
        "cmf_status_opt",
        "work_list_id",
        existing_type=sa.VARCHAR(length=64),
        nullable=True,
    )
    op.alter_column(
        "cmf_status_opt",
        "status_id",
        existing_type=sa.VARCHAR(length=64),
        nullable=True,
    )
    op.drop_index(
        op.f("ix_cmf_staff_control_person_id"), table_name="cmf_staff_control"
    )
    op.create_index(
        "ix_cmf_staff_control_person_id",
        "cmf_staff_control",
        ["person_id"],
        unique=False,
    )
    op.alter_column(
        "cmf_staff_control",
        "person_id",
        existing_type=sa.VARCHAR(length=64),
        nullable=True,
    )
    # ### end Alembic commands ###
