From a8c4aa93518cb59b8b09bf40fb7c7ceeabed3684 Mon Sep 17 00:00:00 2001 From: Vargha Csongor Date: Mon, 24 Feb 2025 22:45:51 +0100 Subject: [PATCH] init cypher queries --- app/package-lock.json | 388 ++++++++++-------- app/src/lib/model.ts | 17 +- .../lib/server/queries/create_person.cypher | 1 + .../lib/server/queries/get_family_tree.cypher | 7 + .../queries/get_people_by_properties.cypher | 1 + .../queries/get_person_by_google_id.cypher | 1 + .../server/queries/get_person_by_id.cypher | 1 + .../server/queries/hard_delete_person.cypher | 0 app/src/lib/server/queries/schema.cypher | 17 + .../server/queries/soft_delete_person.cypher | 4 + .../lib/server/queries/update_person.cypher | 3 + app/src/lib/server/user.ts | 41 +- 12 files changed, 288 insertions(+), 193 deletions(-) create mode 100644 app/src/lib/server/queries/create_person.cypher create mode 100644 app/src/lib/server/queries/get_family_tree.cypher create mode 100644 app/src/lib/server/queries/get_people_by_properties.cypher create mode 100644 app/src/lib/server/queries/get_person_by_google_id.cypher create mode 100644 app/src/lib/server/queries/get_person_by_id.cypher create mode 100644 app/src/lib/server/queries/hard_delete_person.cypher create mode 100644 app/src/lib/server/queries/schema.cypher create mode 100644 app/src/lib/server/queries/soft_delete_person.cypher create mode 100644 app/src/lib/server/queries/update_person.cypher diff --git a/app/package-lock.json b/app/package-lock.json index b0f6364..4250874 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -207,9 +207,9 @@ } }, "node_modules/@cloudflare/workerd-darwin-64": { - "version": "1.20250204.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20250204.0.tgz", - "integrity": "sha512-HpsgbWEfvdcwuZ8WAZhi1TlSCyyHC3tbghpKsOqGDaQNltyAFAWqa278TPNfcitYf/FmV4961v3eqUE+RFdHNQ==", + "version": "1.20250214.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20250214.0.tgz", + "integrity": "sha512-cDvvedWDc5zrgDnuXe2qYcz/TwBvzmweO55C7XpPuAWJ9Oqxv81PkdekYxD8mH989aQ/GI5YD0Fe6fDYlM+T3Q==", "cpu": [ "x64" ], @@ -224,9 +224,9 @@ } }, "node_modules/@cloudflare/workerd-darwin-arm64": { - "version": "1.20250204.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20250204.0.tgz", - "integrity": "sha512-AJ8Tk7KMJqePlch3SH8oL41ROtsrb07hKRHD6M+FvGC3tLtf26rpteAAMNYKMDYKzFNFUIKZNijYDFZjBFndXQ==", + "version": "1.20250214.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20250214.0.tgz", + "integrity": "sha512-NytCvRveVzu0mRKo+tvZo3d/gCUway3B2ZVqSi/TS6NXDGBYIJo7g6s3BnTLS74kgyzeDOjhu9j/RBJBS809qw==", "cpu": [ "arm64" ], @@ -241,9 +241,9 @@ } }, "node_modules/@cloudflare/workerd-linux-64": { - "version": "1.20250204.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20250204.0.tgz", - "integrity": "sha512-RIUfUSnDC8h73zAa+u1K2Frc7nc+eeQoBBP7SaqsRe6JdX8jfIv/GtWjQWCoj8xQFgLvhpJKZ4sTTTV+AilQbw==", + "version": "1.20250214.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20250214.0.tgz", + "integrity": "sha512-pQ7+aHNHj8SiYEs4d/6cNoimE5xGeCMfgU1yfDFtA9YGN9Aj2BITZgOWPec+HW7ZkOy9oWlNrO6EvVjGgB4tbQ==", "cpu": [ "x64" ], @@ -258,9 +258,9 @@ } }, "node_modules/@cloudflare/workerd-linux-arm64": { - "version": "1.20250204.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20250204.0.tgz", - "integrity": "sha512-8Ql8jDjoIgr2J7oBD01kd9kduUz60njofrBpAOkjCPed15He8e8XHkYaYow3g0xpae4S2ryrPOeoD3M64sRxeg==", + "version": "1.20250214.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20250214.0.tgz", + "integrity": "sha512-Vhlfah6Yd9ny1npNQjNgElLIjR6OFdEbuR3LCfbLDCwzWEBFhIf7yC+Tpp/a0Hq7kLz3sLdktaP7xl3PJhyOjA==", "cpu": [ "arm64" ], @@ -275,9 +275,9 @@ } }, "node_modules/@cloudflare/workerd-windows-64": { - "version": "1.20250204.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20250204.0.tgz", - "integrity": "sha512-RpDJO3+to+e17X3EWfRCagboZYwBz2fowc+jL53+fd7uD19v3F59H48lw2BDpHJMRyhg6ouWcpM94OhsHv8ecA==", + "version": "1.20250214.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20250214.0.tgz", + "integrity": "sha512-GMwMyFbkjBKjYJoKDhGX8nuL4Gqe3IbVnVWf2Q6086CValyIknupk5J6uQWGw2EBU3RGO3x4trDXT5WphQJZDQ==", "cpu": [ "x64" ], @@ -2116,12 +2116,12 @@ } }, "node_modules/@octokit/graphql": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.0.tgz", - "integrity": "sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.1.tgz", + "integrity": "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==", "license": "MIT", "dependencies": { - "@octokit/request": "^8.3.0", + "@octokit/request": "^8.4.1", "@octokit/types": "^13.0.0", "universal-user-agent": "^6.0.0" }, @@ -3011,13 +3011,13 @@ } }, "node_modules/@storybook/builder-vite": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-8.5.6.tgz", - "integrity": "sha512-uvNo8wAULW2+IOlsFCrszvH6juBDoOEYZIn0WLGzRKbMvLGt3j6CB6d2QjRrLs9p62ayia51fTpJfhIISM9new==", + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-8.5.8.tgz", + "integrity": "sha512-nm07wXP4MN7HlWqLRomSFHibwrwiY7V4kTohgsXSjTUod0J+xY+XvmkM4YRK2QYcUgVesG+Q2q3Q5NHof07sfg==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/csf-plugin": "8.5.6", + "@storybook/csf-plugin": "8.5.8", "browser-assert": "^1.2.1", "ts-dedent": "^2.0.0" }, @@ -3026,14 +3026,31 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.5.6", + "storybook": "^8.5.8", "vite": "^4.0.0 || ^5.0.0 || ^6.0.0" } }, + "node_modules/@storybook/builder-vite/node_modules/@storybook/csf-plugin": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.5.8.tgz", + "integrity": "sha512-9p+TFutbvtPYEmg14UsvqBDWKP/p/+OkIdi+gkwCMw0yiJF/+7ErMHDB0vr5SpJpU7SFQmfpY2c/LaglEtaniw==", + "dev": true, + "license": "MIT", + "dependencies": { + "unplugin": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.5.8" + } + }, "node_modules/@storybook/components": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.5.6.tgz", - "integrity": "sha512-d2mhnnce2C03lRhBEtVR9lS78YueQGBS949R3QXPsEXmrkfDMpcnFI3DIOByjnea6ZeS0+i4lYjnfiAJb0oiMQ==", + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.5.8.tgz", + "integrity": "sha512-PPEMqWPXn7rX+qISaOOv9CDSuuvG538f0+4M5Ppq2LwpjXecgOG5ktqJF0ZqxmTytT+RpEaJmgjGW0dMAKZswA==", "dev": true, "license": "MIT", "funding": { @@ -3045,16 +3062,16 @@ } }, "node_modules/@storybook/core": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/@storybook/core/-/core-8.5.6.tgz", - "integrity": "sha512-ibgTGI3mcSsADABIQuhHWL8rxqF6CvooKIWpkZsB9kwNActS3OJzfCSAZDcgtvRkwaarPVjYX/sAOBzjqQNkXg==", + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-8.5.8.tgz", + "integrity": "sha512-OT02DQhkGpBgn5P+nZOZmbzxqubC4liVqbhpjp/HOGi5cOA3+fCJzDJeSDTu+pPh7dZnopC4XnR+5dWjtOJHdA==", "dev": true, "license": "MIT", "dependencies": { "@storybook/csf": "0.1.12", "better-opn": "^3.0.2", "browser-assert": "^1.2.1", - "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0", + "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0", "esbuild-register": "^3.5.0", "jsdoc-type-pratt-parser": "^4.0.0", "process": "^0.11.10", @@ -3167,9 +3184,9 @@ } }, "node_modules/@storybook/manager-api": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.5.6.tgz", - "integrity": "sha512-24Fm1LnRs1uCTMDid1Mmii0mQvmyM//IfzdtuVvzh0OSvatEKKLX+o3vdG/3/QCN1FVyq1hI9uHnkOaz6EuH4Q==", + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.5.8.tgz", + "integrity": "sha512-ik3yikvYxAJMDFg0s3Pm7hZWucAlkFaaO7e2RlfOctaJFdaEi3evR4RS7GdmS38uKBEk31RC7x+nnIJkqEC59A==", "dev": true, "license": "MIT", "funding": { @@ -3181,9 +3198,9 @@ } }, "node_modules/@storybook/preview-api": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.5.6.tgz", - "integrity": "sha512-brT8jvw+QYoAyddOtPTqMc6tHDKye24oYkL5Bvp96nQi5AcNhkpL1eYfS7dtcQFV7j010Ox6RlzHPt+Ln8XB+Q==", + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.5.8.tgz", + "integrity": "sha512-HJoz2o28VVprnU5OG6JO6CHrD3ah6qVPWixbnmyUKd0hOYF5dayK5ptmeLyUpYX56Eb2KoYcuVaeQqAby4RkNw==", "dev": true, "license": "MIT", "funding": { @@ -3211,17 +3228,17 @@ } }, "node_modules/@storybook/svelte": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/@storybook/svelte/-/svelte-8.5.6.tgz", - "integrity": "sha512-NOF8mHJE+l9fpqSwpRdGxyIN4bqELTA9KnZkWJbbA13W5Yx0mNsPsPNaj+8HWsf41LewU82y6wLysxbb1bagpQ==", + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@storybook/svelte/-/svelte-8.5.8.tgz", + "integrity": "sha512-5K297CRMvsbDwrkIwSzyrDqfz6WigeO1OEvQeYVsyxGMK0OTZKeuouuRPIgXQvNIVf76Rm1hkGkhpUmtjwIKRA==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/components": "8.5.6", + "@storybook/components": "8.5.8", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "8.5.6", - "@storybook/preview-api": "8.5.6", - "@storybook/theming": "8.5.6", + "@storybook/manager-api": "8.5.8", + "@storybook/preview-api": "8.5.8", + "@storybook/theming": "8.5.8", "sveltedoc-parser": "^4.2.1", "ts-dedent": "^2.0.0", "type-fest": "~2.19" @@ -3234,19 +3251,19 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.5.6", + "storybook": "^8.5.8", "svelte": "^4.0.0 || ^5.0.0" } }, "node_modules/@storybook/svelte-vite": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/@storybook/svelte-vite/-/svelte-vite-8.5.6.tgz", - "integrity": "sha512-v7rY5f9hHuUDIaN62901L7Z92CoTFf30DJYI1A7ZnQ57BVtsv+ZhgUFAEr7d8fAQh3JHR4bhib7JR9TgcAySrw==", + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@storybook/svelte-vite/-/svelte-vite-8.5.8.tgz", + "integrity": "sha512-O/vo2FSaXKgBxwm5LRXdnzZASkQCeLGPh3dHKXmKVJMLqSn2qFozGvX5k1sw9XbB5eaKtJDbTT2IUxEocCVn/w==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/builder-vite": "8.5.6", - "@storybook/svelte": "8.5.6", + "@storybook/builder-vite": "8.5.8", + "@storybook/svelte": "8.5.8", "magic-string": "^0.30.0", "svelte-preprocess": "^5.1.1", "svelte2tsx": "^0.7.13", @@ -3263,22 +3280,22 @@ }, "peerDependencies": { "@sveltejs/vite-plugin-svelte": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", - "storybook": "^8.5.6", + "storybook": "^8.5.8", "svelte": "^4.0.0 || ^5.0.0", "vite": "^4.0.0 || ^5.0.0 || ^6.0.0" } }, "node_modules/@storybook/sveltekit": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/@storybook/sveltekit/-/sveltekit-8.5.6.tgz", - "integrity": "sha512-XGQCuCkPdns6f//9ZxLgSg/8tsE+9coiTf4zk3XZzdvTbB2sQlH2FRq9p/gkOCgHrm9E5oqEOFJEEPm/6e/VHA==", + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@storybook/sveltekit/-/sveltekit-8.5.8.tgz", + "integrity": "sha512-JRbZwAXXdSxHlmrBHwdSYe2hv/ulOFsrZN7yV7zrnO7/2dE9gIeRh4lJuCvcNm8NNhxZiRyfBn4F6omw7D2/qg==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/addon-actions": "8.5.6", - "@storybook/builder-vite": "8.5.6", - "@storybook/svelte": "8.5.6", - "@storybook/svelte-vite": "8.5.6" + "@storybook/addon-actions": "8.5.8", + "@storybook/builder-vite": "8.5.8", + "@storybook/svelte": "8.5.8", + "@storybook/svelte-vite": "8.5.8" }, "engines": { "node": ">=18.0.0" @@ -3288,11 +3305,32 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.5.6", + "storybook": "^8.5.8", "svelte": "^4.0.0 || ^5.0.0", "vite": "^4.0.0 || ^5.0.0 || ^6.0.0" } }, + "node_modules/@storybook/sveltekit/node_modules/@storybook/addon-actions": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.5.8.tgz", + "integrity": "sha512-7J0NAz+WDw1NmvmKIh0Qr5cxgVRDPFC5fmngbDNxedk147TkwrgmqOypgEi/SAksHbTWxJclbimoqdcsNtWffA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/global": "^5.0.0", + "@types/uuid": "^9.0.1", + "dequal": "^2.0.2", + "polished": "^4.2.2", + "uuid": "^9.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.5.8" + } + }, "node_modules/@storybook/test": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.5.6.tgz", @@ -3328,9 +3366,9 @@ } }, "node_modules/@storybook/theming": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.5.6.tgz", - "integrity": "sha512-WX0NjPn6sao56OCSm3NVPqBjFhLhMLPjjDwC4fHCW25HZgI+u7oByNk/7YHcxpBYtoHSWMKMiCjOSJuW6731+A==", + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.5.8.tgz", + "integrity": "sha512-/Rm6BV778sCT+3Ok861VYmw9BlEV5zcCq2zg5TOVuk8HqZw7H7VHtubVsjukEuhveYCs+oF+i2tv/II6jh6jdg==", "dev": true, "license": "MIT", "funding": { @@ -3894,9 +3932,9 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.0.5.tgz", - "integrity": "sha512-zOOWIsj5fHh3jjGwQg+P+J1FW3s4jBu1Zqga0qW60yutsBtqEqNEJKWYh7cYn1yGD+1bdPsPdC/eL4eVK56xMg==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.0.6.tgz", + "integrity": "sha512-JRTlR8Bw+4BcmVTICa7tJsxqphAktakiLsAmibVLAWbu1lauFddY/tXeM6sAyl1cgkPuXtpnUgaCPhTdz1Qapg==", "dev": true, "license": "MIT", "dependencies": { @@ -3917,8 +3955,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "3.0.5", - "vitest": "3.0.5" + "@vitest/browser": "3.0.6", + "vitest": "3.0.6" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -3982,13 +4020,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.5.tgz", - "integrity": "sha512-CLPNBFBIE7x6aEGbIjaQAX03ZZlBMaWwAjBdMkIf/cAn6xzLTiM3zYqO/WAbieEjsAZir6tO71mzeHZoodThvw==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.6.tgz", + "integrity": "sha512-KPztr4/tn7qDGZfqlSPQoF2VgJcKxnDNhmfR3VgZ6Fy1bO8T9Fc1stUiTXtqz0yG24VpD00pZP5f8EOFknjNuQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "3.0.5", + "@vitest/spy": "3.0.6", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, @@ -4009,9 +4047,9 @@ } }, "node_modules/@vitest/mocker/node_modules/@vitest/spy": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.5.tgz", - "integrity": "sha512-5fOzHj0WbUNqPK6blI/8VzZdkBlQLnT25knX0r4dbZI9qoZDf3qAdjoMmDcLG5A83W6oUUFJgUd0EYBc2P5xqg==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.6.tgz", + "integrity": "sha512-HfOGx/bXtjy24fDlTOpgiAEJbRfFxoX3zIGagCqACkFKKZ/TTOE6gYMKXlqecvxEndKFuNHcHqP081ggZ2yM0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -4035,23 +4073,23 @@ } }, "node_modules/@vitest/runner": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.5.tgz", - "integrity": "sha512-BAiZFityFexZQi2yN4OX3OkJC6scwRo8EhRB0Z5HIGGgd2q+Nq29LgHU/+ovCtd0fOfXj5ZI6pwdlUmC5bpi8A==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.6.tgz", + "integrity": "sha512-JopP4m/jGoaG1+CBqubV/5VMbi7L+NQCJTu1J1Pf6YaUbk7bZtaq5CX7p+8sY64Sjn1UQ1XJparHfcvTTdu9cA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "3.0.5", - "pathe": "^2.0.2" + "@vitest/utils": "3.0.6", + "pathe": "^2.0.3" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/runner/node_modules/@vitest/pretty-format": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.5.tgz", - "integrity": "sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.6.tgz", + "integrity": "sha512-Zyctv3dbNL+67qtHfRnUE/k8qxduOamRfAL1BurEIQSyOEFffoMvx2pnDSSbKAAVxY0Ej2J/GH2dQKI0W2JyVg==", "dev": true, "license": "MIT", "dependencies": { @@ -4062,14 +4100,14 @@ } }, "node_modules/@vitest/runner/node_modules/@vitest/utils": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.5.tgz", - "integrity": "sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.6.tgz", + "integrity": "sha512-18ktZpf4GQFTbf9jK543uspU03Q2qya7ZGya5yiZ0Gx0nnnalBvd5ZBislbl2EhLjM8A8rt4OilqKG7QwcGkvQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.0.5", - "loupe": "^3.1.2", + "@vitest/pretty-format": "3.0.6", + "loupe": "^3.1.3", "tinyrainbow": "^2.0.0" }, "funding": { @@ -4087,24 +4125,24 @@ } }, "node_modules/@vitest/snapshot": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.5.tgz", - "integrity": "sha512-GJPZYcd7v8QNUJ7vRvLDmRwl+a1fGg4T/54lZXe+UOGy47F9yUfE18hRCtXL5aHN/AONu29NGzIXSVFh9K0feA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.6.tgz", + "integrity": "sha512-qKSmxNQwT60kNwwJHMVwavvZsMGXWmngD023OHSgn873pV0lylK7dwBTfYP7e4URy5NiBCHHiQGA9DHkYkqRqg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.0.5", + "@vitest/pretty-format": "3.0.6", "magic-string": "^0.30.17", - "pathe": "^2.0.2" + "pathe": "^2.0.3" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/snapshot/node_modules/@vitest/pretty-format": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.5.tgz", - "integrity": "sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.6.tgz", + "integrity": "sha512-Zyctv3dbNL+67qtHfRnUE/k8qxduOamRfAL1BurEIQSyOEFffoMvx2pnDSSbKAAVxY0Ej2J/GH2dQKI0W2JyVg==", "dev": true, "license": "MIT", "dependencies": { @@ -7339,9 +7377,9 @@ } }, "node_modules/miniflare": { - "version": "3.20250204.1", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20250204.1.tgz", - "integrity": "sha512-B4PQi/Ai4d0ZTWahQwsFe5WAfr1j8ISMYxJZTc56g2/btgbX+Go099LmojAZY/fMRLhIYsglcStW8SeW3f/afA==", + "version": "3.20250214.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20250214.0.tgz", + "integrity": "sha512-XKwn+X/V2CEpbRhoeaIcJHpV/Duz5Md5rxVT8I6S1oqd3aLZkn8cUX1tuxHpUvfQSPuXwWH+2ESLNnTf9PKEWg==", "dev": true, "license": "MIT", "dependencies": { @@ -7351,8 +7389,8 @@ "exit-hook": "2.2.1", "glob-to-regexp": "0.4.1", "stoppable": "1.1.0", - "undici": "^5.28.4", - "workerd": "1.20250204.0", + "undici": "^5.28.5", + "workerd": "1.20250214.0", "ws": "8.18.0", "youch": "3.2.3", "zod": "3.22.3" @@ -7364,6 +7402,28 @@ "node": ">=16.13" } }, + "node_modules/miniflare/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -8962,13 +9022,13 @@ } }, "node_modules/storybook": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.5.6.tgz", - "integrity": "sha512-mrcYAA5CP6QBrq5O9grz2eqBoEfJNsK3b+Iz+PdGYqpr04oMC7rg1h80murV2pRwsbHxIWBFpLpXAVX8tMK01w==", + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.5.8.tgz", + "integrity": "sha512-k3QDa7z4a656oO3Mx929KNm+xIdEI2nIDCKatVl1mA6vt+ge+uwoiG+ro182J9LOEppR5XXD2mQQi4u1xNsy6A==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/core": "8.5.6" + "@storybook/core": "8.5.8" }, "bin": { "getstorybook": "bin/index.cjs", @@ -10332,13 +10392,13 @@ "license": "MIT" }, "node_modules/vite": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.1.0.tgz", - "integrity": "sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.1.1.tgz", + "integrity": "sha512-4GgM54XrwRfrOp297aIYspIti66k56v16ZnqHvrIM7mG+HjDlAwS7p+Srr7J6fGvEdOJ5JcQ/D9T7HhtdXDTzA==", "license": "MIT", "dependencies": { "esbuild": "^0.24.2", - "postcss": "^8.5.1", + "postcss": "^8.5.2", "rollup": "^4.30.1" }, "bin": { @@ -10403,16 +10463,16 @@ } }, "node_modules/vite-node": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.5.tgz", - "integrity": "sha512-02JEJl7SbtwSDJdYS537nU6l+ktdvcREfLksk/NDAqtdKWGqHl+joXzEubHROmS3E6pip+Xgu2tFezMu75jH7A==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.6.tgz", + "integrity": "sha512-s51RzrTkXKJrhNbUzQRsarjmAae7VmMPAsRT7lppVpIg6mK3zGthP9Hgz0YQQKuNcF+Ii7DfYk3Fxz40jRmePw==", "dev": true, "license": "MIT", "dependencies": { "cac": "^6.7.14", "debug": "^4.4.0", "es-module-lexer": "^1.6.0", - "pathe": "^2.0.2", + "pathe": "^2.0.3", "vite": "^5.0.0 || ^6.0.0" }, "bin": { @@ -10426,9 +10486,9 @@ } }, "node_modules/vitefu": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.0.5.tgz", - "integrity": "sha512-h4Vflt9gxODPFNGPwp4zAMZRpZR7eslzwH2c5hn5kNZ5rhnKyRJ50U+yGCdc2IRaBs8O4haIgLNGrV5CrpMsCA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.0.6.tgz", + "integrity": "sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==", "license": "MIT", "workspaces": [ "tests/deps/*", @@ -10444,31 +10504,31 @@ } }, "node_modules/vitest": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.5.tgz", - "integrity": "sha512-4dof+HvqONw9bvsYxtkfUp2uHsTN9bV2CZIi1pWgoFpL1Lld8LA1ka9q/ONSsoScAKG7NVGf2stJTI7XRkXb2Q==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.6.tgz", + "integrity": "sha512-/iL1Sc5VeDZKPDe58oGK4HUFLhw6b5XdY1MYawjuSaDA4sEfYlY9HnS6aCEG26fX+MgUi7MwlduTBHHAI/OvMA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "3.0.5", - "@vitest/mocker": "3.0.5", - "@vitest/pretty-format": "^3.0.5", - "@vitest/runner": "3.0.5", - "@vitest/snapshot": "3.0.5", - "@vitest/spy": "3.0.5", - "@vitest/utils": "3.0.5", - "chai": "^5.1.2", + "@vitest/expect": "3.0.6", + "@vitest/mocker": "3.0.6", + "@vitest/pretty-format": "^3.0.6", + "@vitest/runner": "3.0.6", + "@vitest/snapshot": "3.0.6", + "@vitest/spy": "3.0.6", + "@vitest/utils": "3.0.6", + "chai": "^5.2.0", "debug": "^4.4.0", "expect-type": "^1.1.0", "magic-string": "^0.30.17", - "pathe": "^2.0.2", + "pathe": "^2.0.3", "std-env": "^3.8.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinypool": "^1.0.2", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0", - "vite-node": "3.0.5", + "vite-node": "3.0.6", "why-is-node-running": "^2.3.0" }, "bin": { @@ -10484,8 +10544,8 @@ "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.0.5", - "@vitest/ui": "3.0.5", + "@vitest/browser": "3.0.6", + "@vitest/ui": "3.0.6", "happy-dom": "*", "jsdom": "*" }, @@ -10514,15 +10574,15 @@ } }, "node_modules/vitest/node_modules/@vitest/expect": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.5.tgz", - "integrity": "sha512-nNIOqupgZ4v5jWuQx2DSlHLEs7Q4Oh/7AYwNyE+k0UQzG7tSmjPXShUikn1mpNGzYEN2jJbTvLejwShMitovBA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.6.tgz", + "integrity": "sha512-zBduHf/ja7/QRX4HdP1DSq5XrPgdN+jzLOwaTq/0qZjYfgETNFCKf9nOAp2j3hmom3oTbczuUzrzg9Hafh7hNg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "3.0.5", - "@vitest/utils": "3.0.5", - "chai": "^5.1.2", + "@vitest/spy": "3.0.6", + "@vitest/utils": "3.0.6", + "chai": "^5.2.0", "tinyrainbow": "^2.0.0" }, "funding": { @@ -10530,9 +10590,9 @@ } }, "node_modules/vitest/node_modules/@vitest/pretty-format": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.5.tgz", - "integrity": "sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.6.tgz", + "integrity": "sha512-Zyctv3dbNL+67qtHfRnUE/k8qxduOamRfAL1BurEIQSyOEFffoMvx2pnDSSbKAAVxY0Ej2J/GH2dQKI0W2JyVg==", "dev": true, "license": "MIT", "dependencies": { @@ -10543,9 +10603,9 @@ } }, "node_modules/vitest/node_modules/@vitest/spy": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.5.tgz", - "integrity": "sha512-5fOzHj0WbUNqPK6blI/8VzZdkBlQLnT25knX0r4dbZI9qoZDf3qAdjoMmDcLG5A83W6oUUFJgUd0EYBc2P5xqg==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.6.tgz", + "integrity": "sha512-HfOGx/bXtjy24fDlTOpgiAEJbRfFxoX3zIGagCqACkFKKZ/TTOE6gYMKXlqecvxEndKFuNHcHqP081ggZ2yM0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10556,14 +10616,14 @@ } }, "node_modules/vitest/node_modules/@vitest/utils": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.5.tgz", - "integrity": "sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.6.tgz", + "integrity": "sha512-18ktZpf4GQFTbf9jK543uspU03Q2qya7ZGya5yiZ0Gx0nnnalBvd5ZBislbl2EhLjM8A8rt4OilqKG7QwcGkvQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.0.5", - "loupe": "^3.1.2", + "@vitest/pretty-format": "3.0.6", + "loupe": "^3.1.3", "tinyrainbow": "^2.0.0" }, "funding": { @@ -10651,9 +10711,9 @@ } }, "node_modules/workerd": { - "version": "1.20250204.0", - "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20250204.0.tgz", - "integrity": "sha512-zcKufjVFsQMiD3/acg1Ix00HIMCkXCrDxQXYRDn/1AIz3QQGkmbVDwcUk1Ki2jBUoXmBCMsJdycRucgMVEypWg==", + "version": "1.20250214.0", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20250214.0.tgz", + "integrity": "sha512-QWcqXZLiMpV12wiaVnb3nLmfs/g4ZsFQq2mX85z546r3AX4CTIkXl0VP50W3CwqLADej3PGYiRDOTelDOwVG1g==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -10664,11 +10724,11 @@ "node": ">=16" }, "optionalDependencies": { - "@cloudflare/workerd-darwin-64": "1.20250204.0", - "@cloudflare/workerd-darwin-arm64": "1.20250204.0", - "@cloudflare/workerd-linux-64": "1.20250204.0", - "@cloudflare/workerd-linux-arm64": "1.20250204.0", - "@cloudflare/workerd-windows-64": "1.20250204.0" + "@cloudflare/workerd-darwin-64": "1.20250214.0", + "@cloudflare/workerd-darwin-arm64": "1.20250214.0", + "@cloudflare/workerd-linux-64": "1.20250214.0", + "@cloudflare/workerd-linux-arm64": "1.20250214.0", + "@cloudflare/workerd-windows-64": "1.20250214.0" } }, "node_modules/worktop": { @@ -10686,9 +10746,9 @@ } }, "node_modules/wrangler": { - "version": "3.109.1", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.109.1.tgz", - "integrity": "sha512-1Jx+nZ6eCXPQ2rsGdrV6Qy/LGvhpqudeuTl4AYHl9P8Zugp44Uzxnj5w11qF4v/rv1dOZoA5TydSt9xMFfhpKg==", + "version": "3.109.3", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.109.3.tgz", + "integrity": "sha512-T+SfFYEbkWDzf8WRR1JzaVKPH7wAzyciRIua8qszT+UqPqFNb6M5beCHHK/de7Zk5z6W5lvLly9SHToC11maDQ==", "dev": true, "license": "MIT OR Apache-2.0", "dependencies": { @@ -10697,10 +10757,10 @@ "@esbuild-plugins/node-modules-polyfill": "0.2.2", "blake3-wasm": "2.1.5", "esbuild": "0.17.19", - "miniflare": "3.20250204.1", + "miniflare": "3.20250214.0", "path-to-regexp": "6.3.0", "unenv": "2.0.0-rc.1", - "workerd": "1.20250204.0" + "workerd": "1.20250214.0" }, "bin": { "wrangler": "bin/wrangler.js", @@ -10714,7 +10774,7 @@ "sharp": "^0.33.5" }, "peerDependencies": { - "@cloudflare/workers-types": "^4.20250204.0" + "@cloudflare/workers-types": "^4.20250214.0" }, "peerDependenciesMeta": { "@cloudflare/workers-types": { @@ -11226,9 +11286,9 @@ "license": "ISC" }, "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", "dev": true, "license": "MIT", "engines": { diff --git a/app/src/lib/model.ts b/app/src/lib/model.ts index 079f9c3..9e61f23 100644 --- a/app/src/lib/model.ts +++ b/app/src/lib/model.ts @@ -1,7 +1,8 @@ import { Node, Relationship, Date } from 'neo4j-driver'; import { Integer } from 'neo4j-driver'; -interface PersonProperties { +export interface PersonProperties { + allow_admin_access: boolean; id: string; google_id: string; first_name: string; @@ -65,7 +66,7 @@ export type FamilyRelationship = Relationship; -interface RecipeProperties { +export interface RecipeProperties { id: string; name: string; origin: string; @@ -79,11 +80,19 @@ interface RecipeProperties { } export type Recipe = Node; -export type RecipeRelationship = Relationship; +export interface FamilyTree { + ancestors: Person; + prel1: FamilyRelationship; + children: Person; + prel2: FamilyRelationship; + spouses: Person; + srel: FamilyRelationship; + user: Person; - +} diff --git a/app/src/lib/server/queries/create_person.cypher b/app/src/lib/server/queries/create_person.cypher new file mode 100644 index 0000000..96c22d3 --- /dev/null +++ b/app/src/lib/server/queries/create_person.cypher @@ -0,0 +1 @@ +CREATE (p:Person $Person) RETURN p \ No newline at end of file diff --git a/app/src/lib/server/queries/get_family_tree.cypher b/app/src/lib/server/queries/get_family_tree.cypher new file mode 100644 index 0000000..bb03613 --- /dev/null +++ b/app/src/lib/server/queries/get_family_tree.cypher @@ -0,0 +1,7 @@ +MATCH (n:Person { id: $person_id })-[p:Parent*1..]->(family:Person) +OPTIONAL MATCH (family)-[c:Child]->(children:Person) +WITH family, p, children, c, n +OPTIONAL MATCH (children)<-[p2:Parent]-(OtherParents:Person) +WITH family, p, children, c, OtherParents, p2, n +OPTIONAL MATCH (family)-[s:Spouse]-(spouse:Person) +RETURN family, p, children, c, OtherParents, p2, spouse, s, n; diff --git a/app/src/lib/server/queries/get_people_by_properties.cypher b/app/src/lib/server/queries/get_people_by_properties.cypher new file mode 100644 index 0000000..3373478 --- /dev/null +++ b/app/src/lib/server/queries/get_people_by_properties.cypher @@ -0,0 +1 @@ +MATCH (n:Person) WHERE n.id = $id RETURN n AS people \ No newline at end of file diff --git a/app/src/lib/server/queries/get_person_by_google_id.cypher b/app/src/lib/server/queries/get_person_by_google_id.cypher new file mode 100644 index 0000000..857c7a2 --- /dev/null +++ b/app/src/lib/server/queries/get_person_by_google_id.cypher @@ -0,0 +1 @@ +MATCH (n:Person) WHERE n.google_id = $google_id RETURN n as person \ No newline at end of file diff --git a/app/src/lib/server/queries/get_person_by_id.cypher b/app/src/lib/server/queries/get_person_by_id.cypher new file mode 100644 index 0000000..4b3cccd --- /dev/null +++ b/app/src/lib/server/queries/get_person_by_id.cypher @@ -0,0 +1 @@ +MATCH (n:Person) WHERE n.id = $id RETURN n as person \ No newline at end of file diff --git a/app/src/lib/server/queries/hard_delete_person.cypher b/app/src/lib/server/queries/hard_delete_person.cypher new file mode 100644 index 0000000..e69de29 diff --git a/app/src/lib/server/queries/schema.cypher b/app/src/lib/server/queries/schema.cypher new file mode 100644 index 0000000..a20da5b --- /dev/null +++ b/app/src/lib/server/queries/schema.cypher @@ -0,0 +1,17 @@ +CREATE CONSTRAINT ON (n:Person) ASSERT EXISTS (n.id); +CREATE CONSTRAINT ON (n:Person) ASSERT EXISTS (n.last_name); +CREATE CONSTRAINT ON (n:Person) ASSERT EXISTS (n.first_name); +CREATE CONSTRAINT ON (n:Person) ASSERT EXISTS (n.born); +CREATE CONSTRAINT ON (n:Person) ASSERT EXISTS (n.mothers_first_name); +CREATE CONSTRAINT ON (n:Person) ASSERT EXISTS (n.mothers_last_name); +CREATE CONSTRAINT ON (n:Person) ASSERT n.id IS UNIQUE; +CREATE CONSTRAINT ON (n:Person) ASSERT n.google_id IS UNIQUE; +CREATE CONSTRAINT ON (n:Person) ASSERT n.last_name, n.first_name, n.born, n.mothers_first_name, n.mothers_last_name IS UNIQUE; + +CREATE INDEX ON :Person(id); +CREATE INDEX ON :Person(google_id); +CREATE INDEX ON :Person(last_name); +CREATE INDEX ON :Person(first_name); +CREATE INDEX ON :Person(born); +CREATE INDEX ON :Person(mothers_first_name); +CREATE INDEX ON :Person(mothers_last_name); diff --git a/app/src/lib/server/queries/soft_delete_person.cypher b/app/src/lib/server/queries/soft_delete_person.cypher new file mode 100644 index 0000000..446c59c --- /dev/null +++ b/app/src/lib/server/queries/soft_delete_person.cypher @@ -0,0 +1,4 @@ +MATCH (n:Person {id: $id}) +SET n:DeletedPerson +REMOVE n:Person +RETURN labels(n) AS labels, n AS person \ No newline at end of file diff --git a/app/src/lib/server/queries/update_person.cypher b/app/src/lib/server/queries/update_person.cypher new file mode 100644 index 0000000..37f26fb --- /dev/null +++ b/app/src/lib/server/queries/update_person.cypher @@ -0,0 +1,3 @@ +MATCH (n:Person $props) +SET n += $props +RETURN n AS person \ No newline at end of file diff --git a/app/src/lib/server/user.ts b/app/src/lib/server/user.ts index 693b594..ab451f7 100644 --- a/app/src/lib/server/user.ts +++ b/app/src/lib/server/user.ts @@ -1,31 +1,22 @@ -import type { Session } from 'neo4j-driver'; +import type { Session, QueryResult, Transaction} from 'neo4j-driver'; +import type{ Person,PersonProperties, FamilyTree } from '$lib/model'; +import CreatePersonQuery from '$lib/server/queries/createPerson.cypher?raw'; +import UpdatePersonQuery from '$lib/server/queries/updatePerson.cypher?raw'; -export function createUser(db: Session, googleId: string, email: string, first_name: string, family_name: string, middle_name: string): User { - const row = db.run - if (row === null) { - throw new Error("Unexpected error"); - } - const user: User = { - id: row.number(0), - googleId, - email, - }; - return user; +export function createUser(db: Session, Person: PersonProperties): Promise> { + return db.executeWrite(tx => tx.run( + CreatePersonQuery, {Person}) + ); } -export function getUserFromGoogleId(googleId: string): User | null { - const row = db.queryOne("SELECT id, google_id, email, name, picture FROM user WHERE google_id = ?", [googleId]); - if (row === null) { - return null; - } - const user: User = { - id: row.number(0), - googleId: row.string(1), - email: row.string(2), - name: row.string(3), - picture: row.string(4) - }; - return user; +export function updateUser(db: Session, Person: PersonProperties): Promise> { + return db.executeWrite(tx => tx.run( + CreatePersonQuery, {Person}) + ); +} + +export function getUserFromGoogleId(db: Session,googleId: string): Promise> { + return db.executeRead(tx => tx.run("")) } export interface User {