--liquibase formatted cypher --changeset rlieberman:CCM-3702_create_identity_transfer_job WITH [ { id: "82fed62a-7856-4201-85f3-8733df933664", name: "lambda-product-staging-google-drive-asset-transfer" } ] AS machines, "http://jira.theorchard.com/browse/CCM-3702" AS ticket, "f136efe1-ef6d-43e8-adf4-3db3130aee3c" AS RheaLieberman UNWIND machines AS machine MERGE (i:Identity {id: machine.id}) ON CREATE SET i.createdAt = datetime(), i.createdBy = ticket, i.auditUser = RheaLieberman 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 "82fed62a-7856-4201-85f3-8733df933664" --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;