<?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="DS-9435_add_missing_gsr_lsr_relationship:1" author="stiphout" run-on-change="true">
        <cypherquery>
            <![CDATA[
            CALL apoc.periodic.iterate(
                "
                    MATCH (p:Product:Orchard {upc:'196873152370'})
                    MATCH (lsr:LabelSoundRecording {isrc:'USRC12500972'})<-[:IS_PLACEMENT_OF]-(t:Track:Orchard)<-[:INCLUDES]-(p)
                    <-[:INCLUDES]-(pr:Project)-[:BELONGS_TO]->(Vendor)<-[:HAS_LABEL]-(cp:CompanyBrand)
                    WHERE
                    NOT (lsr)<-[:REPRESENTS]-(:GlobalSoundRecording)
                    AND COALESCE(lsr.name, '') <> ''
                    AND lsr.isrc =~ '^[A-Za-z]{2}[-]?[0-9A-Za-z]{3}[-]?[0-9]{2}[-]?[0-9]{5}$'
                    AND p.deletions = false
                    AND (p.releaseStatus = 'in_content' OR cp.name = 'awal')
                    AND p.notForDistribution in ['N', 'SMEAnalyticsDummy', 'SwitchboardDummy']
                    WITH
                    lsr,
                    COLLECT(DISTINCT t.type) AS trackTypes,
                    COLLECT(DISTINCT p.releaseDate) AS releaseDates
                    RETURN lsr, trackTypes, HEAD(apoc.coll.sort(releaseDates)) AS releaseDate
                ",
                "
                    MERGE (n:GlobalSoundRecording {isrc: toUpper(lsr.isrc)})
                    ON CREATE SET
                        n.id = apoc.create.uuid(),
                        n.createdAt = datetime(),
                        n.createdBy = 'DS-9435_add_missing_gsr_lsr_relationship',
                        n.name = CASE WHEN COALESCE(lsr.version, '') = '' THEN lsr.name ELSE lsr.name + ' - ' + lsr.version END,
                        n.types = trackTypes,
                        n.releaseDate = releaseDate
                    ON MATCH SET
                        n.name = CASE WHEN COALESCE(lsr.version, '') = '' THEN lsr.name ELSE lsr.name + ' - ' + lsr.version END,
                        n.lastModifiedAt = datetime(),
                        n.lastModifiedBy = 'DS-9435_add_missing_gsr_lsr_relationship',
                        n.types = apoc.coll.sort(apoc.coll.union(n.types, trackTypes))
                    MERGE (n)-[r:REPRESENTS]->(lsr)
                    ON CREATE SET
                        r.createdAt = datetime(),
                        r.createdBy = 'DS-9435_add_missing_gsr_lsr_relationship'
                    ON MATCH SET
                        r.lastModifiedAt = datetime(),
                        r.lastModifiedBy = 'IDS-9435_add_missing_gsr_lsr_relationship'
                    WITH
                    lsr, n
                    MATCH (pc:PublishingComposition)-[h:HAS_SOUND_RECORDING]->(lsr)
                    WITH DISTINCT pc, h, lsr, n
                    CREATE (pc)-[has:HAS_SOUND_RECORDING]->(n)
                    SET
                        has.createdAt = datetime(),
                        has.lastModifiedAt = datetime(),
                        has.createdBy = 'DS-9435_add_missing_gsr_lsr_relationship'
                    CREATE (pc)-[dhas:DELETED_HAS_SOUND_RECORDING]->(lsr)
                    SET
                        dhas.deletedAt = datetime(),
                        has.deletedBy = 'DS-9435_add_missing_gsr_lsr_relationship'
                    DELETE h
                ",
                    {batchSize:100, iterateList:true, parallel:false}
                )
                YIELD total, errorMessages
                RETURN total, errorMessages;
            ]]>
        </cypherquery>
    </changeset>
</changelog>