<?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-10126_Backfill_assets_from_snowflake_to_neo4j:1" author="oefanova" neo4j-server="music-graph" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
    SELECT DISTINCT
        assetid,
        videoid,
        uploadertype,
        channelid,
        isrc,
        trackname,
        video_isrc,
        asset_type
    FROM dev_engineering.oefanova.temp_youtube_neo4j_asset
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
MERGE (a:YoutubeAsset:YouTube {assetId: event.ASSETID})
    ON CREATE SET
        a.id = randomUUID(),
        a.isrc = CASE WHEN event.ISRC IS NOT NULL THEN event.ISRC ELSE event.VIDEO_ISRC END,
        a.name = event.TRACKNAME,
        a.createdBy = 'DS-10126_Backfill_videos_from_snowflake_to_neo4j',
        a.createdAt = datetime(),
        a.modifiedBy = 'DS-10126_Backfill_videos_from_snowflake_to_neo4j',
        a.modifiedAt = datetime()
    ON MATCH SET
        a.isrc = CASE WHEN event.ISRC IS NOT NULL THEN event.ISRC ELSE event.VIDEO_ISRC END,
        a.name = event.TRACKNAME,
        a.modifiedBy = 'DS-10126_Backfill_videos_from_snowflake_to_neo4j',
        a.modifiedAt = datetime()
WITH event, a
MATCH (v:Video:YouTube {videoId: event.VIDEOID})
FOREACH (_ IN CASE WHEN event.ISRC <> event.VIDEO_ISRC THEN [1] ELSE [] END |
  MERGE (a)-[:APPEARS_IN_VIDEO]->(v)
)
FOREACH (_ IN
  CASE
    WHEN event.ISRC = event.VIDEO_ISRC THEN [1]
    WHEN event.ISRC IS NULL and v.isrc = event.VIDEO_ISRC THEN [1]
    ELSE [] END |
  MERGE (a)-[:IS]->(v)
)
WITH v
  OPTIONAL MATCH (v)<-[:IS]-(:YoutubeAsset)<-[:REPRESENTS]-(gsr_represents_youtube_asset_which_is_video:GlobalSoundRecording)
  OPTIONAL MATCH (v)<-[:APPEARS_IN_VIDEO]-(:YoutubeAsset)<-[:REPRESENTS]-(related_gsr:GlobalSoundRecording)
  FOREACH(_ IN CASE WHEN gsr_represents_youtube_asset_which_is_video IS NOT NULL AND gsr_represents_youtube_asset_which_is_video.isrc = v.isrc THEN [1] ELSE [] END | MERGE (v)<-[:REPRESENTS_VIDEO]-(gsr_represents_youtube_asset_which_is_video) )
  FOREACH(_ IN CASE WHEN related_gsr IS NOT NULL THEN [1] ELSE [] END | MERGE (v)<-[:RELATED_TO_VIDEO]-(related_gsr) )
RETURN count(v)

            ]]>
        </cypherquery>
    </changeset>
</changelog>