<?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="KDH-76_sync_active_assets:1" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                    WITH tuid_asset_neo AS (
                        SELECT DISTINCT ha.orchard_track_id AS tuid, oa.filename || '.flac' AS filename
                        FROM facts.prod.HAS_ASSET AS ha
                        INNER JOIN facts.prod.ORCHARD_ASSET AS oa
                            ON ha.orchard_asset_id = oa.id
                        WHERE oa.extension = 'flac'
                    ),
                    tuid_asset_ows as (
                        SELECT au.TRACK_UNIQUE_ID AS tuid, af.filename, au.deleted
                        FROM ORCHARD_APP_REPORTING_V2.PROD_OWS_ASSETS_OWS_ASSETS.ASSET_UPLOAD AS au
                        INNER JOIN ORCHARD_APP_REPORTING_V2.PROD_OWS_ASSETS_OWS_ASSETS.ASSET_FINAL AS af
                            ON au.ID = af.ASSET_UPLOAD_ID
                        INNER JOIN ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.track t
                            ON au.track_unique_id = t.id
                        WHERE au.API_VERSION = 2
                            AND af.ASSET_TYPE = 'FLAC'
                            AND au.TRACK_UNIQUE_ID != 0
                            AND au.IS_CORRECTION = 0
                            AND TIMEDIFF(MINUTE, au.CREATED_TIMESTAMP, CURRENT_TIMESTAMP()) > 30
                        QUALIFY ROW_NUMBER() OVER (PARTITION BY au.TRACK_UNIQUE_ID ORDER BY af.id desc) = 1
                    ),
                    diff AS (
                        SELECT tuid, filename
                        FROM tuid_asset_ows
                        WHERE deleted = 0
                        MINUS
                        SELECT tuid, filename
                        FROM tuid_asset_neo
                    ),
                    backfill AS (
                        SELECT af.filename, au.bucket_name AS bucket, au.track_unique_id
                        FROM diff AS d
                        INNER JOIN ORCHARD_APP_REPORTING_V2.PROD_OWS_ASSETS_OWS_ASSETS.ASSET_UPLOAD AS au
                            ON d.tuid = au.TRACK_UNIQUE_ID
                        INNER JOIN ORCHARD_APP_REPORTING_V2.PROD_OWS_ASSETS_OWS_ASSETS.ASSET_FINAL AS af
                            ON af.ASSET_UPLOAD_ID = au.ID AND d.filename = af.filename
                        INNER JOIN facts.prod.ORCHARD_TRACK AS ot
                            ON au.track_unique_id = ot.id and ot."TYPE" = 'music'
                        WHERE au.API_VERSION = 2
                            AND au.IS_CORRECTION = 0
                            AND af.ASSET_TYPE = 'FLAC'
                    )
                    SELECT
                        FILENAME,
                        BUCKET,
                        TRACK_UNIQUE_ID
                    FROM backfill;
               ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                WITH
                  event,
                  {
                    createdAt: datetime(),
                    createdBy: 'database/KDH-76_sync_active_assets:1',
                    lastModifiedAt: datetime(),
                    lastModifiedBy: 'database/KDH-76_sync_active_assets:1'
                  } AS createdData,
                  {
                    lastModifiedAt: datetime(),
                    lastModifiedBy: 'database/KDH-76_sync_active_assets:1'
                  } AS updatedData
                MERGE (oa:OrchardAsset {
                  filename: split(event.FILENAME, '.')[0],
                  extension: split(event.FILENAME, '.')[1],
                  source: 'ows-assets-db'
                })
                  ON CREATE SET
                    oa.id = apoc.create.uuid(),
                    oa.bucket = event.BUCKET,
                    oa += createdData
                  ON MATCH SET
                    oa.bucket = event.BUCKET,
                    oa += updatedData

                MERGE (t:Track:Orchard {id: toInteger(event.TRACK_UNIQUE_ID)})
                  ON CREATE SET
                    t += createdData

                MERGE (t)-[newHa:HAS_ASSET]->(oa)
                  ON CREATE SET
                    newHa += createdData
                ;
            ]]>
        </cypherquery>
    </changeset>
</changelog>
