add code generation

This commit is contained in:
2025-03-22 16:55:33 +01:00
parent 62566b3ec5
commit c716973525
21 changed files with 1635 additions and 50 deletions

View File

@@ -1,11 +1,11 @@
{
"name": "app",
"name": "generations-heritage",
"version": "0.0.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "app",
"name": "generations-heritage",
"version": "0.0.1",
"dependencies": {
"@inlang/paraglide-sveltekit": "^0.15.5",
@@ -14,6 +14,7 @@
"@xyflow/svelte": "^1.0.0-next.3",
"arctic": "^3.3.0",
"neo4j-driver": "^5.28.1",
"openapi-fetch": "^0.13.5",
"pikaday": "^1.8.2"
},
"devDependencies": {
@@ -41,6 +42,7 @@
"eslint-config-prettier": "^10.0.1",
"eslint-plugin-svelte": "^2.46.1",
"globals": "^15.14.0",
"openapi-typescript": "^7.6.1",
"prettier": "^3.4.2",
"prettier-plugin-svelte": "^3.3.3",
"prettier-plugin-tailwindcss": "^0.6.11",
@@ -2486,6 +2488,82 @@
"integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==",
"license": "MIT"
},
"node_modules/@redocly/ajv": {
"version": "8.11.2",
"resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.11.2.tgz",
"integrity": "sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==",
"dev": true,
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2",
"uri-js-replace": "^1.0.1"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/@redocly/ajv/node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true,
"license": "MIT"
},
"node_modules/@redocly/config": {
"version": "0.22.1",
"resolved": "https://registry.npmjs.org/@redocly/config/-/config-0.22.1.tgz",
"integrity": "sha512-1CqQfiG456v9ZgYBG9xRQHnpXjt8WoSnDwdkX6gxktuK69v2037hTAR1eh0DGIqpZ1p4k82cGH8yTNwt7/pI9g==",
"dev": true,
"license": "MIT"
},
"node_modules/@redocly/openapi-core": {
"version": "1.34.0",
"resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.34.0.tgz",
"integrity": "sha512-Ji00EiLQRXq0pJIz5pAjGF9MfQvQVsQehc6uIis6sqat8tG/zh25Zi64w6HVGEDgJEzUeq/CuUlD0emu3Hdaqw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@redocly/ajv": "^8.11.2",
"@redocly/config": "^0.22.0",
"colorette": "^1.2.0",
"https-proxy-agent": "^7.0.5",
"js-levenshtein": "^1.1.6",
"js-yaml": "^4.1.0",
"minimatch": "^5.0.1",
"pluralize": "^8.0.0",
"yaml-ast-parser": "0.0.43"
},
"engines": {
"node": ">=18.17.0",
"npm": ">=9.5.0"
}
},
"node_modules/@redocly/openapi-core/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/@redocly/openapi-core/node_modules/minimatch": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=10"
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.34.7",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.7.tgz",
@@ -4535,6 +4613,16 @@
"node": ">=0.4.0"
}
},
"node_modules/agent-base": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
"integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 14"
}
},
"node_modules/aggregate-error": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
@@ -4953,6 +5041,13 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/change-case": {
"version": "5.4.4",
"resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz",
"integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==",
"dev": true,
"license": "MIT"
},
"node_modules/check-error": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz",
@@ -5074,6 +5169,13 @@
"simple-swizzle": "^0.2.2"
}
},
"node_modules/colorette": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz",
"integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==",
"dev": true,
"license": "MIT"
},
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -6610,6 +6712,20 @@
"entities": "^2.0.0"
}
},
"node_modules/https-proxy-agent": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
"integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
"dev": true,
"license": "MIT",
"dependencies": {
"agent-base": "^7.1.2",
"debug": "4"
},
"engines": {
"node": ">= 14"
}
},
"node_modules/ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
@@ -6685,6 +6801,19 @@
"node": ">=8"
}
},
"node_modules/index-to-position": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.0.0.tgz",
"integrity": "sha512-sCO7uaLVhRJ25vz1o8s9IFM3nVS4DkuQnyjMwiQPKvQuBYBDmb8H7zx8ki7nVh4HJQOdVWebyvLE0qt+clruxA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -6964,6 +7093,16 @@
"jiti": "bin/jiti.js"
}
},
"node_modules/js-levenshtein": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
"integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -7898,6 +8037,55 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/openapi-fetch": {
"version": "0.13.5",
"resolved": "https://registry.npmjs.org/openapi-fetch/-/openapi-fetch-0.13.5.tgz",
"integrity": "sha512-AQK8T9GSKFREFlN1DBXTYsLjs7YV2tZcJ7zUWxbjMoQmj8dDSFRrzhLCbHPZWA1TMV3vACqfCxLEZcwf2wxV6Q==",
"license": "MIT",
"dependencies": {
"openapi-typescript-helpers": "^0.0.15"
}
},
"node_modules/openapi-typescript": {
"version": "7.6.1",
"resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-7.6.1.tgz",
"integrity": "sha512-F7RXEeo/heF3O9lOXo2bNjCOtfp7u+D6W3a3VNEH2xE6v+fxLtn5nq0uvUcA1F5aT+CMhNeC5Uqtg5tlXFX/ag==",
"dev": true,
"license": "MIT",
"dependencies": {
"@redocly/openapi-core": "^1.28.0",
"ansi-colors": "^4.1.3",
"change-case": "^5.4.4",
"parse-json": "^8.1.0",
"supports-color": "^9.4.0",
"yargs-parser": "^21.1.1"
},
"bin": {
"openapi-typescript": "bin/cli.js"
},
"peerDependencies": {
"typescript": "^5.x"
}
},
"node_modules/openapi-typescript-helpers": {
"version": "0.0.15",
"resolved": "https://registry.npmjs.org/openapi-typescript-helpers/-/openapi-typescript-helpers-0.0.15.tgz",
"integrity": "sha512-opyTPaunsklCBpTK8JGef6mfPhLSnyy5a0IN9vKtx3+4aExf+KxEqYwIy3hqkedXIB97u357uLMJsOnm3GVjsw==",
"license": "MIT"
},
"node_modules/openapi-typescript/node_modules/supports-color": {
"version": "9.4.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz",
"integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
"node_modules/optionator": {
"version": "0.9.4",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
@@ -7974,6 +8162,37 @@
"node": ">=6"
}
},
"node_modules/parse-json": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.2.0.tgz",
"integrity": "sha512-eONBZy4hm2AgxjNFd8a4nyDJnzUAH0g34xSQAwWEVGCjdZ4ZL7dKZBfq267GWP/JaS9zW62Xs2FeAdDvpHHJGQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.26.2",
"index-to-position": "^1.0.0",
"type-fest": "^4.37.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/parse-json/node_modules/type-fest": {
"version": "4.37.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.37.0.tgz",
"integrity": "sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==",
"dev": true,
"license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=16"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/pascal-case": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz",
@@ -8161,6 +8380,16 @@
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/pluralize": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
"integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/polished": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz",
@@ -8660,6 +8889,16 @@
"node": ">=0.10"
}
},
"node_modules/require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
@@ -10179,6 +10418,13 @@
"punycode": "^2.1.0"
}
},
"node_modules/uri-js-replace": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/uri-js-replace/-/uri-js-replace-1.0.1.tgz",
"integrity": "sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==",
"dev": true,
"license": "MIT"
},
"node_modules/util": {
"version": "0.12.5",
"resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
@@ -11151,6 +11397,23 @@
"node": ">= 14"
}
},
"node_modules/yaml-ast-parser": {
"version": "0.0.43",
"resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz",
"integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==",
"dev": true,
"license": "Apache-2.0"
},
"node_modules/yargs-parser": {
"version": "21.1.1",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
"integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
"dev": true,
"license": "ISC",
"engines": {
"node": ">=12"
}
},
"node_modules/yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",

