<?xml version="1.0" encoding="UTF-8"?>
<changelog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.liquigraph.org/schema/1.0/liquigraph.xsd">
    <changeset id="insert_yt_video_manually:1" author="ayermakov">
        <query>
            <![CDATA[
                CALL apoc.periodic.iterate(
                    '
                        WITH "
                            SELECT DISTINCT
                              s.video_id as videoid,
                              s.channel_id as channelid,
                              s.isrc,
                              s.video_title,
                              s.time_uploaded,
                              s.time_published,
                              COALESCE(
                                CASE pv.type_of_video
                                  WHEN \'Lyric Music Video\' THEN \'lyric\'
                                  WHEN \'Official Music Video\' THEN \'official\'
                                  ELSE NULL
                                END, a.asset_type) as type_of_video,
                              s.video_privacy_status,
                              dr.subaccountid as subaccountid
                            FROM facts.prod.staging_raw_youtube_video_report s
                            LEFT JOIN facts.prod.staging_raw_youtube_asset_report a
                              ON a.asset_id = \'A313901392659024\'
                            LEFT JOIN facts.prod.dim_track_clean dtv
                              ON s.isrc = dtv.isrc
                            LEFT JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.product_video pv
                              ON pv.upc = dtv.upc
                            LEFT JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.youtube_channel yc
                              ON s.channel_id = yc.youtube_channel_id
                            LEFT JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.youtube_channel_upc ycu
                              ON yc.id = ycu.youtube_channel_id
                            LEFT JOIN facts.prod.dim_release dr
                              ON ycu.upc = dr.releaseid
                            WHERE video_id = \'5bfseWNmlds\'
                            ORDER BY 1, 2, 3, 4, 5, 6, 7, 8
                            LIMIT 1;
                        " AS sql
                        CALL apoc.load.jdbc("snowflake_orchard", sql) YIELD row RETURN row
                    ',
                    '
                        WITH row
                        MERGE (v:Video:YouTube {videoId: row.VIDEOID})
                            ON CREATE SET
                                v.id = apoc.create.uuid(),
                                v.name = row.VIDEO_TITLE,
                                v.isrc = row.ISRC,
                                v.timeUploaded = datetime(row.TIME_UPLOADED),
                                v.timePublished = datetime(row.TIME_PUBLISHED),
                                v.subaccountId = row.SUBACCOUNT_ID,
                                v.createdAt = datetime(),
                                v.modifiedAt = datetime()
                            ON MATCH SET
                                v.name = row.VIDEO_TITLE,
                                v.isrc = row.ISRC,
                                v.timeUploaded = datetime(row.TIME_UPLOADED),
                                v.timePublished = datetime(row.TIME_PUBLISHED),
                                v.subaccountId = row.SUBACCOUNT_ID,
                                v.modifiedAt = datetime()
                        WITH row, v
                        MATCH (c:Channel:YouTube {channelId: row.CHANNELID})
                        MERGE (v)-[:APPEARS_IN_CHANNEL]->(c)
                        FOREACH (y in CASE WHEN row.VIDEO_PRIVACY_STATUS = \'Public\' THEN [1] ELSE [] END | SET v:PublicVideo)
                        FOREACH (y in CASE WHEN row.TYPE_OF_VIDEO = \'official\' THEN [1] ELSE [] END | SET v:Official)
                        FOREACH (y in CASE WHEN row.TYPE_OF_VIDEO = \'lyric\' THEN [1] ELSE [] END | SET v:Official)
                        FOREACH (y in CASE WHEN row.TYPE_OF_VIDEO = \'MUSIC_VIDEO\' THEN [1] ELSE [] END | SET v:Official)
                        FOREACH (y in CASE WHEN row.TYPE_OF_VIDEO = \'TV_EPISODE\' THEN [1] ELSE [] END | SET v:Other)
                        FOREACH (y in CASE WHEN row.TYPE_OF_VIDEO = \'MOVIE\' THEN [1] ELSE [] END | SET v:Other)
                        FOREACH (y in CASE WHEN row.TYPE_OF_VIDEO = \'WEB\' THEN [1] ELSE [] END | SET v:Other)
                        FOREACH (y in CASE WHEN row.TYPE_OF_VIDEO = \'ART_TRACK_VIDEO\' THEN [1] ELSE [] END | SET v:ArtTrack)
                    ',
                    {batchSize:1000, iterateList:true, parallel:false}
                );
            ]]>
        </query>
        <query>
            <![CDATA[
                CALL apoc.periodic.iterate(
                    '
                        WITH "
                            SELECT DISTINCT
                              a.asset_id as assetid,
                              \'5bfseWNmlds\' as videoid,
                              \'self\' as uploadertype,
                              \'UCFg7-w47VVA3ozhvnR6P0YQ\' as channelid,
                              a.isrc,
                              a.song as trackname,
                              \'QMFMG1321152\' as video_isrc,
                              IFF(a.asset_type = \'SOUND_RECORDING\', \'sound_recording\', \'video\') as asset_type
                            FROM facts.prod.staging_raw_youtube_asset_report a
                            WHERE a.asset_id IN (\'A870495696613223\', \'A313901392659024\')
                            ORDER BY 1, 2, 3, 4, 5, 6, 7;
                        " AS sql
                        CALL apoc.load.jdbc("snowflake_orchard", sql) YIELD row RETURN row
                    ',
                    '
                        WITH row
                        MERGE (a:YoutubeAsset:YouTube {assetId: row.ASSETID})
                            ON CREATE SET
                                a.id = apoc.create.uuid(),
                                a.isrc = row.ISRC,
                                a.name = row.TRACKNAME,
                                a.createdAt = datetime(),
                                a.modifiedAt = datetime()
                            ON MATCH SET
                                a.isrc = row.ISRC,
                                a.name = row.TRACKNAME,
                                a.modifiedAt = datetime()
                        WITH row, a
                        MATCH (v:Video:YouTube {videoId: row.VIDEOID})
                        FOREACH (_ IN CASE WHEN row.ISRC <> row.VIDEO_ISRC THEN [1] ELSE [] END |
                          MERGE (a)-[:APPEARS_IN_VIDEO]->(v)
                        )
                        FOREACH (_ IN CASE WHEN row.ISRC = row.VIDEO_ISRC THEN [1] ELSE [] END |
                          MERGE (a)-[:IS]->(v)
                        )
                    ',
                    {batchSize:1000, iterateList:true, parallel:false}
                );
            ]]>
        </query>
    </changeset>
</changelog>

