<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
            http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">

    <changeSet id="02-create-new-foreign-key-constraints" author="marst">

        <addForeignKeyConstraint baseTableName="acm_user_org" baseColumnNames="cm_user" constraintName="fk_user"
            referencedTableName="acm_user" referencedColumnNames="cm_user_id" deferrable="${deferrable}"
            initiallyDeferred="${initially.deferred}"/>

        <addForeignKeyConstraint baseTableName="acm_user_org" baseColumnNames="cm_organization" constraintName="fk_organization"
            referencedTableName="acm_organization" referencedColumnNames="cm_organization_id" deferrable="${deferrable}"
            initiallyDeferred="${initially.deferred}"/>

    </changeSet>

    <changeSet id="profile-constraints-02-enforce-valid-profile-id" author="dmiller" dbms="oracle">
        <preConditions>
            <and>
                <tableExists tableName="acm_file"/>
                <columnExists tableName="acm_file" columnName="cm_file_id"/>
            </and>
        </preConditions>
        <sql>
            UPDATE acm_user_org
            SET cm_ecm_file_id = NULL
            WHERE cm_ecm_file_id NOT IN (SELECT cm_file_id FROM acm_file)
        </sql>
        <addForeignKeyConstraint baseTableName="acm_user_org" baseColumnNames="cm_ecm_file_id" constraintName="fk_user_org_fileid"
            referencedTableName="acm_file" referencedColumnNames="cm_file_id" deferrable="${deferrable}"
            initiallyDeferred="${initially.deferred}"/>
    </changeSet>

    <changeSet id="profile-constraints-03-container-foreign-key" author="dmiller">
        <preConditions onFail="MARK_RAN">
            <and>
                <tableExists tableName="acm_container"/>
                <columnExists tableName="acm_container" columnName="cm_container_id"/>
                <columnExists tableName="acm_user_org" columnName="cm_container_id"/>
            </and>
        </preConditions>
        <addForeignKeyConstraint baseTableName="acm_user_org" baseColumnNames="cm_container_id" constraintName="fk_user_org_container"
                                 referencedTableName="acm_container" referencedColumnNames="cm_container_id" deferrable="${deferrable}"
                                 initiallyDeferred="${initially.deferred}"/>
    </changeSet>

    <changeSet id="profile-constraint-04-container-id" author="bojan.milenkoski">
        <preConditions onFail="MARK_RAN">
            <not>
                <foreignKeyConstraintExists foreignKeyName="fk_user_org_signature_fileid" foreignKeyTableName="acm_user_org"/>
            </not>
        </preConditions>
        <addForeignKeyConstraint baseTableName="acm_user_org" baseColumnNames="cm_ecm_signature_file_id"
                                 constraintName="fk_user_org_signature_fileid" referencedTableName="acm_file"
                                 referencedColumnNames="cm_file_id"
                                 deferrable="${deferrable}" initiallyDeferred="${initially.deferred}"/>
    </changeSet>

    <changeSet id="profile-constraint-05-unique-user" author="aleksandar.acevski">
        <addUniqueConstraint tableName="acm_user_org" columnNames="cm_user"/>
    </changeSet>

    <changeSet id="01-change-cm-user-datetime" author="marija.blazhevska">
        <modifyDataType tableName="acm_user" columnName="cm_user_deleted_at" newDataType="DATETIME"/>
        <modifyDataType tableName="acm_user" columnName="cm_token_ex_date" newDataType="DATETIME"/>
    </changeSet>

</databaseChangeLog>