<?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="IN-15243_update_altafonte_lsr_gsr_relations:1" author="aoshomoji" run-on-change="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                      SELECT
                        LSR.ID AS LSR_ID,
                        LSR.NAME AS LSR_NAME,
                        LSR.ISRC AS LSR_ISRC,
                        LSR.VERSION AS LSR_VERSION,
                        ARRAY_AGG(DISTINCT T.TYPE) AS TRACK_TYPES,
                        MIN(OP.RELEASE_DATE)::DATE::STRING AS RELEASE_DATE,
                      FROM FACTS.PROD.ORCHARD_PRODUCT AS OP
                      INNER JOIN FACTS.PROD.PROJECT_INCLUDES_ORCHARD_PRODUCT AS PIP
                        ON OP.ID = PIP.PRODUCT_ID
                      INNER JOIN FACTS.PROD.PROJECT AS PR
                        ON PIP.PROJECT_ID = PR.ID
                      INNER JOIN FACTS.PROD.PROJECT_BELONGS_TO_VENDOR AS PBTV
                        ON PR.ID = PBTV.PROJECT_ID
                      INNER JOIN FACTS.PROD.VENDOR AS V
                        ON PBTV.VENDOR_ID = V.VENDOR_ID
                      INNER JOIN FACTS.PROD.COMPANY_BRAND_HAS_LABEL_VENDOR AS CBHL
                        ON V.VENDOR_ID = CBHL.VENDOR_ID
                      INNER JOIN FACTS.PROD.COMPANY_BRAND AS CB
                        ON CBHL.COMPANY_BRAND_UUID = CB.UUID
                    
                      INNER JOIN FACTS.PROD.PRODUCT_INCLUDES_ORCHARD_TRACK AS PIOT
                        ON OP.ID = PIOT.PRODUCT_ID
                      INNER JOIN FACTS.PROD.ORCHARD_TRACK AS T
                        ON PIOT.TRACK_ID = T.ID
                      INNER JOIN FACTS.PROD.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS TPL
                        ON T.ID = TPL.TRACK_ID
                      INNER JOIN FACTS.PROD.LABEL_SOUND_RECORDING AS LSR
                          ON TPL.LABEL_SOUND_RECORDING_ID = LSR.ID
                      LEFT JOIN FACTS.PROD.GLOBAL_SOUND_RECORDING_REPRESENTS_LABEL_SOUND_RECORDING AS GRL
                        ON LSR.ID = GRL.LABEL_SOUND_RECORDING_ID
                    
                      WHERE
                        GRL.LABEL_SOUND_RECORDING_ID IS NULL
                        AND
                        COALESCE(LSR.NAME, '') <> ''
                        AND
                        LSR.ISRC RLIKE '^[A-Za-z]{2}[-]?[0-9A-Za-z]{3}[-]?[0-9]{2}[-]?[0-9]{5}$'
                        AND CB.NAME = 'altafonte'
                        AND OP.NOT_FOR_DISTRIBUTION IN ('N', 'SMEAnalyticsDummy', 'SwitchboardDummy')
                        AND NOT OP.DELETIONS
                      GROUP BY 1, 2, 3, 4;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                WITH
                  event,
                  'database/IN-15243_update_altafonte_lsr_gsr_relations' as by
                WITH
                  event.LSR_ID AS LSR_ID,
                  event.LSR_ISRC AS LSR_ISRC,
                  event.LSR_NAME AS LSR_NAME,
                  event.LSR_VERSION AS LSR_VERSION,
                  date(event.RELEASE_DATE) AS RELEASE_DATE,
                  apoc.convert.fromJsonList(event.TRACK_TYPES) AS TRACK_TYPES,
                  { createdAt: datetime(), createdBy: by } AS createdData,
                  { lastModifiedAt: datetime(), lastModifiedBy: by } AS updatedData,
                  { deletedAt: datetime(), deletedBy: by } AS deletedData,
                  by
                MATCH (lsr:LabelSoundRecording {id: LSR_ID})
                MERGE (gsr:GlobalSoundRecording {isrc: toUpper(LSR_ISRC)})
                  ON CREATE SET
                    gsr.id = apoc.create.uuid(),
                    gsr.name = CASE WHEN COALESCE(LSR_VERSION, '') = '' THEN LSR_NAME ELSE LSR_NAME + ' - ' + LSR_VERSION END,
                    gsr.types = TRACK_TYPES,
                    gsr.releaseDate = RELEASE_DATE,
                    gsr += createdData,
                    gsr += updatedData
                  ON MATCH SET
                    gsr.name = CASE WHEN COALESCE(LSR_VERSION, '') = '' THEN LSR_NAME ELSE LSR_NAME + ' - ' + LSR_VERSION END,
                    gsr.types = apoc.coll.sort(apoc.coll.union(gsr.types, TRACK_TYPES)),
                    gsr += updatedData
                MERGE (gsr)-[r:REPRESENTS]->(lsr)
                  ON CREATE SET
                    r += createdData,
                    r += updatedData
                  ON MATCH SET
                    r += updatedData
                WITH lsr, gsr, by
                MATCH (pc:PublishingComposition)-[h:HAS_SOUND_RECORDING]->(lsr)
                WITH DISTINCT pc, h, lsr, gsr, by
                CREATE (pc)-[has:HAS_SOUND_RECORDING]->(gsr)
                SET
                  has.createdAt = datetime(),
                  has.lastModifiedAt = datetime(),
                  has.lastModifiedBy = by,
                  has.createdBy = by
                CREATE (pc)-[dhas:DELETED_HAS_SOUND_RECORDING]->(lsr)
                SET
                  dhas.deletedAt = datetime(),
                  dhas.deletedBy = by
                DELETE h
            ]]>
        </cypherquery>
    </changeset>
</changelog>
