Workflow: develop a modular n8n workflow that supports Notion Webhook Create Webhook
Integrations: function, if, merge, notion, set, webhook

{"nodes": [{"name": "Get Team Members", "type": "n8n-nodes-base.function", "position": [1030, 150], "parameters": {"functionCode": "const newItems = [];\n\nfor (const item of items[0].json.body.teamMembers) {\n  const newItem = { json: item }\n  newItems.push(newItem);\n}\n\nreturn newItems;\n"}, "typeVersion": 1, "alwaysOutputData": false}, {"name": "Merge", "type": "n8n-nodes-base.merge", "position": [1250, 460], "parameters": {"mode": "multiplex"}, "typeVersion": 1}, {"name": "Query Current Semester", "type": "n8n-nodes-base.notion", "position": [700, 20], "parameters": {"options": {"sort": {"sortValue": [{"key": "created_time", "direction": "descending", "timestamp": true}]}, "filter": {"singleCondition": {"key": "Is Current?|checkbox", "condition": "equals", "checkboxValue": true}}}, "resource": "databasePage", "operation": "getAll", "returnAll": true, "databaseId": "2003319a-bc73-423a-9378-01999b4884fb"}, "credentials": {"notionApi": "Oasis Hub Production"}, "typeVersion": 1}, {"name": "Select Semester ID and Projects Count", "type": "n8n-nodes-base.set", "position": [1030, 330], "parameters": {"values": {"number": [{"name": "projectsCount", "value": "={{$json[\"Projects\"].length}}"}], "string": [{"name": "semesterID", "value": "={{$json[\"id\"]}}"}]}, "options": {}, "keepOnlySet": true}, "executeOnce": true, "typeVersion": 1}, {"name": "Use Default Name if Not Specified", "type": "n8n-nodes-base.set", "position": [1470, 460], "parameters": {"values": {"string": [{"name": "projectName", "value": "={{ $json[\"projectName\"] == \"\" ? \"Project Group \" + ($json[\"projectsCount\"] + 1) : $json[\"projectName\"] }}"}]}, "options": {}}, "typeVersion": 1}, {"name": "Select Project Showcase ID", "type": "n8n-nodes-base.set", "position": [1890, 460], "parameters": {"values": {"string": [{"name": "projectID", "value": "={{$json[\"id\"]}}"}]}, "options": {}, "keepOnlySet": true}, "typeVersion": 1}, {"name": "Get Project Name & Idea", "type": "n8n-nodes-base.set", "position": [820, 480], "parameters": {"values": {"string": [{"name": "projectName", "value": "={{$json[\"body\"][\"projectName\"]}}"}, {"name": "projectIdea", "value": "={{$json[\"body\"][\"projectIdea\"]}}"}], "boolean": []}, "options": {}, "keepOnlySet": true}, "typeVersion": 1}, {"name": "Create Project", "type": "n8n-nodes-base.notion", "position": [1690, 460], "parameters": {"blockUi": {"blockValues": []}, "resource": "databasePage", "databaseId": "f9c8a070-d398-482b-a7a4-5e42c7982e6a", "propertiesUi": {"propertyValues": [{"key": "Name|title", "title": "={{$json[\"projectName\"]}}"}, {"key": "Semesters|relation", "relationValue": ["={{$json[\"semesterID\"]}}"]}, {"key": "Project Idea|rich_text", "textContent": "={{$json[\"projectIdea\"]}}"}]}}, "credentials": {"notionApi": "Oasis Hub Production"}, "typeVersion": 1}, {"name": "If user exists", "type": "n8n-nodes-base.if", "position": [1690, 170], "parameters": {"conditions": {"string": [], "boolean": [{"value1": "={{Object.keys($json).includes(\"id\") }}", "value2": true}]}}, "executeOnce": false, "typeVersion": 1, "alwaysOutputData": false}, {"name": "Create User", "type": "n8n-nodes-base.notion", "position": [1890, 270], "parameters": {"resource": "databasePage", "databaseId": "27a30c5b-c418-4200-8f48-d7fb7b043fbe", "propertiesUi": {"propertyValues": [{"key": "Name|title", "title": "={{$json[\"name\"]}}"}, {"key": "Email|email", "emailValue": "={{$json[\"email\"]}}"}]}}, "credentials": {"notionApi": "Oasis Hub Production"}, "typeVersion": 1}, {"name": "Query for User", "type": "n8n-nodes-base.notion", "position": [1250, 260], "parameters": {"options": {"filter": {"singleCondition": {"key": "Email|email", "condition": "equals", "emailValue": "={{$json[\"email\"]}}"}}}, "resource": "databasePage", "operation": "getAll", "returnAll": true, "databaseId": "27a30c5b-c418-4200-8f48-d7fb7b043fbe"}, "credentials": {"notionApi": "Oasis Hub Production"}, "executeOnce": false, "typeVersion": 1, "alwaysOutputData": true}, {"name": "Merge1", "type": "n8n-nodes-base.merge", "position": [1460, 170], "parameters": {"mode": "mergeByKey", "propertyName1": "email", "propertyName2": "Email"}, "typeVersion": 1}, {"name": "Merge2", "type": "n8n-nodes-base.merge", "position": [2750, -160], "parameters": {"mode": "multiplex"}, "typeVersion": 1}, {"name": "Update Semester for User", "type": "n8n-nodes-base.notion", "position": [3240, -160], "parameters": {"pageId": "={{$json[\"id\"]}}", "resource": "databasePage", "operation": "update", "propertiesUi": {"propertyValues": [{"key": "Semesters|relation", "relationValue": ["={{$json[\"allSemesterIDs\"].join(',')}}"]}]}}, "credentials": {"notionApi": "Oasis Hub Production"}, "typeVersion": 1}, {"name": "Query User", "type": "n8n-nodes-base.notion", "position": [2460, 170], "parameters": {"options": {"filter": {"singleCondition": {"key": "Email|email", "condition": "equals", "emailValue": "={{$json[\"email\"]}}"}}}, "resource": "databasePage", "operation": "getAll", "returnAll": true, "databaseId": "27a30c5b-c418-4200-8f48-d7fb7b043fbe"}, "credentials": {"notionApi": "Oasis Hub Production"}, "typeVersion": 1, "alwaysOutputData": true}, {"name": "Select Semester ID", "type": "n8n-nodes-base.set", "position": [1020, -180], "parameters": {"values": {"string": [{"name": "semesterID", "value": "={{$json[\"id\"]}}"}]}, "options": {}, "keepOnlySet": true}, "executeOnce": true, "typeVersion": 1}, {"name": "Update Project Relation", "type": "n8n-nodes-base.notion", "position": [3240, 440], "parameters": {"pageId": "={{$json[\"id\"]}}", "resource": "databasePage", "operation": "update", "propertiesUi": {"propertyValues": [{"key": "Project|relation", "relationValue": ["={{$json[\"allProjectIDs\"].join(\",\")}}"]}]}}, "credentials": {"notionApi": "Oasis Hub Production"}, "typeVersion": 1}, {"name": "Merge3", "type": "n8n-nodes-base.merge", "position": [2750, 440], "parameters": {"mode": "multiplex"}, "typeVersion": 1}, {"name": "Concatenate SemesterIDs", "type": "n8n-nodes-base.function", "position": [3010, -160], "parameters": {"functionCode": "for (item of items) {\n  // Get the current semester ID\n  const currentSemesterID = item.json[\"semesterID\"]\n  let allSemesterIDs = [currentSemesterID];\n\n  // Add semesters that the user is already associated with\n  if (item.json[\"Semesters\"]?.length > 0) {\n    allSemesterIDs = allSemesterIDs.concat(item.json[\"Semesters\"].filter(semesterID => semesterID !== currentSemesterID));\n  }\n\n  // Set allSemesterIDs which is used to update the relation\n  item.json[\"allSemesterIDs\"] = allSemesterIDs\n}\n\nreturn items;\n"}, "typeVersion": 1}, {"name": "Concatenate ProjectIDs", "type": "n8n-nodes-base.function", "position": [3000, 440], "parameters": {"functionCode": "for (item of items) {\n  // Get the project id for the new project\n  const newProjectID = item.json[\"projectID\"]\n  let allProjectIDs = [newProjectID];\n\n  // Add projects that the user already has\n  if (item.json[\"Project\"]?.length > 0) {\n    allWorkspaceIDs = allWorkspaceIDs.concat(item.json[\"Project\"].filter(projectID => projectID !== newProjectID));\n  }\n\n  // Set allProjectIDs which is used to update the relation\n  item.json[\"allProjectIDs\"] = allProjectIDs\n}\n\nreturn items;\n"}, "typeVersion": 1}, {"name": "Merge4", "type": "n8n-nodes-base.merge", "position": [2240, 170], "parameters": {}, "typeVersion": 1}, {"name": "Set Email", "type": "n8n-nodes-base.set", "position": [2060, 270], "parameters": {"values": {"string": [{"name": "email", "value": "={{$json[\"Email\"]}}"}]}, "options": {}, "keepOnlySet": true}, "typeVersion": 1}, {"name": "Team Creation", "type": "n8n-nodes-base.webhook", "notes": "Example Input Data:\n{\"projectIdea\":\"A hub for all things Oasis\",\"projectName\":\"Oasis Hub\",\"teamMembers\":[{\"name\":\"Will Stenzel\",\"email\":\"stenzel.w@northeastern.edu\"},{\"name\":\"Jane Doe\",\"email\":\"doe.j@northeastern.edu\"}]}", "position": [460, 150], "webhookId": "6f000a46-9bbf-4e1c-8e11-b64d9b8c8fb7", "parameters": {"path": "team-create", "options": {"responseData": ""}, "httpMethod": "POST", "authentication": "basicAuth"}, "credentials": {"httpBasicAuth": "Oasis Basic Auth Creds"}, "notesInFlow": true, "typeVersion": 1}], "connections": {"Merge": {"main": [[{"node": "Use Default Name if Not Specified", "type": "main", "index": 0}]]}, "Merge1": {"main": [[{"node": "If user exists", "type": "main", "index": 0}]]}, "Merge2": {"main": [[{"node": "Concatenate SemesterIDs", "type": "main", "index": 0}]]}, "Merge3": {"main": [[{"node": "Concatenate ProjectIDs", "type": "main", "index": 0}]]}, "Merge4": {"main": [[{"node": "Query User", "type": "main", "index": 0}]]}, "Set Email": {"main": [[{"node": "Merge4", "type": "main", "index": 1}]]}, "Query User": {"main": [[{"node": "Merge2", "type": "main", "index": 1}, {"node": "Merge3", "type": "main", "index": 0}]]}, "Create User": {"main": [[{"node": "Set Email", "type": "main", "index": 0}]]}, "Team Creation": {"main": [[{"node": "Get Project Name & Idea", "type": "main", "index": 0}, {"node": "Get Team Members", "type": "main", "index": 0}, {"node": "Query Current Semester", "type": "main", "index": 0}]]}, "Create Project": {"main": [[{"node": "Select Project Showcase ID", "type": "main", "index": 0}]]}, "If user exists": {"main": [[{"node": "Merge4", "type": "main", "index": 0}], [{"node": "Create User", "type": "main", "index": 0}]]}, "Query for User": {"main": [[{"node": "Merge1", "type": "main", "index": 1}]]}, "Get Team Members": {"main": [[{"node": "Query for User", "type": "main", "index": 0}, {"node": "Merge1", "type": "main", "index": 0}]]}, "Select Semester ID": {"main": [[{"node": "Merge2", "type": "main", "index": 0}]]}, "Concatenate ProjectIDs": {"main": [[{"node": "Update Project Relation", "type": "main", "index": 0}]]}, "Query Current Semester": {"main": [[{"node": "Select Semester ID and Projects Count", "type": "main", "index": 0}, {"node": "Select Semester ID", "type": "main", "index": 0}]]}, "Concatenate SemesterIDs": {"main": [[{"node": "Update Semester for User", "type": "main", "index": 0}]]}, "Get Project Name & Idea": {"main": [[{"node": "Merge", "type": "main", "index": 1}]]}, "Select Project Showcase ID": {"main": [[{"node": "Merge3", "type": "main", "index": 1}]]}, "Use Default Name if Not Specified": {"main": [[{"node": "Create Project", "type": "main", "index": 0}]]}, "Select Semester ID and Projects Count": {"main": [[{"node": "Merge", "type": "main", "index": 0}]]}}}