<?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="YT-246_backfill_missing_videos:1" author="ayermakov">
        <query>
            CALL apoc.periodic.iterate(
                '
                    WITH "
                        SELECT DISTINCT
                          v.video_id,
                          v.channel_id,
                          v.isrc as video_isrc,
                          v.video_title,
                          v.time_uploaded,
                          v.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,
                          v.video_privacy_status
                         FROM facts.prod.staging_raw_youtube_video_report v
                         LEFT JOIN facts.prod.staging_raw_youtube_asset_report a
                          ON v.asset_id = a.asset_id
                         LEFT JOIN facts.prod.dim_track_clean dtv
                          ON v.isrc = dtv.isrc
                         LEFT JOIN orchard_app_reporting.art_relations.product_video pv
                          ON pv.upc = dtv.upc
                         WHERE v.isrc IS NOT NULL
                          AND v.content_type = \'PARTNER_UPLOADED\'
                          AND v.licensor = \'theorchard\';
                    " AS sql
                    CALL apoc.load.jdbc("snowflake_orchard", sql) YIELD row RETURN row
                ',
                '
                    WITH row
                    MERGE (v:Video:YouTube {videoId: row.VIDEO_ID})
                        ON CREATE SET
                            v.id = apoc.create.uuid(),
                            v.name = row.VIDEO_TITLE,
                            v.isrc = row.VIDEO_ISRC,
                            v.timeUploaded = datetime(row.TIME_UPLOADED),
                            v.timePublished = datetime(row.TIME_PUBLISHED),
                            v.createdAt = datetime(),
                            v.modifiedAt = datetime()
                    WITH row, v
                    MATCH (c:Channel:YouTube {channelId: row.CHANNEL_ID})
                    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:Lyric)
                    FOREACH (y in CASE WHEN row.TYPE_OF_VIDEO = \'MUSIC_VIDEO\' THEN [1] ELSE [] END | SET v:MusicVideo)
                    FOREACH (y in CASE WHEN row.TYPE_OF_VIDEO = \'TV_EPISODE\' THEN [1] ELSE [] END | SET v:TvEpisode)
                    FOREACH (y in CASE WHEN row.TYPE_OF_VIDEO = \'MOVIE\' THEN [1] ELSE [] END | SET v:Movie)
                    FOREACH (y in CASE WHEN row.TYPE_OF_VIDEO = \'WEB\' THEN [1] ELSE [] END | SET v:Web)
                    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>
    </changeset>
</changelog>
