--liquibase formatted cypher --changeset bburton:CCM-1723_create_identity_and_profile_for_export_spotify_catalog WITH [ { id: "15984860-2b4f-4c19-a7f6-9975a0ddd61b", name: "lambda-product-staging-export-spotify-catalog" } ] AS machines, "http://jira.theorchard.com/browse/CCM-1723" AS ticket, "10436b38-5e11-472d-b6a4-bf1ee2b1b438" AS BenBurton UNWIND machines AS machine MERGE (i:Identity {id: machine.id}) ON CREATE SET i.createdAt = datetime(), i.createdBy = ticket, i.auditUser = BenBurton SET i.name = machine.name, i.updatedAt = datetime(), i.updatedBy = ticket WITH i, ticket OPTIONAL MATCH (i)-[:HAS_PROFILE]->(pExisting:Profile {profileType: "ContentProfile"}) WITH i, ticket, pExisting FOREACH (_ IN CASE WHEN pExisting IS NULL THEN [1] ELSE [] END | MERGE (increment:IncrementId {nodeName: "Profile"}) ON CREATE SET increment.id = 2 ON MATCH SET increment.id = increment.id + 1 CREATE (pNew:Profile { uuid: randomUUID(), profileType: "ContentProfile", profileId: increment.id, roles: [], fullCatalogAccess:true, profileName: i.name, createdAt: datetime(), createdBy: ticket, updatedAt: datetime(), updatedBy: ticket }) MERGE (i)-[:HAS_PROFILE]->(pNew) ) WITH i, ticket MATCH (i)-[:HAS_PROFILE]->(p:Profile {profileType: "ContentProfile"}) SET p.roles = coalesce(p.roles, []), p.fullCatalogAccess = true, p.profileName = i.name, p.updatedAt = datetime(), p.updatedBy = ticket WITH i, p MATCH (v:Vendor {id: "*"}) MERGE (p)-[:HAS_ACCESS_TO]->(v) RETURN i, p, v; --rollback WITH [ --rollback "15984860-2b4f-4c19-a7f6-9975a0ddd61b" --rollback ] AS machineIds --rollback --rollback UNWIND machineIds AS id --rollback MATCH (i:Identity {id: id}) --rollback OPTIONAL MATCH (i)-[:HAS_PROFILE]->(p:Profile {profileType: "ContentProfile"}) --rollback WITH i, p --rollback FOREACH (_ IN CASE WHEN p IS NULL THEN [] ELSE [1] END | DETACH DELETE p) --rollback DETACH DELETE i;