OPTIONAL MATCH (p:Participant:Chartmetric {chartmetricId: event.CM_ARTIST_ID})
WITH event, p
FOREACH (n IN (CASE WHEN event.ISRC IS NOT NULL THEN [1] ELSE [] END) |
    MERGE (gsr:GlobalSoundRecording {isrc: event.ISRC})
        ON CREATE SET
            gsr.id = randomUUID(),
            gsr.createdAt = datetime(),
            gsr.createdBy = 'kc-neo-cdc-sink-cmt/etl_chartmetric_tracks_soundcloud',
            gsr.name = event.SOUND_RECORDING_NAME,
            gsr.types = ['music'],
            gsr.imageUrl = COALESCE(gsr.imageUrl, event.SOUND_RECORDING_IMAGE_URL)
        ON MATCH SET
            gsr.lastModifiedAt = datetime(),
            gsr.lastModifiedBy = 'kc-neo-cdc-sink-cmt/etl_chartmetric_tracks_soundcloud',
            gsr.name = COALESCE(gsr.name, event.SOUND_RECORDING_NAME),
            gsr.types = apoc.coll.sort(apoc.coll.union(gsr.types, ['music'])),
            gsr.imageUrl = COALESCE(gsr.imageUrl, event.SOUND_RECORDING_IMAGE_URL)
    MERGE (sr:SoundRecording:Chartmetric:PublicSoundRecording {isrc: event.ISRC})
        ON CREATE SET
            sr.name = event.SOUND_RECORDING_NAME,
            sr.imageUrl = event.SOUND_RECORDING_IMAGE_URL,
            sr.id = randomUUID(),
            sr.createdAt = datetime(),
            sr.createdBy = 'kc-neo-cdc-sink-cmt/etl_chartmetric_tracks_soundcloud'
        ON MATCH SET
            sr.name = COALESCE(event.SOUND_RECORDING_NAME, gsr.name),
            sr.imageUrl = event.SOUND_RECORDING_IMAGE_URL,
            sr.lastModifiedAt = datetime(),
            sr.lastModifiedBy = 'kc-neo-cdc-sink-cmt/etl_chartmetric_tracks_soundcloud'
    MERGE (t:Track:ChartmetricSoundCloud:PublicTrack {soundcloudId: event.SOUNDCLOUD_TRACK_ID})
        ON CREATE SET
            t.name = event.TRACK_NAME,
            t.isrc = event.ISRC,
            t.imageUrl = event.TRACK_IMAGE_URL,
            t.id = randomUUID(),
            t.createdAt = datetime(),
            t.createdBy = 'kc-neo-cdc-sink-cmt/etl_chartmetric_tracks_soundcloud'
        ON MATCH SET
            t.name = event.TRACK_NAME,
            t.isrc = event.ISRC,
            t.imageUrl = event.TRACK_IMAGE_URL,
            t.lastModifiedAt = datetime(),
            t.lastModifiedBy = 'kc-neo-cdc-sink-cmt/etl_chartmetric_tracks_soundcloud'
    MERGE (t)-[tToSr:IS_PLACEMENT_OF]->(sr)
        ON CREATE SET
            tToSr.createdAt = datetime(),
            tToSr.createdBy = 'kc-neo-cdc-sink-cmt/etl_chartmetric_tracks_soundcloud'
    MERGE (gsr)-[gsrToSr:REPRESENTS]->(sr)
        ON CREATE SET
            gsrToSr.createdAt = datetime(),
            gsrToSr.createdBy = 'kc-neo-cdc-sink-cmt/etl_chartmetric_tracks_soundcloud'
    FOREACH (_ IN CASE WHEN p IS NOT NULL THEN [1] END |
        MERGE (p)-[pToSr:PARTICIPATED_IN]->(sr)
            ON CREATE SET
                pToSr.createdAt = datetime(),
                pToSr.createdBy = 'kc-neo-cdc-sink-cmt/etl_chartmetric_tracks_soundcloud'
    )
)
FOREACH (n IN (CASE WHEN event.ISRC IS NULL THEN [1] ELSE [] END) |
    MERGE (sr:SoundRecording:Chartmetric:PublicSoundRecording {trackId: toString(event.SOUNDCLOUD_TRACK_ID)})
        ON CREATE SET
            sr.name = event.TRACK_NAME,
            sr.imageUrl = event.TRACK_IMAGE_URL,
            sr.artist = event.SOUNDCLOUD_ARTIST,
            sr.id = randomUUID(),
            sr.createdAt = datetime(),
            sr.createdBy = 'kc-neo-cdc-sink-cmt/etl_chartmetric_tracks_soundcloud'
        ON MATCH SET
            sr.name = event.TRACK_NAME,
            sr.imageUrl = event.TRACK_IMAGE_URL,
            sr.artist = event.SOUNDCLOUD_ARTIST,
            sr.lastModifiedAt = datetime(),
            sr.lastModifiedBy = 'kc-neo-cdc-sink-cmt/etl_chartmetric_tracks_soundcloud'
    MERGE (t:Track:ChartmetricSoundCloud:PublicTrack {soundcloudId: event.SOUNDCLOUD_TRACK_ID})
        ON CREATE SET
            t.name = event.TRACK_NAME,
            t.isrc = event.ISRC,
            t.imageUrl = event.TRACK_IMAGE_URL,
            t.id = randomUUID(),
            t.createdAt = datetime(),
            t.createdBy = 'kc-neo-cdc-sink-cmt/etl_chartmetric_tracks_soundcloud'
        ON MATCH SET
            t.name = event.TRACK_NAME,
            t.isrc = event.ISRC,
            t.imageUrl = event.TRACK_IMAGE_URL,
            t.lastModifiedAt = datetime(),
            t.lastModifiedBy = 'kc-neo-cdc-sink-cmt/etl_chartmetric_tracks_soundcloud'
    MERGE (t)-[tToSr:IS_PLACEMENT_OF]->(sr)
        ON CREATE SET
            tToSr.createdAt = datetime(),
            tToSr.createdBy = 'kc-neo-cdc-sink-cmt/etl_chartmetric_tracks_soundcloud'
        ON MATCH SET
            tToSr.lastModifiedAt = datetime(),
            tToSr.lastModifiedBy = 'kc-neo-cdc-sink-cmt/etl_chartmetric_tracks_soundcloud'
    FOREACH (_ IN CASE WHEN p IS NOT NULL THEN [1] END |
        MERGE (p)-[pToSr:PARTICIPATED_IN]->(sr)
            ON CREATE SET
                pToSr.createdAt = datetime(),
                pToSr.createdBy = 'kc-neo-cdc-sink-cmt/etl_chartmetric_tracks_soundcloud'
    )
)
