<?xml version="1.0" encoding="UTF-8"?>
<changelog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:/var/app/InputFileSchema.xsd">
    <changeset id="KDH-578_update_track_artist:1" author="npatel" run-on-change="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                    SELECT ta.id as TRACK_ARTIST_ID, t.id AS UNIQUE_TRACK_ID, ta.name as TRACK_ARTIST_NAME, ta.type as TRACK_ARTIST_TYPE,
                        p.vendor_id as VENDOR_ID, p.subaccount_id as SUBACCOUNT_ID
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.track_artist ta  
                    INNER JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t ON ta.track_id = t.id
                    INNER JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases r ON r.release_id = t.release_id
                    INNER JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project p ON p.project_id = r.project_id
                    WHERE ta.id IN (2554441, 2554442, 2554783, 2554784)
                ]]>
            </sqlquery>
        </precondition>
        <!-- Update these 4 TrackArtist with data from AR using track_artist_insert_cypher from lambda-kinesis-to-neo4j (without merge for TrackArtist) -->
        <cypherquery>
            <![CDATA[
                    CALL apoc.util.sleep(1)
                    MATCH (ta:TrackArtist {id: toInteger(event.TRACK_ARTIST_ID)})
                    MERGE (t:Track:Orchard {id: event.UNIQUE_TRACK_ID})
                        ON CREATE SET
                            t.createdAt = datetime(),
                            t.createdBy = 'KDH-578_update_track_artist',
                            t.lastModifiedAt = datetime(),
                            t.lastModifiedBy = 'KDH-578_update_track_artist'
                    MERGE (t)-[hsa:HAS_SOURCE_ARTIST]->(ta)
                        ON CREATE SET
                            hsa.createdAt = datetime(),
                            hsa.createdBy = 'KDH-578_update_track_artist',
                            hsa.lastModifiedAt = datetime(),
                            hsa.lastModifiedBy = 'KDH-578_update_track_artist'
                    MERGE (
                        lp:LabelParticipant:Orchard {
                            normalizedName: toLower(trim(apoc.text.replace(event.TRACK_ARTIST_NAME, '[ ]+', ''))),
                            vendorId: event.VENDOR_ID,
                            subaccountId: event.SUBACCOUNT_ID
                        }
                    )
                        ON CREATE SET
                            lp.id = toInteger(rand() * datetime.realtime().epochMillis),
                            lp.uuid = randomUUID(),
                            lp.createdAt = datetime(),
                            lp.createdBy = 'KDH-578_update_track_artist',
                            lp.lastModifiedAt = datetime(),
                            lp.lastModifiedBy = 'KDH-578_update_track_artist',
                            lp.name = trim(apoc.text.replace(event.TRACK_ARTIST_NAME, '[ ]{2,}', ' '))
                    MERGE (lp)-[participation:PARTICIPATED_IN {participated_as: event.TRACK_ARTIST_TYPE}]->(t)
                        ON CREATE SET
                            participation.createdAt = datetime(),
                            participation.createdBy = 'KDH-578_update_track_artist',
                            participation.lastModifiedAt = datetime(),
                            participation.lastModifiedBy = 'KDH-578_update_track_artist'
                    MERGE (lp)-[cf:CREATED_FROM]->(ta)
                        ON CREATE SET
                            cf.createdAt = datetime(),
                            cf.createdBy = 'KDH-578_update_track_artist',
                            cf.lastModifiedAt = datetime(),
                            cf.lastModifiedBy = 'KDH-578_update_track_artist'
                    MERGE (v:Vendor:Label:Orchard {id: lp.vendorId})
                        ON CREATE SET
                            v.createdAt = datetime(),
                            v.uuid = '',
                            v.createdBy = 'KDH-578_update_track_artist',
                            v.lastModifiedAt = datetime(),
                            v.lastModifiedBy = 'KDH-578_update_track_artist'
                    MERGE (v)-[hlp:HAS_LABEL_PARTICIPANT]->(lp)
                        ON CREATE SET
                            hlp.createdAt = datetime(),
                            hlp.createdBy = 'KDH-578_update_track_artist',
                            hlp.lastModifiedAt = datetime(),
                            hlp.lastModifiedBy = 'KDH-578_update_track_artist'
                    FOREACH (hasSubAccount IN
                                    CASE WHEN not (lp.subaccountId = 0) THEN [1] ELSE [] END |
                        MERGE (sa:SubAccount:Subaccount:Label {id: lp.subaccountId})
                            ON CREATE SET
                                sa.createdAt = datetime(),
                                sa.uuid = '',
                                sa.createdBy = 'KDH-578_update_track_artist',
                                sa.lastModifiedAt = datetime(),
                                sa.lastModifiedBy = 'KDH-578_update_track_artist'
                        MERGE (sa)-[shlp:HAS_LABEL_PARTICIPANT]->(lp)
                            ON CREATE SET
                                shlp.createdAt = datetime(),
                                shlp.createdBy = 'KDH-578_update_track_artist',
                                shlp.lastModifiedAt = datetime(),
                                shlp.lastModifiedBy = 'KDH-578_update_track_artist'
                    )
                WITH lp, v
                OPTIONAL MATCH (v)<-[:HAS_LABEL]-(cb:CompanyBrand)-[:BELONGS_TO]->(pc:ParentCompany)
                OPTIONAL MATCH (lp)<-[:HAS_LABEL_PARTICIPANT]-(sa:Subaccount)
                SET lp.companyBrandUUID = cb.uuid,
                    lp.vendorUUID = v.uuid,
                    lp.subaccountUUID = sa.uuid,
                    lp.parentCompanyUUID = pc.uuid
                
            ]]>
        </cypherquery>
    </changeset>
</changelog>
