<?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-579_update_track_writer:1" author="npatel" run-on-change="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                    SELECT tw.track_writer_id, t.id AS unique_track_id, tw.writer_name, p.vendor_id, p.subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.track_writer tw  
                    INNER JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t ON tw.unique_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 track_writer_id IN (
                     1968820, 1968821, 33333128, 33333129, 33333131, 33333147, 33333148, 33333175, 33333176, 33333177, 33333179, 33333184, 33333185, 33333189, 33333193, 33333194, 33333198, 33333199, 33333200, 33333201, 33333207
                    )
                ]]>
            </sqlquery>
        </precondition>
        <!-- Update these 21 TrackWriters with data from AR using track_writer_insert_cypher from lambda-kinesis-to-neo4j. -->
        <cypherquery>
            <![CDATA[
                CALL apoc.util.sleep(1)
                MERGE (tw:TrackWriter {id: toInteger(event.TRACK_WRITER_ID)})
                    ON CREATE SET
                        tw.uniqueTrackId = toInteger(event.UNIQUE_TRACK_ID),
                        tw.writerName = event.WRITER_NAME,
                        tw.createdAt = datetime(),
                        tw.createdBy = 'KDH-579_update_track_writer',
                        tw.lastModifiedAt = datetime(),
                        tw.lastModifiedBy = 'KDH-579_update_track_writer'
                    ON MATCH SET
                        tw.uniqueTrackId = toInteger(event.UNIQUE_TRACK_ID),
                        tw.writerName = event.WRITER_NAME,
                        tw.lastModifiedAt = datetime(),
                        tw.lastModifiedBy = 'KDH-579_update_track_writer'
                MERGE (t:Track:Orchard {id: tw.uniqueTrackId})
                    ON CREATE SET
                        t.createdAt = datetime(),
                        t.createdBy = 'KDH-579_update_track_writer',
                        t.lastModifiedAt = datetime(),
                        t.lastModifiedBy = 'KDH-579_update_track_writer'
                MERGE (t)-[hsa:HAS_SOURCE_ARTIST]->(tw)
                    ON CREATE SET
                        hsa.createdAt = datetime(),
                        hsa.createdBy = 'KDH-579_update_track_writer',
                        hsa.lastModifiedAt = datetime(),
                        hsa.lastModifiedBy = 'KDH-579_update_track_writer'
                MERGE (
                    lp:LabelParticipant:Orchard {
                        normalizedName: toLower(trim(apoc.text.replace(event.WRITER_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-579_update_track_writer',
                        lp.lastModifiedAt = datetime(),
                        lp.lastModifiedBy = 'KDH-579_update_track_writer',
                        lp.name = trim(apoc.text.replace(event.WRITER_NAME, '[ ]{2,}', ' '))
                    ON MATCH SET
                        lp.lastModifiedAt = datetime(),
                        lp.lastModifiedBy = 'KDH-579_update_track_writer'
                MERGE (lp)-[participation:PARTICIPATED_IN {participated_as: 'track_writer'}]->(t)
                    ON CREATE SET
                        participation.createdAt = datetime(),
                        participation.createdBy = 'KDH-579_update_track_writer',
                        participation.lastModifiedAt = datetime(),
                        participation.lastModifiedBy = 'KDH-579_update_track_writer'
                    ON MATCH SET
                        participation.lastModifiedAt = datetime(),
                        participation.lastModifiedBy = 'KDH-579_update_track_writer'
                MERGE (lp)-[cf:CREATED_FROM]->(tw)
                    ON CREATE SET
                        cf.createdAt = datetime(),
                        cf.createdBy = 'KDH-579_update_track_writer',
                        cf.lastModifiedAt = datetime(),
                        cf.lastModifiedBy = 'KDH-579_update_track_writer'
                MERGE (v:Vendor:Label:Orchard {id: lp.vendorId})
                    ON CREATE SET
                        v.createdAt = datetime(),
                        v.uuid = '',
                        v.createdBy = 'KDH-579_update_track_writer',
                        v.lastModifiedAt = datetime(),
                        v.lastModifiedBy = 'KDH-579_update_track_writer'
                MERGE (v)-[hlp:HAS_LABEL_PARTICIPANT]->(lp)
                    ON CREATE SET
                        hlp.createdAt = datetime(),
                        hlp.createdBy = 'KDH-579_update_track_writer',
                        hlp.lastModifiedAt = datetime(),
                        hlp.lastModifiedBy = 'KDH-579_update_track_writer'
                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-579_update_track_writer',
                            sa.lastModifiedAt = datetime(),
                            sa.lastModifiedBy = 'KDH-579_update_track_writer'
                    MERGE (sa)-[shlp:HAS_LABEL_PARTICIPANT]->(lp)
                        ON CREATE SET
                            shlp.createdAt = datetime(),
                            shlp.createdBy = 'KDH-579_update_track_writer',
                            shlp.lastModifiedAt = datetime(),
                            shlp.lastModifiedBy = 'KDH-579_update_track_writer'
                )
                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>
