<?xml version="1.0" encoding="UTF-8"?>
<changelog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.liquigraph.org/schema/1.0/liquigraph.xsd">
    <changeset id="PLATFORM-2008-Rerun_master_vend_contact_vendor_nodes:1" author="jpenner" run-on-change="true">
        <query>
            CALL apoc.log.info("Starting Rerun of active vendor level vend_contact ingest at %s", [datetime()]);
        </query>
        <query>
            CALL apoc.periodic.iterate(
                "
                    WITH 'mysql_artrelations' as url_alias,
                    '
                        SELECT 
                            vc.login, vc.id, vc.language, vc.vendor_id, vc.subaccount_id, vc.auth0_user_id,
                            LOWER(GROUP_CONCAT(DISTINCT(vr.role))) AS roles
                        FROM vend_contact vc
                        INNER JOIN vend_contact_roles vcr ON vc.id = vcr.vend_contact_id
                        INNER JOIN vendor_roles vr ON vr.id = vcr.role_id
                        WHERE vc.active = \"Y\" AND vc.subaccount_id IS NULL AND vc.auth0_user_id IS NOT NULL 
                            AND vc.id between 0 and 20000
                        GROUP BY vc.id
                    ' as sql
                    CALL apoc.load.jdbc(url_alias, sql)
                    YIELD row
                    RETURN row
                ",
                "
                    MERGE (p:Profile { profileId: toInteger(row.id), profileType: 'LabelProfile' })
                        SET p.profileName = row.login,
                            p.language = row.language,
                            p.roles = split(row.roles, ',')
                    WITH p, row
                    MATCH (a:Vendor { id: toInteger(row.vendor_id) })
                    MERGE (p)-[rel:HAS_ACCESS_TO]->(a)
                    WITH p, row
                    MATCH (i:Identity { auth0UserId: row.auth0_user_id })
                        MERGE (i)-[:HAS_PROFILE]->(p)
                ",
                {batchSize:1000}
            );
        </query>
        <query>
            CALL apoc.log.info("Finished active vendor level vend_contact ingest 1 of 4 at %s", [datetime()]);
        </query>
        <query>
            CALL apoc.periodic.iterate(
                "
                    WITH 'mysql_artrelations' as url_alias,
                    '
                        SELECT 
                            vc.login, vc.id, vc.language, vc.vendor_id, vc.subaccount_id, vc.auth0_user_id,
                            LOWER(GROUP_CONCAT(DISTINCT(vr.role))) AS roles
                        FROM vend_contact vc
                        INNER JOIN vend_contact_roles vcr ON vc.id = vcr.vend_contact_id
                        INNER JOIN vendor_roles vr ON vr.id = vcr.role_id
                        WHERE vc.active = \"Y\" AND vc.subaccount_id IS NULL AND vc.auth0_user_id IS NOT NULL 
                            AND vc.id between 20000 and 40000
                        GROUP BY vc.id
                    ' as sql
                    CALL apoc.load.jdbc(url_alias, sql)
                    YIELD row
                    RETURN row
                ",
                "
                    MERGE (p:Profile { profileId: toInteger(row.id), profileType: 'LabelProfile' })
                        SET p.profileName = row.login,
                            p.language = row.language,
                            p.roles = split(row.roles, ',')
                    WITH p, row
                    MATCH (a:Vendor { id: toInteger(row.vendor_id) })
                    MERGE (p)-[rel:HAS_ACCESS_TO]->(a)
                    WITH p, row
                    MATCH (i:Identity { auth0UserId: row.auth0_user_id })
                        MERGE (i)-[:HAS_PROFILE]->(p)
                ",
                {batchSize:1000}
            );
        </query>
        <query>
            CALL apoc.log.info("Finished active vendor level vend_contact ingest 2 of 4 at %s", [datetime()]);
        </query>
        <query>
            CALL apoc.periodic.iterate(
                "
                    WITH 'mysql_artrelations' as url_alias,
                    '
                        SELECT 
                            vc.login, vc.id, vc.language, vc.vendor_id, vc.subaccount_id, vc.auth0_user_id,
                            LOWER(GROUP_CONCAT(DISTINCT(vr.role))) AS roles
                        FROM vend_contact vc
                        INNER JOIN vend_contact_roles vcr ON vc.id = vcr.vend_contact_id
                        INNER JOIN vendor_roles vr ON vr.id = vcr.role_id
                        WHERE vc.active = \"Y\" AND vc.subaccount_id IS NULL AND vc.auth0_user_id IS NOT NULL 
                            AND vc.id between 40000 and 50000
                        GROUP BY vc.id
                    ' as sql
                    CALL apoc.load.jdbc(url_alias, sql)
                    YIELD row
                    RETURN row
                ",
                "
                    MERGE (p:Profile { profileId: toInteger(row.id), profileType: 'LabelProfile' })
                        SET p.profileName = row.login,
                            p.language = row.language,
                            p.roles = split(row.roles, ',')
                    WITH p, row
                    MATCH (a:Vendor { id: toInteger(row.vendor_id) })
                    MERGE (p)-[rel:HAS_ACCESS_TO]->(a)
                    WITH p, row
                    MATCH (i:Identity { auth0UserId: row.auth0_user_id })
                        MERGE (i)-[:HAS_PROFILE]->(p)
                ",
                {batchSize:1000}
            );
        </query>
        <query>
            CALL apoc.log.info("Finished active vendor level vend_contact ingest 3 of 4 at %s", [datetime()]);
        </query>
        <query>
            CALL apoc.periodic.iterate(
                "
                    WITH 'mysql_artrelations' as url_alias,
                    '
                        SELECT 
                            vc.login, vc.id, vc.language, vc.vendor_id, vc.subaccount_id, vc.auth0_user_id,
                            LOWER(GROUP_CONCAT(DISTINCT(vr.role))) AS roles
                        FROM vend_contact vc
                        INNER JOIN vend_contact_roles vcr ON vc.id = vcr.vend_contact_id
                        INNER JOIN vendor_roles vr ON vr.id = vcr.role_id
                        WHERE vc.active = \"Y\" AND vc.subaccount_id IS NULL AND vc.auth0_user_id IS NOT NULL 
                            AND vc.id >= 50000
                        GROUP BY vc.id
                    ' as sql
                    CALL apoc.load.jdbc(url_alias, sql)
                    YIELD row
                    RETURN row
                ",
                "
                    MERGE (p:Profile { profileId: toInteger(row.id), profileType: 'LabelProfile' })
                        SET p.profileName = row.login,
                            p.language = row.language,
                            p.roles = split(row.roles, ',')
                    WITH p, row
                    MATCH (a:Vendor { id: toInteger(row.vendor_id) })
                    MERGE (p)-[rel:HAS_ACCESS_TO]->(a)
                    WITH p, row
                    MATCH (i:Identity { auth0UserId: row.auth0_user_id })
                        MERGE (i)-[:HAS_PROFILE]->(p)
                ",
                {batchSize:1000}
            );
        </query>
        <query>
            CALL apoc.log.info("Finished active vendor level vend_contact ingest 4 of 4 at %s", [datetime()]);
        </query>
    </changeset>
</changelog>