<?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-4023_create_gsr_video_nodes:1" author="oefanova">
        <query>
            <![CDATA[
                CALL apoc.periodic.iterate(
                    "
                        MATCH (v:Video)
                        WHERE NOT (v)<-[:IS]-(:YoutubeAsset)<-[:REPRESENTS]-(:GlobalSoundRecording)
                        RETURN v
                    ",
                    "
                        WITH *, 'python-neo4j-cypher-scheduler/augment-metadata/missing-youtube-asset' AS by

                        MERGE (gsr:GlobalSoundRecording {isrc: v.isrc})
                        ON CREATE SET
                          gsr.id = apoc.create.uuid(),
                          gsr.createdAt = datetime(),
                          gsr.createdBy = by,
                          gsr.name = v.name,
                          gsr.types = ['video']

                        MERGE (v)<-[is:IS]-(ya:YoutubeAsset)
                        ON CREATE SET
                            ya.id = apoc.create.uuid(),
                            ya.assetId = v.videoId + '-' + v.isrc,
                            ya.isrc = v.isrc,
                            ya.name = v.name,
                            ya.createdAt = datetime(),
                            ya.createdBy = by,
                            is.createdAt = datetime(),
                            is.createdBy = by

                        MERGE (ya)<-[r:REPRESENTS]-(gsr)
                        ON CREATE SET
                            r.createdAt = datetime(),
                            r.createdBy = by
                    ",
                    {batchSize:100, iterateList:true, parallel:false}
                )
                YIELD total, failedOperations, errorMessages
                CALL apoc.util.validate(failedOperations > 0, "At least one sub-operation failed: %s", [reduce(all_errors = "", error IN keys(errorMessages) | all_errors + ", " + error)])
                RETURN total;
            ]]>
        </query>
    </changeset>
</changelog>