View File

@@ -45,6 +45,7 @@
"eslint-config-prettier": "^10.0.1",
"eslint-plugin-svelte": "^2.46.1",
"globals": "^15.14.0",
"openapi-typescript": "^7.6.1",
"prettier": "^3.4.2",
"prettier-plugin-svelte": "^3.3.3",
"prettier-plugin-tailwindcss": "^0.6.11",
@@ -65,6 +66,7 @@
"@xyflow/svelte": "^1.0.0-next.3",
"arctic": "^3.3.0",
"neo4j-driver": "^5.28.1",
"openapi-fetch": "^0.13.5",
"pikaday": "^1.8.2"
}
}

View File

@@ -0,0 +1,758 @@
/**
* This file was auto-generated by openapi-typescript.
* Do not make direct changes to the file.
*/
export interface paths {
"/person_and_relationship": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** Create a person and relationship */
post: operations["createPersonAndRelationship"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/person": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** Create a new person */
post: operations["createPerson"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/person/{id}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
/** Update a person by ID */
put: operations["updatePerson"];
post?: never;
/** Soft delete a person by ID */
delete: operations["softDeletePerson"];
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/person/{id}/hard-delete": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
post?: never;
/** Hard delete a person by ID */
delete: operations["hardDeletePerson"];
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/person/google/{google_id}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Get a person by Google ID */
get: operations["getPersonByGoogleId"];
put?: never;
/** Create a new person by Google ID */
post: operations["createPersonByGoogleId"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/person/{id}/family-tree": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Get family tree by person ID */
get: operations["getFamilyTreeById"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/relationship": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** Create a relationship between two persons */
post: operations["createRelationship"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/relationship/{id1}/{id2}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Get relationship between two persons */
get: operations["getRelationship"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/recipe/{id}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
/** Update a recipe by ID */
put: operations["updateRecipe"];
post?: never;
/** Soft delete a recipe by ID */
delete: operations["softDeleteRecipe"];
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/recipe/{id}/hard-delete": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
post?: never;
/** Hard delete a recipe by ID */
delete: operations["hardDeleteRecipe"];
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/recipe/{recipeId}/relationship": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** Create a relationship with an existing recipe */
post: operations["createRecipeRelationship"];
/** Delete a relationship with a recipe */
delete: operations["deleteRecipeRelationship"];
options?: never;
head?: never;
patch?: never;
trace?: never;
};
}
export type webhooks = Record<string, never>;
export interface components {
schemas: {
PersonProperties: {
allow_admin_access?: boolean | null;
invite_code?: string | null;
google_id?: string | null;
first_name?: string | null;
middle_name?: string | null;
last_name?: string | null;
titles?: string[] | null;
suffixes?: string[] | null;
extra_names?: string[] | null;
aliases?: string[] | null;
mothers_first_name?: string | null;
mothers_last_name?: string | null;
/** Format: date */
born?: string | null;
place_of_birth?: string | null;
/** Format: date */
died?: string | null;
place_of_death?: string | null;
life_events?: {
/** Format: date */
from?: string;
/** Format: date */
to?: string;
description?: string;
}[] | null;
occupations?: string[] | null;
occupation_to_display?: string | null;
others_said?: {
id?: number;
name?: string;
relationship?: string;
description?: string;
url?: string | null;
}[] | null;
limit?: number | null;
photos?: {
url?: string;
description?: string;
/** Format: date */
date?: string;
name?: string;
}[] | null;
videos?: {
url?: string;
description?: string;
/** Format: date */
date?: string;
name?: string;
}[] | null;
audios?: {
url?: string;
description?: string;
/** Format: date */
date?: string;
name?: string;
}[] | null;
profile_picture?: string | null;
verified?: boolean | null;
email?: string | null;
phone?: string | null;
residence?: {
city?: string;
country?: string;
zip_code?: string;
address_line_1?: string;
address_line_2?: string;
} | null;
religion?: string | null;
baptized?: string | null;
ideologies?: string[] | null;
blood_type?: string | null;
allergies?: string[] | null;
medications?: {
name?: string;
description?: string | null;
components?: string | null;
dosage?: string | null;
/** Format: date */
from?: string | null;
/** Format: date */
to?: string | null;
}[] | null;
medical_conditions?: Record<string, never>[] | null;
height?: number | null;
weight?: number | null;
hair_colour?: string | null;
skin_colour?: string | null;
eye_colour?: string | null;
sports?: string[] | null;
hobbies?: string[] | null;
interests?: string[] | null;
languages?: {
language?: string;
level?: string | null;
}[] | null;
notes?: {
/** Format: date */
date?: string | null;
title?: string | null;
note?: string;
url?: string | null;
}[] | null;
};
PersonRegistration: {
first_name: string;
last_name: string;
/** Format: email */
email?: string | null;
limit: number;
/** Format: date */
born: string;
mothers_first_name: string;
mothers_last_name: string;
};
Person: {
id?: number;
labels?: string[];
type?: string | null;
properties?: components["schemas"]["PersonProperties"];
};
FamilyRelationship: {
verified?: boolean | null;
notes?: string | null;
/** Format: date */
from?: string | null;
/** Format: date */
to?: string | null;
};
Relationship: {
id?: number;
label?: string;
type?: string | null;
start?: number;
end?: number;
properties?: components["schemas"]["FamilyRelationship"];
};
OptimizedPersonNode: {
id?: number;
labels?: string[];
type?: string | null;
first_name?: string;
middle_name?: string;
last_name?: string;
/** Format: date */
born?: string;
/** Format: date */
died?: string | null;
};
FamilyTree: {
ancestors?: components["schemas"]["OptimizedPersonNode"][];
prel1?: components["schemas"]["Relationship"];
children?: components["schemas"]["OptimizedPersonNode"][];
prel2?: components["schemas"]["Relationship"];
spouses?: string;
srel?: components["schemas"]["Relationship"];
user?: string;
};
RecipeProperties: {
name?: string | null;
origin?: string | null;
category?: string | null;
/** Format: date */
first_recorded?: string | null;
description?: string | null;
ingredients?: string[] | null;
instructions?: string[] | null;
photo?: string | null;
notes?: string | null;
};
Recipe: {
id?: number;
labels?: string[];
properties?: components["schemas"]["RecipeProperties"];
};
Likes: {
id?: number;
label?: string;
start?: string;
end?: string;
properties?: components["schemas"]["LikesProperties"];
};
LikesProperties: {
favourite?: boolean | null;
like_it?: boolean | null;
could_make_it?: boolean | null;
};
};
responses: never;
parameters: never;
requestBodies: never;
headers: never;
pathItems: never;
}
export type $defs = Record<string, never>;
export interface operations {
createPersonAndRelationship: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": {
person: components["schemas"]["PersonRegistration"];
relationship: components["schemas"]["FamilyRelationship"];
};
};
};
responses: {
/** @description Person and relationship created */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
person?: components["schemas"]["Person"];
relationship?: components["schemas"]["Relationship"];
};
};
};
};
};
createPerson: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["PersonRegistration"];
};
};
responses: {
/** @description Person created */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Person"];
};
};
};
};
updatePerson: {
parameters: {
query?: never;
header?: never;
path: {
id: number;
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["PersonProperties"];
};
};
responses: {
/** @description Person updated */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Person"];
};
};
};
};
softDeletePerson: {
parameters: {
query?: never;
header?: never;
path: {
id: number;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Person soft deleted */
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
hardDeletePerson: {
parameters: {
query?: never;
header?: never;
path: {
id: number;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Person hard deleted */
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
getPersonByGoogleId: {
parameters: {
query?: never;
header?: never;
path: {
google_id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Person retrieved */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Person"];
};
};
};
};
createPersonByGoogleId: {
parameters: {
query?: never;
header?: never;
path: {
google_id: string;
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["PersonRegistration"];
};
};
responses: {
/** @description Person created */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Person"];
};
};
};
};
getFamilyTreeById: {
parameters: {
query?: never;
header?: never;
path: {
id: number;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Family tree retrieved */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["FamilyTree"];
};
};
};
};
createRelationship: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": {
id1?: string;
id2?: string;
relationship?: components["schemas"]["FamilyRelationship"];
};
};
};
responses: {
/** @description Relationship created */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Relationship"];
};
};
};
};
getRelationship: {
parameters: {
query?: never;
header?: never;
path: {
id1: number;
id2: number;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Relationship retrieved */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Relationship"];
};
};
};
};
updateRecipe: {
parameters: {
query?: never;
header?: never;
path: {
id: number;
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["RecipeProperties"];
};
};
responses: {
/** @description Recipe updated */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Recipe"];
};
};
};
};
softDeleteRecipe: {
parameters: {
query?: never;
header?: never;
path: {
id: number;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Recipe soft deleted */
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
hardDeleteRecipe: {
parameters: {
query?: never;
header?: never;
path: {
id: number;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Recipe hard deleted */
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
createRecipeRelationship: {
parameters: {
query?: never;
header?: never;
path: {
recipeId: number;
};
cookie?: never;
};
requestBody: {
content: {
"application/json": {
id: number;
relationship: {
schema?: components["schemas"]["LikesProperties"];
};
};
};
};
responses: {
/** @description Relationship with recipe created */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Likes"];
};
};
};
};
deleteRecipeRelationship: {
parameters: {
query: {
personId: number;
};
header?: never;
path: {
recipeId: number;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Relationship with recipe deleted */
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
}

View File

@@ -1,4 +0,0 @@
MATCH (a:Person), (b:Person)
WHERE id(a) = $id1 AND id(b) = $id2
CREATE (a)-[r:Relationship $Relationship]->(b)
RETURN r AS relationship

View File

@@ -1 +0,0 @@
CREATE (p:Person $Person) RETURN p as person

View File

@@ -1,4 +0,0 @@
MATCH (a:Person), (b:Person)
WHERE id(a) = $id1 AND id(b) = $id2
CREATE (a)-[r:Relationship $Relationship]-(b)
RETURN r as relationship

View File

@@ -1,5 +0,0 @@
MATCH (a:Person), (b:Person)
WHERE id(a) = $id1 AND id(b) = $id2
CREATE (a)-[r1:Relationship $Relationship1]->(b)
CREATE (b)-[r2:Relationship $Relationship2]->(a)
RETURN r1 as relationship1, r2 as relationship2

View File

@@ -1,8 +0,0 @@
MATCH (n:Person)-[p:Parent*1..]->(family:Person)
WHERE id(n) = $id
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;

View File

@@ -1 +0,0 @@
MATCH (n:Person) WHERE n.id = $id RETURN n AS people

View File

@@ -1 +0,0 @@
MATCH (n:Person) WHERE n.google_id = $google_id RETURN n as person

View File

@@ -1 +0,0 @@
MATCH (n:Person) WHERE id(n) = $id RETURN n as person

View File

@@ -1,3 +0,0 @@
MATCH (n)-[r]-(o)
WHERE id(n) = $id1 AND id(o) = $id2
RETURN r as relationship

View File

@@ -1,3 +0,0 @@
MATCH (n:DeletedPerson)
WHERE id(n) = $id
DETACH DELETE n;

View File

@@ -1,14 +0,0 @@
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.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(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);

View File

@@ -1,4 +0,0 @@
MATCH (n:Person {id: $id})
SET n:DeletedPerson
REMOVE n:Person
RETURN labels(n) AS labels, n AS person

View File

@@ -1,4 +0,0 @@
MATCH (n:Person)
WHERE id(n) = $id
SET n += $props
RETURN n AS person

View File

@@ -1,9 +1,18 @@
import { paraglide } from '@inlang/paraglide-sveltekit/vite';
import { defineConfig } from 'vitest/config';
import { execSync } from "child_process";
import { sveltekit } from '@sveltejs/kit/vite';
export default defineConfig({
plugins: [
{
name: "openapi-generate",
buildStart() {
console.log("Generating TypeScript client from OpenAPI...");
execSync("npx openapi-typescript ../../api/openapi.json --output src/lib/api/api.gen.ts", { stdio: "inherit" });
console.log("OpenAPI client generated!");
}
},
sveltekit(),
paraglide({
project: './project.inlang',