<?xml version="1.0" encoding="UTF-8"?>
<changelog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://www.liquigraph.org/schema/1.0/liquigraph.xsd">
    <changeset id="DS-10126_Backfill_videos_from_snowflake_to_neo4j:1" author="oefanova" neo4j-server="music-graph" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
SELECT DISTINCT
    videoid,
    channelid,
    isrc,
    video_isrc,
    video_title,
    TO_VARCHAR(time_uploaded, 'YYYY-MM-DD"T"HH24:MI:SS') as time_uploaded,
    TO_VARCHAR(time_published, 'YYYY-MM-DD"T"HH24:MI:SS') as time_published,
    type_of_video,
    video_privacy_status,
    subaccount_id,
    video_content_type
FROM dev_engineering.oefanova.temp_youtube_neo4j_video
WHERE unique_key is not NULL
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
MERGE (v:Video:YouTube {videoId: event.VIDEOID})
    ON CREATE SET
        v.id = randomUUID(),
        v.name = event.VIDEO_TITLE,
        v.isrc = event.VIDEO_ISRC,
        v.timeUploaded = datetime(event.TIME_UPLOADED),
        v.timePublished = datetime(event.TIME_PUBLISHED),
        v.subaccountId = event.SUBACCOUNT_ID,
        v.videoContentType = event.VIDEO_CONTENT_TYPE,
        v.createdBy = 'DS-10126_Backfill_videos_from_snowflake_to_neo4j',
        v.createdAt = datetime(),
        v.modifiedBy = 'DS-10126_Backfill_videos_from_snowflake_to_neo4j',
        v.modifiedAt = datetime()
    ON MATCH SET
        v.name = event.VIDEO_TITLE,
        v.isrc = event.VIDEO_ISRC,
        v.timeUploaded = datetime(event.TIME_UPLOADED),
        v.timePublished = datetime(event.TIME_PUBLISHED),
        v.subaccountId = event.SUBACCOUNT_ID,
        v.videoContentType = event.VIDEO_CONTENT_TYPE,
        v.modifiedBy = 'DS-10126_Backfill_videos_from_snowflake_to_neo4j',
        v.modifiedAt = datetime()
WITH DISTINCT event, v
    MATCH (c:Channel:YouTube {channelId: event.CHANNELID})
    MERGE (v)-[:APPEARS_IN_CHANNEL]->(c)
    FOREACH (y in CASE WHEN event.VIDEO_PRIVACY_STATUS = "Public" THEN [1] ELSE [] END | SET v:PublicVideo)
    FOREACH (y in CASE WHEN event.TYPE_OF_VIDEO = "official" THEN [1] ELSE [] END | SET v:Official)
    FOREACH (y in CASE WHEN event.TYPE_OF_VIDEO = "lyric" THEN [1] ELSE [] END | SET v:Official)
    FOREACH (y in CASE WHEN event.TYPE_OF_VIDEO = "MUSIC_VIDEO" THEN [1] ELSE [] END | SET v:Official)
    FOREACH (y in CASE WHEN event.TYPE_OF_VIDEO = "TV_EPISODE" THEN [1] ELSE [] END | SET v:Other)
    FOREACH (y in CASE WHEN event.TYPE_OF_VIDEO = "MOVIE" THEN [1] ELSE [] END | SET v:Other)
    FOREACH (y in CASE WHEN event.TYPE_OF_VIDEO = "WEB" THEN [1] ELSE [] END | SET v:Other)
    FOREACH (y in CASE WHEN event.TYPE_OF_VIDEO = "ART_TRACK_VIDEO" THEN [1] ELSE [] END | SET v:ArtTrack)
WITH event, v
  MATCH (a:YoutubeAsset:YouTube {isrc: event.ISRC})
  FOREACH (_ IN CASE WHEN event.ISRC <> event.VIDEO_ISRC THEN [1] ELSE [] END |
    MERGE (a)-[r:APPEARS_IN_VIDEO]->(v)
    ON CREATE SET
      r.createdAt = datetime(),
      r.createdBy = 'DS-10126_Backfill_videos_from_snowflake_to_neo4j'
    ON MATCH SET
      r.lastModifiedAt = datetime(),
      r.lastModifiedBy = 'DS-10126_Backfill_videos_from_snowflake_to_neo4j'
  )
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>
