<?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_track_set_sequence_numbers:1" author="npatel" run-on-change="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                    SELECT distinct tw.unique_track_id as track_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.track_writer tw  
                    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>
        <!-- After updating 21 TrackWriters update track sequence using track_set_sequence_numbers from lambda-kinesis-to-neo4j like it does in track_writer_update. -->
        <cypherquery>
            <![CDATA[
                MATCH (t:Track:Orchard { id: toInteger(event.TRACK_ID) })
                CALL apoc.lock.nodes([t])
                OPTIONAL MATCH (t)<-[rel:PARTICIPATED_IN]-(lp:LabelParticipant)
                OPTIONAL MATCH (t)-[:HAS_SOURCE_ARTIST]->(originalDataSource)
                WHERE
                    EXISTS((lp)-[:CREATED_FROM]->(originalDataSource))
                AND (
                        (
                            rel.participated_as = 'track_writer'
                        AND
                            originalDataSource:TrackWriter
                        )
                    OR
                        (
                            rel.participated_as <> 'track_writer'
                        AND
                            originalDataSource:TrackArtist
                        AND
                            originalDataSource.type = rel.participated_as
                        )
                )
                WITH
                    rel,
                    min(originalDataSource.id) AS orderInRole,
                    CASE rel.participated_as
                        WHEN 'performer'    THEN 1
                        WHEN 'featuring'    THEN 2
                        WHEN 'remixer'      THEN 3
                        WHEN 'producer'     THEN 4
                        WHEN 'track_writer' THEN 5
                        ELSE                     6
                    END AS roleValue
                ORDER BY roleValue, orderInRole
                WITH collect(rel) AS sequence
                UNWIND range(0, size(sequence)-1) AS sequenceNumber
                WITH sequence[sequenceNumber] AS rel, sequenceNumber
                SET rel.sequenceNumber = sequenceNumber
            ]]>
        </cypherquery>
    </changeset>
</changelog>
