diff --git a/.gitignore b/.gitignore index e505544c..5d7e9ac1 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ dist # dependencies /node_modules +package-lock.json # envs .env diff --git a/package-lock.json b/package-lock.json index c2171d10..611ea677 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "cors": "^2.8.5", "express": "^4.18.2", "jsonwebtoken": "^9.0.0", - "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.50", + "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.54", "module-alias": "^2.2.2", "multer": "^1.4.5-lts.1", "next": "^13.1.5", @@ -65,42 +65,42 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.21.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.7.tgz", - "integrity": "sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", + "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz", - "integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helpers": "^7.21.5", - "@babel/parser": "^7.21.8", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -145,12 +145,12 @@ "dev": true }, "node_modules/@babel/generator": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz", - "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", "dev": true, "dependencies": { - "@babel/types": "^7.21.5", + "@babel/types": "^7.22.5", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -160,13 +160,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz", - "integrity": "sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", + "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.21.5", - "@babel/helper-validator-option": "^7.21.0", + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", "browserslist": "^4.21.3", "lru-cache": "^5.1.1", "semver": "^6.3.0" @@ -179,151 +179,151 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz", - "integrity": "sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", "dev": true, "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", "dev": true, "dependencies": { - "@babel/types": "^7.21.4" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz", - "integrity": "sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-simple-access": "^7.21.5", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz", - "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", - "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "dependencies": { - "@babel/types": "^7.21.5" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", - "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.5.tgz", - "integrity": "sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", + "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", "dev": true, "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-validator-identifier": "^7.22.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -403,9 +403,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz", - "integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", + "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -475,12 +475,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", - "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -577,12 +577,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", - "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -592,33 +592,33 @@ } }, "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz", - "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", + "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.5", - "@babel/types": "^7.21.5", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -650,13 +650,13 @@ "dev": true }, "node_modules/@babel/types": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz", - "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1045,14 +1045,14 @@ "dev": true }, "node_modules/@next/env": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.2.tgz", - "integrity": "sha512-Wqvo7lDeS0KGwtwg9TT9wKQ8raelmUxt+TQKWvG/xKfcmDXNOtCuaszcfCF8JzlBG1q0VhpI6CKaRMbVPMDWgw==" + "version": "13.4.7", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.7.tgz", + "integrity": "sha512-ZlbiFulnwiFsW9UV1ku1OvX/oyIPLtMk9p/nnvDSwI0s7vSoZdRtxXNsaO+ZXrLv/pMbXVGq4lL8TbY9iuGmVw==" }, "node_modules/@next/swc-darwin-arm64": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.2.tgz", - "integrity": "sha512-6BBlqGu3ewgJflv9iLCwO1v1hqlecaIH2AotpKfVUEzUxuuDNJQZ2a4KLb4MBl8T9/vca1YuWhSqtbF6ZuUJJw==", + "version": "13.4.7", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.7.tgz", + "integrity": "sha512-VZTxPv1b59KGiv/pZHTO5Gbsdeoxcj2rU2cqJu03btMhHpn3vwzEK0gUSVC/XW96aeGO67X+cMahhwHzef24/w==", "cpu": [ "arm64" ], @@ -1065,9 +1065,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.2.tgz", - "integrity": "sha512-iZuYr7ZvGLPjPmfhhMl0ISm+z8EiyLBC1bLyFwGBxkWmPXqdJ60mzuTaDSr5WezDwv0fz32HB7JHmRC6JVHSZg==", + "version": "13.4.7", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.7.tgz", + "integrity": "sha512-gO2bw+2Ymmga+QYujjvDz9955xvYGrWofmxTq7m70b9pDPvl7aDFABJOZ2a8SRCuSNB5mXU8eTOmVVwyp/nAew==", "cpu": [ "x64" ], @@ -1080,9 +1080,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.2.tgz", - "integrity": "sha512-2xVabFtIge6BJTcJrW8YuUnYTuQjh4jEuRuS2mscyNVOj6zUZkom3CQg+egKOoS+zh2rrro66ffSKIS+ztFJTg==", + "version": "13.4.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.7.tgz", + "integrity": "sha512-6cqp3vf1eHxjIDhEOc7Mh/s8z1cwc/l5B6ZNkOofmZVyu1zsbEM5Hmx64s12Rd9AYgGoiCz4OJ4M/oRnkE16/Q==", "cpu": [ "arm64" ], @@ -1095,9 +1095,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.2.tgz", - "integrity": "sha512-wKRCQ27xCUJx5d6IivfjYGq8oVngqIhlhSAJntgXLt7Uo9sRT/3EppMHqUZRfyuNBTbykEre1s5166z+pvRB5A==", + "version": "13.4.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.7.tgz", + "integrity": "sha512-T1kD2FWOEy5WPidOn1si0rYmWORNch4a/NR52Ghyp4q7KyxOCuiOfZzyhVC5tsLIBDH3+cNdB5DkD9afpNDaOw==", "cpu": [ "arm64" ], @@ -1110,9 +1110,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.2.tgz", - "integrity": "sha512-NpCa+UVhhuNeaFVUP1Bftm0uqtvLWq2JTm7+Ta48+2Uqj2mNXrDIvyn1DY/ZEfmW/1yvGBRaUAv9zkMkMRixQA==", + "version": "13.4.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.7.tgz", + "integrity": "sha512-zaEC+iEiAHNdhl6fuwl0H0shnTzQoAoJiDYBUze8QTntE/GNPfTYpYboxF5LRYIjBwETUatvE0T64W6SKDipvg==", "cpu": [ "x64" ], @@ -1125,9 +1125,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.2.tgz", - "integrity": "sha512-ZWVC72x0lW4aj44e3khvBrj2oSYj1bD0jESmyah3zG/3DplEy/FOtYkMzbMjHTdDSheso7zH8GIlW6CDQnKhmQ==", + "version": "13.4.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.7.tgz", + "integrity": "sha512-X6r12F8d8SKAtYJqLZBBMIwEqcTRvUdVm+xIq+l6pJqlgT2tNsLLf2i5Cl88xSsIytBICGsCNNHd+siD2fbWBA==", "cpu": [ "x64" ], @@ -1140,9 +1140,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.2.tgz", - "integrity": "sha512-pLT+OWYpzJig5K4VKhLttlIfBcVZfr2+Xbjra0Tjs83NQSkFS+y7xx+YhCwvpEmXYLIvaggj2ONPyjbiigOvHQ==", + "version": "13.4.7", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.7.tgz", + "integrity": "sha512-NPnmnV+vEIxnu6SUvjnuaWRglZzw4ox5n/MQTxeUhb5iwVWFedolPFebMNwgrWu4AELwvTdGtWjqof53AiWHcw==", "cpu": [ "arm64" ], @@ -1155,9 +1155,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.2.tgz", - "integrity": "sha512-dhpiksQCyGca4WY0fJyzK3FxMDFoqMb0Cn+uDB+9GYjpU2K5//UGPQlCwiK4JHxuhg8oLMag5Nf3/IPSJNG8jw==", + "version": "13.4.7", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.7.tgz", + "integrity": "sha512-6Hxijm6/a8XqLQpOOf/XuwWRhcuc/g4rBB2oxjgCMuV9Xlr2bLs5+lXyh8w9YbAUMYR3iC9mgOlXbHa79elmXw==", "cpu": [ "ia32" ], @@ -1170,9 +1170,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.2.tgz", - "integrity": "sha512-O7bort1Vld00cu8g0jHZq3cbSTUNMohOEvYqsqE10+yfohhdPHzvzO+ziJRz4Dyyr/fYKREwS7gR4JC0soSOMw==", + "version": "13.4.7", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.7.tgz", + "integrity": "sha512-sW9Yt36Db1nXJL+mTr2Wo0y+VkPWeYhygvcHj1FF0srVtV+VoDjxleKtny21QHaG05zdeZnw2fCtf2+dEqgwqA==", "cpu": [ "x64" ], @@ -1196,12 +1196,12 @@ } }, "node_modules/@prisma/client": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-4.14.0.tgz", - "integrity": "sha512-MK/XaA2sFdfaOa7I9MjNKz6dxeIEdeZlnpNRoF2w3JuRLlFJLkpp6cD3yaqw2nUUhbrn3Iqe3ZpVV+VuGGil7Q==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-4.11.0.tgz", + "integrity": "sha512-0INHYkQIqgAjrt7NzhYpeDQi8x3Nvylc2uDngKyFDDj1tTRQ4uV1HnVmd1sQEraeVAN63SOK0dgCKQHlvjL0KA==", "hasInstallScript": true, "dependencies": { - "@prisma/engines-version": "4.14.0-67.d9a4c5988f480fa576d43970d5a23641aa77bc9c" + "@prisma/engines-version": "4.11.0-57.8fde8fef4033376662cad983758335009d522acb" }, "engines": { "node": ">=14.17" @@ -1216,16 +1216,16 @@ } }, "node_modules/@prisma/engines": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-4.14.0.tgz", - "integrity": "sha512-PDNlhP/1vyTgmNyiucGqGCdXIp7HIkkvKO50si3y3PcceeHvqtiKPaH1iJdz63jCWMVMbj2MElSxXPOeBvEVIQ==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-4.11.0.tgz", + "integrity": "sha512-0AEBi2HXGV02cf6ASsBPhfsVIbVSDC9nbQed4iiY5eHttW9ZtMxHThuKZE1pnESbr8HRdgmFSa/Kn4OSNYuibg==", "devOptional": true, "hasInstallScript": true }, "node_modules/@prisma/engines-version": { - "version": "4.14.0-67.d9a4c5988f480fa576d43970d5a23641aa77bc9c", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.14.0-67.d9a4c5988f480fa576d43970d5a23641aa77bc9c.tgz", - "integrity": "sha512-3jum8/YSudeSN0zGW5qkpz+wAN2V/NYCQ+BPjvHYDfWatLWlQkqy99toX0GysDeaUoBIJg1vaz2yKqiA3CFcQw==" + "version": "4.11.0-57.8fde8fef4033376662cad983758335009d522acb", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.11.0-57.8fde8fef4033376662cad983758335009d522acb.tgz", + "integrity": "sha512-3Vd8Qq06d5xD8Ch5WauWcUUrsVPdMC6Ge8ILji8RFfyhUpqon6qSyGM0apvr1O8n8qH8cKkEFqRPsYjuz5r83g==" }, "node_modules/@sinclair/typebox": { "version": "0.25.24", @@ -1243,9 +1243,9 @@ } }, "node_modules/@sinonjs/fake-timers": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.1.0.tgz", - "integrity": "sha512-w1qd368vtrwttm1PRJWPW1QHlbmHrVDGs1eBH/jZvRPUFS4MNXV9Q33EQdjOdeAxZ7O8+3wM7zxztm2nfUSyKw==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0" @@ -1280,9 +1280,9 @@ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" }, "node_modules/@types/babel__core": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", - "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", "dev": true, "dependencies": { "@babel/parser": "^7.20.7", @@ -1312,12 +1312,12 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.5.tgz", - "integrity": "sha512-enCvTL8m/EHS/zIvJno9nE+ndYPh1/oNFzRYRmtUqJICG2VnCSBzMLW5VN2KCQU91f23tsNKR8v7VJJQMatl7Q==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", "dev": true, "dependencies": { - "@babel/types": "^7.3.0" + "@babel/types": "^7.20.7" } }, "node_modules/@types/body-parser": { @@ -1381,6 +1381,12 @@ "@types/node": "*" } }, + "node_modules/@types/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", + "dev": true + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -1406,9 +1412,9 @@ } }, "node_modules/@types/jest": { - "version": "29.5.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.1.tgz", - "integrity": "sha512-tEuVcHrpaixS36w7hpsfLBLpjtMRJUE09/MHXn923LOVojDwyC14cWcfc0rDs0VEfUyYmt/+iX1kxxp+gZMcaQ==", + "version": "29.5.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.2.tgz", + "integrity": "sha512-mSoZVJF5YzGVCk+FsDxzDuH7s+SCkzrgKZzf0Z0T2WudhBUPoF6ktoTPC4R0ZoCPCV5xUvuU6ias5NvxcBcMMg==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -1440,14 +1446,14 @@ } }, "node_modules/@types/node": { - "version": "18.16.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.9.tgz", - "integrity": "sha512-IeB32oIV4oGArLrd7znD2rkHQ6EDCM+2Sr76dJnrHwv9OHBTTM6nuDLK9bmikXzPa0ZlWMWtRGo/Uw4mrzQedA==" + "version": "18.16.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.18.tgz", + "integrity": "sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw==" }, "node_modules/@types/node-fetch": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.3.tgz", - "integrity": "sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz", + "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==", "dev": true, "dependencies": { "@types/node": "*", @@ -1478,9 +1484,9 @@ } }, "node_modules/@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", "dev": true }, "node_modules/@types/qs": { @@ -1506,11 +1512,12 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", + "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", "dev": true, "dependencies": { + "@types/http-errors": "*", "@types/mime": "*", "@types/node": "*" } @@ -1522,9 +1529,9 @@ "dev": true }, "node_modules/@types/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.2.tgz", + "integrity": "sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ==", "dev": true }, "node_modules/@types/validator": { @@ -1566,9 +1573,9 @@ } }, "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", "bin": { "acorn": "bin/acorn" }, @@ -1852,9 +1859,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", "dev": true, "funding": [ { @@ -1864,13 +1871,17 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" }, "bin": { "browserslist": "cli.js" @@ -1991,9 +2002,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001487", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001487.tgz", - "integrity": "sha512-83564Z3yWGqXsh2vaH/mhXfEM0wX+NlBCm1jYHOb97TrTWJEmPTccZgeLTPBUUb0PNVo+oomb7wkimZBIERClA==", + "version": "1.0.30001508", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001508.tgz", + "integrity": "sha512-sdQZOJdmt3GJs1UMNpCCCyeuS2IEGLXnHyAo9yIO5JJDjbjoVRij4M1qep6P6gFpptD1PqIYgzM+gwJbOi92mw==", "funding": [ { "type": "opencollective", @@ -2094,9 +2105,9 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, "node_modules/class-is": { @@ -2376,12 +2387,15 @@ } }, "node_modules/dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", "dev": true, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, "node_modules/ecdsa-sig-formatter": { @@ -2398,9 +2412,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.394", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.394.tgz", - "integrity": "sha512-0IbC2cfr8w5LxTz+nmn2cJTGafsK9iauV2r5A5scfzyovqLrxuLoxOHE5OBobP3oVIggJT+0JfKnw9sm87c8Hw==", + "version": "1.4.440", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.440.tgz", + "integrity": "sha512-r6dCgNpRhPwiWlxbHzZQ/d9swfPaEJGi8ekqRBwQYaR3WmA5VkqQfBWSDDjuJU1ntO+W9tHx8OHV/96Q8e0dVw==", "dev": true }, "node_modules/emittery": { @@ -2786,6 +2800,11 @@ "node": ">= 6" } }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -2798,8 +2817,7 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/has": { "version": "1.0.3", @@ -2987,9 +3005,9 @@ } }, "node_modules/is-core-module": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", - "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -3658,9 +3676,9 @@ } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -3853,9 +3871,9 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/jsonwebtoken/node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -3900,7 +3918,7 @@ } }, "node_modules/le-coffre-resources": { - "resolved": "git+ssh://git@github.com/smart-chain-fr/leCoffre-resources.git#f90ab464e3b0f9dd70601b9c8f8bbf5090b685a7", + "resolved": "git+ssh://git@github.com/smart-chain-fr/leCoffre-resources.git#16c30e06af8241bf6fef6ec8083da9bf434048df", "license": "MIT", "dependencies": { "class-transformer": "^0.5.1", @@ -3918,9 +3936,9 @@ } }, "node_modules/libphonenumber-js": { - "version": "1.10.30", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.30.tgz", - "integrity": "sha512-PLGc+xfrQrkya/YK2/5X+bPpxRmyJBHM+xxz9krUdSgk4Vs2ZwxX5/Ow0lv3r9PDlDtNWb4u+it8MY5rZ0IyGw==" + "version": "1.10.36", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.36.tgz", + "integrity": "sha512-NCPWES1poiS4NSzIS49mxHM5hCkSWov8wFICRKfL9narzimqAXlnAgNloHCt0BukZHbWt8TIStCdzLy7LXBYpQ==" }, "node_modules/lines-and-columns": { "version": "1.2.4", @@ -4133,9 +4151,9 @@ } }, "node_modules/module-alias": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.2.tgz", - "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==" + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.3.tgz", + "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==" }, "node_modules/ms": { "version": "2.0.0", @@ -4314,16 +4332,17 @@ } }, "node_modules/next": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/next/-/next-13.4.2.tgz", - "integrity": "sha512-aNFqLs3a3nTGvLWlO9SUhCuMUHVPSFQC0+tDNGAsDXqx+WJDFSbvc233gOJ5H19SBc7nw36A9LwQepOJ2u/8Kg==", + "version": "13.4.7", + "resolved": "https://registry.npmjs.org/next/-/next-13.4.7.tgz", + "integrity": "sha512-M8z3k9VmG51SRT6v5uDKdJXcAqLzP3C+vaKfLIAM0Mhx1um1G7MDnO63+m52qPdZfrTFzMZNzfsgvm3ghuVHIQ==", "dependencies": { - "@next/env": "13.4.2", + "@next/env": "13.4.7", "@swc/helpers": "0.5.1", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001406", "postcss": "8.4.14", "styled-jsx": "5.1.1", + "watchpack": "2.4.0", "zod": "3.21.4" }, "bin": { @@ -4333,20 +4352,19 @@ "node": ">=16.8.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "13.4.2", - "@next/swc-darwin-x64": "13.4.2", - "@next/swc-linux-arm64-gnu": "13.4.2", - "@next/swc-linux-arm64-musl": "13.4.2", - "@next/swc-linux-x64-gnu": "13.4.2", - "@next/swc-linux-x64-musl": "13.4.2", - "@next/swc-win32-arm64-msvc": "13.4.2", - "@next/swc-win32-ia32-msvc": "13.4.2", - "@next/swc-win32-x64-msvc": "13.4.2" + "@next/swc-darwin-arm64": "13.4.7", + "@next/swc-darwin-x64": "13.4.7", + "@next/swc-linux-arm64-gnu": "13.4.7", + "@next/swc-linux-arm64-musl": "13.4.7", + "@next/swc-linux-x64-gnu": "13.4.7", + "@next/swc-linux-x64-musl": "13.4.7", + "@next/swc-win32-arm64-msvc": "13.4.7", + "@next/swc-win32-ia32-msvc": "13.4.7", + "@next/swc-win32-x64-msvc": "13.4.7" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "fibers": ">= 3.1.0", - "node-sass": "^6.0.0 || ^7.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", "sass": "^1.3.0" @@ -4358,9 +4376,6 @@ "fibers": { "optional": true }, - "node-sass": { - "optional": true - }, "sass": { "optional": true } @@ -4403,9 +4418,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", "dev": true }, "node_modules/node-schedule": { @@ -4723,9 +4738,9 @@ } }, "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, "engines": { "node": ">= 6" @@ -4808,13 +4823,13 @@ } }, "node_modules/prisma": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-4.14.0.tgz", - "integrity": "sha512-+5dMl1uxMQb4RepndY6AwR9xi1cDcaGFICu+ws6/Nmgt93mFPNj8tYxSfTdmfg+rkNrUId9rk/Ac2vTgLe/oXA==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-4.11.0.tgz", + "integrity": "sha512-4zZmBXssPUEiX+GeL0MUq/Yyie4ltiKmGu7jCJFnYMamNrrulTBc+D+QwAQSJ01tyzeGHlD13kOnqPwRipnlNw==", "devOptional": true, "hasInstallScript": true, "dependencies": { - "@prisma/engines": "4.14.0" + "@prisma/engines": "4.11.0" }, "bin": { "prisma": "build/index.js", @@ -5529,9 +5544,9 @@ } }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -5592,9 +5607,9 @@ } }, "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" }, "node_modules/type-detect": { "version": "4.0.8", @@ -5806,6 +5821,18 @@ "makeerror": "1.0.12" } }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", diff --git a/package.json b/package.json index c3e19dfb..d2d12d63 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "cors": "^2.8.5", "express": "^4.18.2", "jsonwebtoken": "^9.0.0", - "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.52", + "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.54", "module-alias": "^2.2.2", "multer": "^1.4.5-lts.1", "next": "^13.1.5", diff --git a/src/app/api/idnot/UserController.ts b/src/app/api/idnot/UserController.ts index ad72402d..24863fff 100644 --- a/src/app/api/idnot/UserController.ts +++ b/src/app/api/idnot/UserController.ts @@ -17,20 +17,24 @@ export default class UserController extends ApiController { * @todo Used for test, should be removed * @returns User */ - // @Post("/api/v1/idnot/user/:code") - // protected async getUserInfosFromIdnot(req: Request, response: Response) { - // console.warn("/api/v1/idnot/user/:code used for test, should be removed"); + @Post("/api/v1/idnot/user/:code") + protected async getUserInfosFromIdnot(req: Request, response: Response) { + console.warn("/api/v1/idnot/user/:code used for test, should be removed"); - // try { - // const code = req.params["code"]; - // const user = await this.authService.getUserFromIdNotTokens(code!); - // //success - // this.httpSuccess(response, user); - // } catch (error) { - // this.httpInternalError(response); - // return; - // } - // } + try { + const code = req.params["code"]; + if (!code) throw new Error("code is required"); + const token = await fetch('https://qual-connexion.idnot.fr/IdPOAuth2/token/idnot_idp_v1', {method: 'POST'}); + console.log(token); + //const user = await this.authService.getUserFromIdNotTokens(code!); + //success + this.httpSuccess(response); + } catch (error) { + console.log(error) + this.httpInternalError(response); + return; + } + } @Post("/api/v1/idnot/user/login/:idnot") protected async login(req: Request, response: Response) { @@ -38,14 +42,13 @@ export default class UserController extends ApiController { const id = req.params["idnot"]; if (!id) throw new Error("idnot is required"); - const payload = await this.authService.getUserPayload(id!); + const payload = await this.authService.getUserJwtPayload(id!); const accessToken = this.authService.generateAccessToken(payload); const refreshToken = this.authService.generateRefreshToken(payload); //success this.httpSuccess(response, { accessToken, refreshToken }); } catch (error) { - console.log(error) this.httpInternalError(response); return; } diff --git a/src/app/api/super-admin/OfficeRolesController.ts b/src/app/api/super-admin/OfficeRolesController.ts new file mode 100644 index 00000000..dd7de7a0 --- /dev/null +++ b/src/app/api/super-admin/OfficeRolesController.ts @@ -0,0 +1,147 @@ +import { Response, Request } from "express"; +import { Controller, Get, Post, Put } from "@ControllerPattern/index"; +import ApiController from "@Common/system/controller-pattern/ApiController"; +import OfficeRolesService from "@Services/super-admin/OfficeRolesService/OfficeRolesService"; +import { Service } from "typedi"; +import { validateOrReject } from "class-validator"; +import { OfficeRole } from "le-coffre-resources/dist/Notary"; +import { OfficeRoles } from "@prisma/client"; +import authHandler from "@App/middlewares/AuthHandler"; +import ruleHandler from "@App/middlewares/RulesHandler"; + +@Controller() +@Service() +export default class OfficeRolesController extends ApiController { + constructor(private officeRolesService: OfficeRolesService) { + super(); + } + + /** + * @description Get all officeRoles + */ + @Get("/api/v1/super-admin/officeRoles", [authHandler,ruleHandler]) + protected async get(req: Request, response: Response) { + try { + //get query + const query = JSON.parse(req.query["q"] as string); + + //call service to get prisma entity + const officeRolesEntities = await this.officeRolesService.get(query); + + //Hydrate ressource with prisma entity + const officeRoles = OfficeRole.hydrateArray(officeRolesEntities, { strategy: "excludeAll" }); + + //success + this.httpSuccess(response, officeRoles); + } catch (error) { + this.httpInternalError(response, error); + return; + } + } + + /** + * @description Create a new officeRole + */ + @Post("/api/v1/super-admin/office-roles", [authHandler,ruleHandler]) + protected async getAddresses(req: Request, response: Response) { + try { + //init IOfficeRole resource with request body values + const officeRoleEntity = OfficeRole.hydrate(req.body); + + //validate officeRole + await validateOrReject(officeRoleEntity, { groups: ["createOfficeRole"] }); + + //call service to get prisma entity + const officeRoleEntityCreated = await this.officeRolesService.create(officeRoleEntity); + + //Hydrate ressource with prisma entity + const officeRole = OfficeRole.hydrate(officeRoleEntityCreated, { + strategy: "excludeAll", + }); + + //success + this.httpCreated(response, officeRole); + } catch (error) { + this.httpInternalError(response, error); + return; + } + } + + /** + * @description Modify a specific officeRole by uid + */ + @Put("/api/v1/super-admin/office-roles/:uid", [authHandler,ruleHandler]) + protected async put(req: Request, response: Response) { + try { + const uid = req.params["uid"]; + if (!uid) { + this.httpBadRequest(response, "No uid provided"); + return; + } + + const officeRoleFound = await this.officeRolesService.getByUid(uid); + + if (!officeRoleFound) { + this.httpNotFoundRequest(response, "officeRole not found"); + return; + } + + //init IOfficeRole resource with request body values + const officeRoleEntity = OfficeRole.hydrate(req.body); + + //validate officeRole + await validateOrReject(officeRoleEntity, { groups: ["updateOfficeRole"] }); + + //call service to get prisma entity + const officeRoleEntityUpdated = await this.officeRolesService.update(officeRoleEntity); + + //Hydrate ressource with prisma entity + const officeRole = OfficeRole.hydrate(officeRoleEntityUpdated, { + strategy: "excludeAll", + }); + + //success + this.httpSuccess(response, officeRole); + } catch (error) { + this.httpInternalError(response, error); + return; + } + } + + /** + * @description Get a specific officeRole by uid + */ + @Get("/api/v1/super-admin/office-roles/:uid", [authHandler,ruleHandler]) + protected async getOneByUid(req: Request, response: Response) { + try { + const uid = req.params["uid"]; + if (!uid) { + this.httpBadRequest(response, "No uid provided"); + return; + } + let officeRoleEntity: OfficeRoles | null; + //get query + if (req.query["q"]) { + const query = JSON.parse(req.query["q"] as string); + officeRoleEntity = await this.officeRolesService.getByUid(uid, query); + } else { + //call service to get prisma entity + officeRoleEntity = await this.officeRolesService.getByUid(uid); + } + + if (!officeRoleEntity) { + this.httpNotFoundRequest(response, "officeRole not found"); + return; + } + + //Hydrate ressource with prisma entity + const officeRole = OfficeRole.hydrate(officeRoleEntity, { strategy: "excludeAll" }); + + //success + this.httpSuccess(response, officeRole); + } catch (error) { + this.httpInternalError(response, error); + return; + } + } +} diff --git a/src/app/api/super-admin/RulesController.ts b/src/app/api/super-admin/RulesController.ts index fe7e4ee3..84038796 100644 --- a/src/app/api/super-admin/RulesController.ts +++ b/src/app/api/super-admin/RulesController.ts @@ -49,8 +49,8 @@ export default class RulesController extends ApiController { const ruleEntity = Rule.hydrate(req.body); //validate rule - await validateOrReject(ruleEntity, { groups: ["createRule"] }); - + await validateOrReject(ruleEntity, {groups: ["createRule"]}); + //call service to get prisma entity const ruleEntityCreated = await this.rulesService.create(ruleEntity); diff --git a/src/app/index.ts b/src/app/index.ts index f23a9a7d..9848d5c1 100644 --- a/src/app/index.ts +++ b/src/app/index.ts @@ -11,7 +11,7 @@ import DocumentTypesController from "./api/super-admin/DocumentTypesController"; import IdNotUserController from "./api/idnot/UserController"; import DocumentsControllerCustomer from "./api/customer/DocumentsController"; import FilesController from "./api/super-admin/FilesController"; -import RulesController from "./api/super-admin/RolesController"; +import RulesController from "./api/super-admin/RulesController"; import RolesController from "./api/super-admin/RolesController"; diff --git a/src/app/middlewares/AuthHandler.ts b/src/app/middlewares/AuthHandler.ts index 549cfe1f..3ab26600 100644 --- a/src/app/middlewares/AuthHandler.ts +++ b/src/app/middlewares/AuthHandler.ts @@ -18,7 +18,6 @@ export default function authHandler(req: Request, response: Response, next: Next response.sendStatus(HttpCodes.UNAUTHORIZED); return; } - console.log(userPayload); req.body.user = userPayload next(); }); diff --git a/src/common/databases/migrations/20230627155351_v6/migration.sql b/src/common/databases/migrations/20230627155351_v6/migration.sql new file mode 100644 index 00000000..42e2a343 --- /dev/null +++ b/src/common/databases/migrations/20230627155351_v6/migration.sql @@ -0,0 +1,86 @@ +/* + Warnings: + + - You are about to drop the `office_role_has_rules` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `role_has_rules` table. If the table is not empty, all the data it contains will be lost. + +*/ +-- DropForeignKey +ALTER TABLE "office_role_has_rules" DROP CONSTRAINT "office_role_has_rules_office_uid_fkey"; + +-- DropForeignKey +ALTER TABLE "office_role_has_rules" DROP CONSTRAINT "office_role_has_rules_role_uid_fkey"; + +-- DropForeignKey +ALTER TABLE "office_role_has_rules" DROP CONSTRAINT "office_role_has_rules_rule_uid_fkey"; + +-- DropForeignKey +ALTER TABLE "role_has_rules" DROP CONSTRAINT "role_has_rules_role_uid_fkey"; + +-- DropForeignKey +ALTER TABLE "role_has_rules" DROP CONSTRAINT "role_has_rules_rule_uid_fkey"; + +-- AlterTable +ALTER TABLE "users" ADD COLUMN "office_role_uid" VARCHAR(255); + +-- DropTable +DROP TABLE "office_role_has_rules"; + +-- DropTable +DROP TABLE "role_has_rules"; + +-- CreateTable +CREATE TABLE "office_roles" ( + "uid" TEXT NOT NULL, + "name" VARCHAR(255) NOT NULL, + "office_uid" VARCHAR(255) NOT NULL, + "created_at" TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(3), + + CONSTRAINT "office_roles_pkey" PRIMARY KEY ("uid") +); + +-- CreateTable +CREATE TABLE "_RolesHasRules" ( + "A" TEXT NOT NULL, + "B" TEXT NOT NULL +); + +-- CreateTable +CREATE TABLE "_OfficeRolesHasRules" ( + "A" TEXT NOT NULL, + "B" TEXT NOT NULL +); + +-- CreateIndex +CREATE UNIQUE INDEX "office_roles_uid_key" ON "office_roles"("uid"); + +-- CreateIndex +CREATE UNIQUE INDEX "_RolesHasRules_AB_unique" ON "_RolesHasRules"("A", "B"); + +-- CreateIndex +CREATE INDEX "_RolesHasRules_B_index" ON "_RolesHasRules"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_OfficeRolesHasRules_AB_unique" ON "_OfficeRolesHasRules"("A", "B"); + +-- CreateIndex +CREATE INDEX "_OfficeRolesHasRules_B_index" ON "_OfficeRolesHasRules"("B"); + +-- AddForeignKey +ALTER TABLE "users" ADD CONSTRAINT "users_office_role_uid_fkey" FOREIGN KEY ("office_role_uid") REFERENCES "office_roles"("uid") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "office_roles" ADD CONSTRAINT "office_roles_office_uid_fkey" FOREIGN KEY ("office_uid") REFERENCES "offices"("uid") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_RolesHasRules" ADD CONSTRAINT "_RolesHasRules_A_fkey" FOREIGN KEY ("A") REFERENCES "roles"("uid") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_RolesHasRules" ADD CONSTRAINT "_RolesHasRules_B_fkey" FOREIGN KEY ("B") REFERENCES "rules"("uid") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_OfficeRolesHasRules" ADD CONSTRAINT "_OfficeRolesHasRules_A_fkey" FOREIGN KEY ("A") REFERENCES "office_roles"("uid") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_OfficeRolesHasRules" ADD CONSTRAINT "_OfficeRolesHasRules_B_fkey" FOREIGN KEY ("B") REFERENCES "rules"("uid") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/src/common/databases/migrations/20230628100711_v7/migration.sql b/src/common/databases/migrations/20230628100711_v7/migration.sql new file mode 100644 index 00000000..4d8f4bf3 --- /dev/null +++ b/src/common/databases/migrations/20230628100711_v7/migration.sql @@ -0,0 +1,144 @@ +/* + Warnings: + + - You are about to drop the `deed_has_document_types` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `deed_type_has_document_types` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `office_folder_has_customers` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `office_folder_has_stakeholder` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `user_has_notifications` table. If the table is not empty, all the data it contains will be lost. + +*/ +-- DropForeignKey +ALTER TABLE "deed_has_document_types" DROP CONSTRAINT "deed_has_document_types_deed_uid_fkey"; + +-- DropForeignKey +ALTER TABLE "deed_has_document_types" DROP CONSTRAINT "deed_has_document_types_document_type_uid_fkey"; + +-- DropForeignKey +ALTER TABLE "deed_type_has_document_types" DROP CONSTRAINT "deed_type_has_document_types_deed_type_uid_fkey"; + +-- DropForeignKey +ALTER TABLE "deed_type_has_document_types" DROP CONSTRAINT "deed_type_has_document_types_document_type_uid_fkey"; + +-- DropForeignKey +ALTER TABLE "office_folder_has_customers" DROP CONSTRAINT "office_folder_has_customers_customer_uid_fkey"; + +-- DropForeignKey +ALTER TABLE "office_folder_has_customers" DROP CONSTRAINT "office_folder_has_customers_office_folder_uid_fkey"; + +-- DropForeignKey +ALTER TABLE "office_folder_has_stakeholder" DROP CONSTRAINT "office_folder_has_stakeholder_office_folder_uid_fkey"; + +-- DropForeignKey +ALTER TABLE "office_folder_has_stakeholder" DROP CONSTRAINT "office_folder_has_stakeholder_user_stakeholder_uid_fkey"; + +-- DropForeignKey +ALTER TABLE "user_has_notifications" DROP CONSTRAINT "user_has_notifications_notification_uid_fkey"; + +-- DropForeignKey +ALTER TABLE "user_has_notifications" DROP CONSTRAINT "user_has_notifications_user_uid_fkey"; + +-- DropTable +DROP TABLE "deed_has_document_types"; + +-- DropTable +DROP TABLE "deed_type_has_document_types"; + +-- DropTable +DROP TABLE "office_folder_has_customers"; + +-- DropTable +DROP TABLE "office_folder_has_stakeholder"; + +-- DropTable +DROP TABLE "user_has_notifications"; + +-- CreateTable +CREATE TABLE "_OfficeFolderHasCustomers" ( + "A" TEXT NOT NULL, + "B" TEXT NOT NULL +); + +-- CreateTable +CREATE TABLE "_UserHasNotifications" ( + "A" TEXT NOT NULL, + "B" TEXT NOT NULL +); + +-- CreateTable +CREATE TABLE "_OfficeFolderHasStakeholders" ( + "A" TEXT NOT NULL, + "B" TEXT NOT NULL +); + +-- CreateTable +CREATE TABLE "_DeedHasDocumentTypes" ( + "A" TEXT NOT NULL, + "B" TEXT NOT NULL +); + +-- CreateTable +CREATE TABLE "_DeedTypeHasDocumentTypes" ( + "A" TEXT NOT NULL, + "B" TEXT NOT NULL +); + +-- CreateIndex +CREATE UNIQUE INDEX "_OfficeFolderHasCustomers_AB_unique" ON "_OfficeFolderHasCustomers"("A", "B"); + +-- CreateIndex +CREATE INDEX "_OfficeFolderHasCustomers_B_index" ON "_OfficeFolderHasCustomers"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_UserHasNotifications_AB_unique" ON "_UserHasNotifications"("A", "B"); + +-- CreateIndex +CREATE INDEX "_UserHasNotifications_B_index" ON "_UserHasNotifications"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_OfficeFolderHasStakeholders_AB_unique" ON "_OfficeFolderHasStakeholders"("A", "B"); + +-- CreateIndex +CREATE INDEX "_OfficeFolderHasStakeholders_B_index" ON "_OfficeFolderHasStakeholders"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_DeedHasDocumentTypes_AB_unique" ON "_DeedHasDocumentTypes"("A", "B"); + +-- CreateIndex +CREATE INDEX "_DeedHasDocumentTypes_B_index" ON "_DeedHasDocumentTypes"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_DeedTypeHasDocumentTypes_AB_unique" ON "_DeedTypeHasDocumentTypes"("A", "B"); + +-- CreateIndex +CREATE INDEX "_DeedTypeHasDocumentTypes_B_index" ON "_DeedTypeHasDocumentTypes"("B"); + +-- AddForeignKey +ALTER TABLE "_OfficeFolderHasCustomers" ADD CONSTRAINT "_OfficeFolderHasCustomers_A_fkey" FOREIGN KEY ("A") REFERENCES "customers"("uid") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_OfficeFolderHasCustomers" ADD CONSTRAINT "_OfficeFolderHasCustomers_B_fkey" FOREIGN KEY ("B") REFERENCES "office_folders"("uid") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_UserHasNotifications" ADD CONSTRAINT "_UserHasNotifications_A_fkey" FOREIGN KEY ("A") REFERENCES "notifications"("uid") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_UserHasNotifications" ADD CONSTRAINT "_UserHasNotifications_B_fkey" FOREIGN KEY ("B") REFERENCES "users"("uid") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_OfficeFolderHasStakeholders" ADD CONSTRAINT "_OfficeFolderHasStakeholders_A_fkey" FOREIGN KEY ("A") REFERENCES "office_folders"("uid") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_OfficeFolderHasStakeholders" ADD CONSTRAINT "_OfficeFolderHasStakeholders_B_fkey" FOREIGN KEY ("B") REFERENCES "users"("uid") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_DeedHasDocumentTypes" ADD CONSTRAINT "_DeedHasDocumentTypes_A_fkey" FOREIGN KEY ("A") REFERENCES "deed"("uid") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_DeedHasDocumentTypes" ADD CONSTRAINT "_DeedHasDocumentTypes_B_fkey" FOREIGN KEY ("B") REFERENCES "document_types"("uid") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_DeedTypeHasDocumentTypes" ADD CONSTRAINT "_DeedTypeHasDocumentTypes_A_fkey" FOREIGN KEY ("A") REFERENCES "deed_types"("uid") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_DeedTypeHasDocumentTypes" ADD CONSTRAINT "_DeedTypeHasDocumentTypes_B_fkey" FOREIGN KEY ("B") REFERENCES "document_types"("uid") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/src/common/databases/schema.prisma b/src/common/databases/schema.prisma index fa2ad5eb..35e7d73c 100644 --- a/src/common/databases/schema.prisma +++ b/src/common/databases/schema.prisma @@ -50,126 +50,88 @@ model Contacts { } model Users { - uid String @id @unique @default(uuid()) @map("uid") - idNot String @unique @db.VarChar(255) - contact Contacts @relation(fields: [contact_uid], references: [uid], onDelete: Cascade) - contact_uid String @unique @db.VarChar(255) - role Roles @relation(fields: [roles_uid], references: [uid], onDelete: Cascade) - roles_uid String @db.VarChar(255) - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt - office_membership Offices @relation(fields: [office_uid], references: [uid], onDelete: Cascade) - office_uid String @db.VarChar(255) - user_has_notifications UserHasNotifications[] - office_folder_has_stakeholder OfficeFolderHasStakeholders[] + uid String @id @unique @default(uuid()) @map("uid") + idNot String @unique @db.VarChar(255) + contact Contacts @relation(fields: [contact_uid], references: [uid], onDelete: Cascade) + contact_uid String @unique @db.VarChar(255) + role Roles @relation(fields: [roles_uid], references: [uid], onDelete: Cascade) + roles_uid String @db.VarChar(255) + office_role OfficeRoles? @relation(fields: [office_role_uid], references: [uid], onDelete: Cascade) + office_role_uid String? @db.VarChar(255) + created_at DateTime? @default(now()) + updated_at DateTime? @updatedAt + office_membership Offices @relation(fields: [office_uid], references: [uid], onDelete: Cascade) + office_uid String @db.VarChar(255) + notifications Notifications[] @relation("UserHasNotifications") + office_folders OfficeFolders[] @relation("OfficeFolderHasStakeholders") @@map("users") } model Offices { - uid String @id @unique @default(uuid()) - idNot String @unique @db.VarChar(255) - name String @db.VarChar(255) - crpcen String @unique @db.VarChar(255) - address Addresses @relation(fields: [address_uid], references: [uid], onDelete: Cascade) - address_uid String @unique @db.VarChar(255) - office_status EOfficeStatus @default(DESACTIVATED) - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt - deed_types DeedTypes[] - users Users[] - office_folders OfficeFolders[] - document_types DocumentTypes[] - office_role_has_rules OfficesRolesHasRules[] + uid String @id @unique @default(uuid()) + idNot String @unique @db.VarChar(255) + name String @db.VarChar(255) + crpcen String @unique @db.VarChar(255) + address Addresses @relation(fields: [address_uid], references: [uid], onDelete: Cascade) + address_uid String @unique @db.VarChar(255) + office_status EOfficeStatus @default(DESACTIVATED) + created_at DateTime? @default(now()) + updated_at DateTime? @updatedAt + deed_types DeedTypes[] + users Users[] + office_folders OfficeFolders[] + document_types DocumentTypes[] + office_roles OfficeRoles[] @@map("offices") } model Customers { - uid String @id @unique @default(uuid()) - status ECustomerStatus @default(PENDING) - contact Contacts @relation(fields: [contact_uid], references: [uid], onDelete: Cascade) - contact_uid String @unique @db.VarChar(255) - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt - office_folder_has_customers OfficeFolderHasCustomers[] - documents Documents[] + uid String @id @unique @default(uuid()) + status ECustomerStatus @default(PENDING) + contact Contacts @relation(fields: [contact_uid], references: [uid], onDelete: Cascade) + contact_uid String @unique @db.VarChar(255) + created_at DateTime? @default(now()) + updated_at DateTime? @updatedAt + office_folders OfficeFolders[] @relation("OfficeFolderHasCustomers") + documents Documents[] @@map("customers") } -model UserHasNotifications { - uid String @id @unique @default(uuid()) - user Users @relation(fields: [user_uid], references: [uid]) - user_uid String @db.VarChar(255) - notification Notifications @relation(fields: [notification_uid], references: [uid], onDelete: Cascade) - notification_uid String @db.VarChar(255) - notification_status ENotificationStatus @default(UNREAD) - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt - - @@unique([notification_uid, user_uid]) - @@map("user_has_notifications") -} - model Notifications { - uid String @id @unique @default(uuid()) - message String @db.VarChar(255) - redirection_url String @db.VarChar(255) - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt - user_has_notifications UserHasNotifications[] + uid String @id @unique @default(uuid()) + message String @db.VarChar(255) + redirection_url String @db.VarChar(255) + created_at DateTime? @default(now()) + updated_at DateTime? @updatedAt + users Users[] @relation("UserHasNotifications") @@map("notifications") } model OfficeFolders { - uid String @id @unique @default(uuid()) - folder_number String @db.VarChar(255) - name String @db.VarChar(255) - description String? @db.VarChar(255) - archived_description String? @db.VarChar(255) - status EFolderStatus @default(LIVE) - deed Deeds @relation(fields: [deed_uid], references: [uid], onDelete: Cascade) - deed_uid String @unique @db.VarChar(255) - office Offices @relation(fields: [office_uid], references: [uid], onDelete: Cascade) - office_uid String @db.VarChar(255) - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt - office_folder_has_customers OfficeFolderHasCustomers[] - office_folder_has_stakeholder OfficeFolderHasStakeholders[] - documents Documents[] + uid String @id @unique @default(uuid()) + folder_number String @db.VarChar(255) + name String @db.VarChar(255) + description String? @db.VarChar(255) + archived_description String? @db.VarChar(255) + status EFolderStatus @default(LIVE) + deed Deeds @relation(fields: [deed_uid], references: [uid], onDelete: Cascade) + deed_uid String @unique @db.VarChar(255) + office Offices @relation(fields: [office_uid], references: [uid], onDelete: Cascade) + office_uid String @db.VarChar(255) + created_at DateTime? @default(now()) + updated_at DateTime? @updatedAt + stakeholders Users[] @relation("OfficeFolderHasStakeholders") + customers Customers[] @relation("OfficeFolderHasCustomers") + documents Documents[] @@unique([folder_number, office_uid]) @@map("office_folders") } -model OfficeFolderHasCustomers { - uid String @id @unique @default(uuid()) - customer Customers @relation(fields: [customer_uid], references: [uid], onDelete: Cascade) - customer_uid String @db.VarChar(255) - office_folder OfficeFolders @relation(fields: [office_folder_uid], references: [uid], onDelete: Cascade) - office_folder_uid String @db.VarChar(255) - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt - - @@unique([office_folder_uid, customer_uid]) - @@map("office_folder_has_customers") -} - -model OfficeFolderHasStakeholders { - uid String @id @unique @default(uuid()) - office_folder OfficeFolders @relation(fields: [office_folder_uid], references: [uid], onDelete: Cascade) - office_folder_uid String @db.VarChar(255) - user_stakeholder Users @relation(fields: [user_stakeholder_uid], references: [uid], onDelete: Cascade) - user_stakeholder_uid String @db.VarChar(255) - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt - - @@unique([office_folder_uid, user_stakeholder_uid]) - @@map("office_folder_has_stakeholder") -} - model Documents { uid String @id @unique @default(uuid()) document_status EDocumentStatus @default(ASKED) @@ -228,126 +190,86 @@ model BlockchainAnchors { } model DocumentTypes { - uid String @id @unique @default(uuid()) - name String @db.VarChar(255) - public_description String @db.VarChar(255) - private_description String? @db.VarChar(255) - office Offices @relation(fields: [office_uid], references: [uid], onDelete: Cascade) - office_uid String @db.VarChar(255) - archived_at DateTime? - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt - documents Documents[] - deed_has_document_types DeedHasDocumentTypes[] - deed_type_has_document_types DeedTypeHasDocumentTypes[] + uid String @id @unique @default(uuid()) + name String @db.VarChar(255) + public_description String @db.VarChar(255) + private_description String? @db.VarChar(255) + office Offices @relation(fields: [office_uid], references: [uid], onDelete: Cascade) + office_uid String @db.VarChar(255) + archived_at DateTime? + created_at DateTime? @default(now()) + updated_at DateTime? @updatedAt + documents Documents[] + deeds Deeds[] @relation("DeedHasDocumentTypes") + deed_type DeedTypes[] @relation("DeedTypeHasDocumentTypes") @@unique([name, office_uid]) @@map("document_types") } -model DeedHasDocumentTypes { - uid String @id @unique @default(uuid()) - document_type DocumentTypes @relation(fields: [document_type_uid], references: [uid], onDelete: Cascade) - document_type_uid String @db.VarChar(255) - deed Deeds @relation(fields: [deed_uid], references: [uid], onDelete: Cascade) - deed_uid String @db.VarChar(255) - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt - - @@unique([deed_uid, document_type_uid]) - @@map("deed_has_document_types") -} - model Deeds { - uid String @id @unique @default(uuid()) - deed_type DeedTypes @relation(fields: [deed_type_uid], references: [uid], onDelete: Cascade) - deed_type_uid String @db.VarChar(255) - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt - deed_has_document_types DeedHasDocumentTypes[] - office_folder OfficeFolders? + uid String @id @unique @default(uuid()) + deed_type DeedTypes @relation(fields: [deed_type_uid], references: [uid], onDelete: Cascade) + deed_type_uid String @db.VarChar(255) + created_at DateTime? @default(now()) + updated_at DateTime? @updatedAt + document_types DocumentTypes[] @relation("DeedHasDocumentTypes") + office_folder OfficeFolders? @@map("deed") } model DeedTypes { - uid String @id @unique @default(uuid()) - name String @db.VarChar(255) - description String @db.VarChar(255) - archived_at DateTime? - office Offices @relation(fields: [office_uid], references: [uid], onDelete: Cascade) - office_uid String @db.VarChar(255) - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt - deed Deeds[] - deed_type_has_document_types DeedTypeHasDocumentTypes[] + uid String @id @unique @default(uuid()) + name String @db.VarChar(255) + description String @db.VarChar(255) + archived_at DateTime? + office Offices @relation(fields: [office_uid], references: [uid], onDelete: Cascade) + office_uid String @db.VarChar(255) + created_at DateTime? @default(now()) + updated_at DateTime? @updatedAt + deed Deeds[] + document_types DocumentTypes[] @relation("DeedTypeHasDocumentTypes") @@unique([name, office_uid]) @@map("deed_types") } -model DeedTypeHasDocumentTypes { - uid String @id @unique @default(uuid()) - document_type DocumentTypes @relation(fields: [document_type_uid], references: [uid], onDelete: Cascade) - document_type_uid String @db.VarChar(255) - deed_type DeedTypes @relation(fields: [deed_type_uid], references: [uid], onDelete: Cascade) - deed_type_uid String @db.VarChar(255) - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt - - @@unique([deed_type_uid, document_type_uid]) - @@map("deed_type_has_document_types") -} - model Roles { - uid String @id @unique @default(uuid()) - name String @db.VarChar(255) - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt - role_has_rules RolesHasRules[] - office_role_has_rules OfficesRolesHasRules[] - users Users[] + uid String @id @unique @default(uuid()) + name String @db.VarChar(255) + created_at DateTime? @default(now()) + updated_at DateTime? @updatedAt + rules Rules[] @relation("RolesHasRules") + users Users[] @@map("roles") } +model OfficeRoles { + uid String @id @unique @default(uuid()) + name String @db.VarChar(255) + office Offices @relation(fields: [office_uid], references: [uid], onDelete: Cascade) + office_uid String @db.VarChar(255) + created_at DateTime? @default(now()) + updated_at DateTime? @updatedAt + rules Rules[] @relation("OfficeRolesHasRules") + users Users[] + + @@map("office_roles") +} + model Rules { - uid String @id @unique @default(uuid()) - name String @db.VarChar(255) - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt - role_has_rules RolesHasRules[] - office_roles_has_rules OfficesRolesHasRules[] + uid String @id @unique @default(uuid()) + name String @db.VarChar(255) + created_at DateTime? @default(now()) + updated_at DateTime? @updatedAt + role Roles[] @relation("RolesHasRules") + office_roles OfficeRoles[] @relation("OfficeRolesHasRules") @@map("rules") } -model RolesHasRules { - uid String @id @unique @default(uuid()) - role Roles @relation(fields: [role_uid], references: [uid], onDelete: Cascade) - role_uid String @db.VarChar(255) - rule Rules @relation(fields: [rule_uid], references: [uid], onDelete: Cascade) - rule_uid String @db.VarChar(255) - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt - - @@map("role_has_rules") -} - -model OfficesRolesHasRules { - uid String @id @unique @default(uuid()) - office Offices @relation(fields: [office_uid], references: [uid], onDelete: Cascade) - role Roles @relation(fields: [role_uid], references: [uid], onDelete: Cascade) - rule Rules @relation(fields: [rule_uid], references: [uid], onDelete: Cascade) - office_uid String @db.VarChar(255) - role_uid String @db.VarChar(255) - rule_uid String @db.VarChar(255) - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt - - @@map("office_role_has_rules") -} - enum ECivility { MALE FEMALE diff --git a/src/common/databases/seeders/seeder.ts b/src/common/databases/seeders/seeder.ts index c8eb63f8..a64ab0b5 100644 --- a/src/common/databases/seeders/seeder.ts +++ b/src/common/databases/seeders/seeder.ts @@ -1,29 +1,22 @@ -import { - Addresses, - Contacts, - Customers, - DeedHasDocumentTypes, - DeedTypeHasDocumentTypes, - DeedTypes, - Deeds, - DocumentHistory, - DocumentTypes, - Documents, - EDocumentStatus, - EFolderStatus, - EOfficeStatus, - OfficeFolderHasCustomers, - OfficeFolders, - Offices, - Users, - ECivility, - ECustomerStatus, - PrismaClient, - Roles, -} from "@prisma/client"; +import 'module-alias/register'; +import { EFolderStatus, EOfficeStatus, ECivility, ECustomerStatus, PrismaClient, Prisma } from "@prisma/client"; +import User, { + Address, + Contact, + Customer, + Deed, + DeedType, + Office, + OfficeFolder, + OfficeRole, + Role, + Rule, + DocumentType, +} from "le-coffre-resources/dist/SuperAdmin"; -(async () => { +export default async function main() { const prisma = new PrismaClient(); + const randomString = () => { const chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; @@ -31,569 +24,1595 @@ import { for (let i = 10; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)]; return result; }; - const uidCustomer1: string = randomString(); - const uidCustomer2: string = randomString(); - const uidContact1: string = randomString(); - const uidContact2: string = randomString(); - const uidContact3: string = randomString(); - const uidContact4: string = randomString(); + const idNot1 = randomString(); + const idNot2 = randomString(); + const idNot3 = randomString(); + const idNot4 = randomString(); + const idNot5 = randomString(); + const idNot6 = randomString(); - const uidAddress1: string = randomString(); - const uidAddress2: string = randomString(); - const uidAddress3: string = randomString(); - const uidAddress4: string = randomString(); - - const uidOffice1: string = randomString(); - const uidOffice2: string = randomString(); - - const uidUser1: string = randomString(); - const uidUser2: string = randomString(); - - const uidRole1: string = randomString(); - const uidRole2: string = randomString(); - - const uidOfficeFolder1: string = randomString(); - const uidOfficeFolder2: string = randomString(); - const uidOfficeFolder3: string = randomString(); - const uidOfficeFolder4: string = randomString(); - const uidOfficeFolder5: string = randomString(); - - const uidDeed1: string = randomString(); - const uidDeed2: string = randomString(); - const uidDeed3: string = randomString(); - const uidDeed4: string = randomString(); - const uidDeed5: string = randomString(); - - const uidDeedType1: string = randomString(); - const uidDeedType2: string = randomString(); - - const uidDocument1: string = randomString(); - const uidDocument2: string = randomString(); - const uidDocument3: string = randomString(); - const uidDocument4: string = randomString(); - const uidDocument5: string = randomString(); - - const uidDocumentType1: string = randomString(); - const uidDocumentType2: string = randomString(); - const uidDocumentType3: string = randomString(); - - const uidOfficeFolderHasCustomer1: string = randomString(); - const uidOfficeFolderHasCustomer2: string = randomString(); - - const uidDeedHasDocumentType1: string = randomString(); - const uidDeedHasDocumentType2: string = randomString(); - - const uidDeedTypeHasDocumentType1: string = randomString(); - const uidDeedTypeHasDocumentType2: string = randomString(); - - const uidDocumentHistory1: string = randomString(); - const uidDocumentHistory2: string = randomString(); - - // const existingData = await prisma.contacts.findFirst({ where: { uid: uidContact4 } }); - // if (existingData) { - // console.log("Seed data already exists. Skipping seeding process."); - // return; - // } - - - const customers: Customers[] = [ + const addresses: Address[] = [ { - uid: uidCustomer1, - contact_uid: uidContact1, - created_at: new Date(), - updated_at: new Date(), - status: ECustomerStatus.PENDING, - }, - { - uid: uidCustomer2, - contact_uid: uidContact2, - created_at: new Date(), - updated_at: new Date(), - status: ECustomerStatus.PENDING, - }, - ]; - - const addresses: Addresses[] = [ - { - uid: uidAddress1, - address: "123 Main St", - city: "Los Angeles", - zip_code: 90001, + address: "148 Avenue du bac", + city: "Rennes", + zip_code: 35000, created_at: new Date(), updated_at: new Date(), }, { - uid: uidAddress2, address: "Rue Pierre Emillion", - city: "Paris", - zip_code: 75003, + city: "Pacé", + zip_code: 35740, created_at: new Date(), updated_at: new Date(), }, { - uid: uidAddress3, address: "Rue Pierre Charles", - city: "Paris", - zip_code: 75003, + city: "Rennes", + zip_code: 35000, created_at: new Date(), updated_at: new Date(), }, { - uid: uidAddress4, address: "Rue Pierre Pologne", - city: "Paris", - zip_code: 75003, + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Rue Pierre Marcel", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Rue Pierre Jacques", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Rue Pierre Pascal", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Rue Maxime Henry", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Rue Maxime Francis", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Avenue Paul Roger", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Avenue Paul Franck", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Avenue Paul Maréchal", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Avenue Marcel Denis", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Place Alexandre", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Place Alexandre Jacques", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Place Alexandre 2", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Rue du livre", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Place de la joie", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Rue Paul Henry", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Rue Marcelin", + city: "Rennes", + zip_code: 35000, created_at: new Date(), updated_at: new Date(), }, ]; - const contacts: Contacts[] = [ + const contacts: Contact[] = [ { - uid: uidContact1, - address_uid: uidAddress1, - first_name: "John", - last_name: "Doe", - email: "john.doe@example.com", - phone_number: randomString(), - cell_phone_number: randomString(), - birthdate: null, - created_at: new Date(), - updated_at: new Date(), - civility: ECivility.MALE, - }, - { - uid: uidContact2, - address_uid: uidAddress2, - first_name: "Jane", - last_name: "Doe", - email: "jane.doe@example.com", - phone_number: randomString(), - cell_phone_number: randomString(), + address: addresses[0], + first_name: "Manon", + last_name: "Simon", + email: "manon.simon@gmail.com", + phone_number: "06 12 34 56 78", + cell_phone_number: "06 12 34 56 78", birthdate: null, created_at: new Date(), updated_at: new Date(), civility: ECivility.FEMALE, }, { - uid: uidContact3, - address_uid: uidAddress3, - first_name: "Maitre Marcelino", - last_name: "Jack", - email: "Marcelino.Jack@example.com", - phone_number: randomString(), - cell_phone_number: randomString(), + address: addresses[1], + first_name: "Kevin", + last_name: "Hautefaye", + email: "kevin.hautefaye@gmail.com", + phone_number: "06 23 45 67 89", + cell_phone_number: "06 23 45 67 89", birthdate: null, created_at: new Date(), updated_at: new Date(), civility: ECivility.MALE, }, { - uid: uidContact4, - address_uid: uidAddress4, - first_name: "Maitre Massi", - last_name: "Jack", - email: "Massi.Jack@example.com", - phone_number: randomString(), - cell_phone_number: randomString(), + address: addresses[2], + first_name: "Maxime", + last_name: "Lalo", + email: "maxime.lalo@gmail.com", + phone_number: "06 34 56 78 90", + cell_phone_number: "06 34 56 78 90", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.MALE, + }, + { + address: addresses[3], + first_name: "Vincent", + last_name: "Brognard", + email: "vincent.brognard@gmail.com", + phone_number: "06 45 67 89 01", + cell_phone_number: "06 45 67 89 01", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.MALE, + }, + { + address: addresses[4], + first_name: "Maxime", + last_name: "Leroy", + email: "maxime.leroy@hotmail.fr", + phone_number: "06 56 78 90 12", + cell_phone_number: "06 56 78 90 12", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.MALE, + }, + { + address: addresses[5], + first_name: "Thibault", + last_name: "Dubois", + email: "thibault.dubois@outlook.com", + phone_number: "06 67 89 01 23", + cell_phone_number: "06 67 89 01 23", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.MALE, + }, + { + address: addresses[6], + first_name: "Léa", + last_name: "Fontaine", + email: "lea.fontaine@gmail.com", + phone_number: "06 78 90 12 34", + cell_phone_number: "06 78 90 12 34", birthdate: null, created_at: new Date(), updated_at: new Date(), civility: ECivility.FEMALE, }, + { + address: addresses[7], + first_name: "Guillaume", + last_name: "Renaud", + email: "guillaume.renaud@gmail.com", + phone_number: "06 89 01 23 45", + cell_phone_number: "06 89 01 23 45", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.MALE, + }, + { + address: addresses[8], + first_name: "Lucie", + last_name: "Chevalier", + email: "lucie.chevalier@outlook.com", + phone_number: "07 12 34 56 78", + cell_phone_number: "07 12 34 56 78", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.FEMALE, + }, + { + address: addresses[9], + first_name: "Sébastien", + last_name: "Dubois", + email: "sebastien.dubois@gmail.com", + phone_number: "07 23 45 67 89", + cell_phone_number: "07 23 45 67 89", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.MALE, + }, + { + address: addresses[10], + first_name: "Mathilde", + last_name: "Durand", + email: "mathilde.durand@gmail.com", + phone_number: "07 34 56 78 90", + cell_phone_number: "07 34 56 78 90", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.FEMALE, + }, + { + address: addresses[11], + first_name: "Antoine", + last_name: "Bernard", + email: "antoine.bernard@outlook.com", + phone_number: "07 45 67 89 01", + cell_phone_number: "07 45 67 89 01", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.MALE, + }, + { + address: addresses[12], + first_name: "Camille", + last_name: "Laurent", + email: "camille.laurent@gmail.com", + phone_number: "07 56 78 90 12", + cell_phone_number: "07 56 78 90 12", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.FEMALE, + }, + { + address: addresses[13], + first_name: "Julien", + last_name: "Mercier", + email: "julien.mercier@hotmail.fr", + phone_number: "07 67 89 01 23", + cell_phone_number: "07 67 89 01 23", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.MALE, + }, + { + address: addresses[14], + first_name: "Charlotte", + last_name: "Lefebvre", + email: "charlotte.lefebvre@gmail.com", + phone_number: "07 78 90 12 34", + cell_phone_number: "07 78 90 12 34", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.FEMALE, + }, + { + address: addresses[15], + first_name: "Caroline", + last_name: "Pallut", + email: "caroline.pallut@gmail.com", + phone_number: "07 89 01 23 45", + cell_phone_number: "07 89 01 23 45", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.FEMALE, + }, + { + address: addresses[16], + first_name: "Nadège", + last_name: "Gauchet", + email: "nedege.gauchet@outlook.com", + phone_number: "06 11 22 33 44", + cell_phone_number: "06 11 22 33 44", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.FEMALE, + }, + { + address: addresses[17], + first_name: "Matthieu", + last_name: "Bougeard", + email: "matthieu.bougeard@gmail.com", + phone_number: "07 22 33 44 55", + cell_phone_number: "07 22 33 44 55", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.MALE, + }, + { + address: addresses[18], + first_name: "Cécile", + last_name: "Celton", + email: "cecile.celton@outlook.com", + phone_number: "06 55 66 77 88", + cell_phone_number: "06 55 66 77 88", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.FEMALE, + }, + { + address: addresses[19], + first_name: "Gwendal", + last_name: "Texier", + email: "gwendal.texier@gmail.com", + phone_number: "07 88 99 00 11", + cell_phone_number: "07 88 99 00 11", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.MALE, + }, ]; - const offices: Offices[] = [ + const offices: Office[] = [ { - uid: uidOffice1, - idNot: randomString(), - name: "LA Office", + idNot: idNot1, + name: "Office Rennes", crpcen: randomString(), - address_uid: uidAddress1, + address: addresses[0], created_at: new Date(), updated_at: new Date(), office_status: EOfficeStatus.ACTIVATED, }, + ]; + + const customers: Customer[] = [ { - uid: uidOffice2, - idNot: randomString(), - name: "NYC Office", - crpcen: randomString(), - address_uid: uidAddress2, + contact: contacts[5], created_at: new Date(), updated_at: new Date(), - office_status: EOfficeStatus.DESACTIVATED, + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[6], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[7], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[8], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[9], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[10], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[11], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[12], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[13], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[14], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[15], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[16], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[17], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[18], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[19], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, }, ]; - const roles: Roles[] = [ + const rules: Rule[] = [ { - uid: uidRole1, - name: 'super-admin', + name: "GET users", created_at: new Date(), updated_at: new Date(), }, { - uid: uidRole2, - name: 'admin', + name: "GET offices", created_at: new Date(), updated_at: new Date(), + }, + { + name: "GET customers", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "GET deeds", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "GET deedtypes", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "GET documents", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "GET documentTypes", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "GET files", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "GET folders", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "GET roles", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "GET rules", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "GET office-roles", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "PUT users", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "PUT offices", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "PUT customers", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "PUT deeds", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "PUT deedtypes", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "PUT documents", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "PUT documentTypes", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "PUT files", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "PUT folders", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "PUT roles", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "PUT rules", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "PUT office-roles", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST users", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST offices", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST customers", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST deeds", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST deedtypes", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST documents", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST documentTypes", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST files", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST folders", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST roles", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST rules", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST office-roles", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST users", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST offices", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST customers", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST deeds", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST deedtypes", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST documents", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST documentTypes", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST files", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST folders", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST roles", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST rules", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "POST office-roles", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "DELETE users", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "DELETE offices", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "DELETE customers", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "DELETE deeds", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "DELETE deedtypes", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "DELETE documents", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "DELETE documentTypes", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "DELETE files", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "DELETE folders", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "DELETE roles", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "DELETE rules", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "DELETE office-roles", + created_at: new Date(), + updated_at: new Date(), + }, + + ]; + + const roles: Role[] = [ + { + name: "super-admin", + created_at: new Date(), + updated_at: new Date(), + rules: rules, + }, + { + name: "admin", + created_at: new Date(), + updated_at: new Date(), + rules: rules.slice(0,33), + }, + { + name: "notary", + created_at: new Date(), + updated_at: new Date(), + rules: rules.slice(0,22), + }, + { + name: "default", + created_at: new Date(), + updated_at: new Date(), + rules: rules.slice(0,11), } ]; - const users: Users[] = [ + const officeRoles: OfficeRole[] = [ { - uid: uidUser1, + name: "admin", created_at: new Date(), updated_at: new Date(), - idNot: randomString(), - contact_uid: uidContact1, - office_uid: uidOffice1, - roles_uid: uidRole1, + office: offices[0]!, + rules: rules.slice(0,40), }, { - uid: uidUser2, + name: "notary", created_at: new Date(), updated_at: new Date(), - idNot: randomString(), - contact_uid: uidContact2, - office_uid: uidOffice2, - roles_uid: uidRole2, + office: offices[0]!, + rules: rules.slice(0,33), + }, + { + name: "deputy", + created_at: new Date(), + updated_at: new Date(), + office: offices[0]!, + rules: rules.slice(0,22), + }, + { + name: "listener", + created_at: new Date(), + updated_at: new Date(), + office: offices[0]!, + rules: rules.slice(0,11), + } + ]; + + const users: User[] = [ + { + created_at: new Date(), + updated_at: new Date(), + idNot: idNot2, + contact: contacts[0], + office_membership: offices[0], + role: roles[0], + }, + { + created_at: new Date(), + updated_at: new Date(), + idNot: idNot3, + contact: contacts[1], + office_membership: offices[0], + role: roles[1], + }, + { + created_at: new Date(), + updated_at: new Date(), + idNot: idNot4, + contact: contacts[2], + office_membership: offices[0], + role: roles[2], + office_role: officeRoles[2], + }, + { + created_at: new Date(), + updated_at: new Date(), + idNot: idNot5, + contact: contacts[3], + office_membership: offices[0], + role: roles[1], + office_role: officeRoles[3], + }, + { + created_at: new Date(), + updated_at: new Date(), + idNot: idNot6, + contact: contacts[4], + office_membership: offices[0], + role: roles[3], }, ]; - const officeFolders: OfficeFolders[] = [ + const deedTypes: DeedType[] = [ + { + name: "Acte de donation", + archived_at: null, + description: "Acte de donation", + office: offices[0], + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "Acte de vente", + archived_at: null, + description: "Acte de vente", + office: offices[0], + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "Acte de succession", + archived_at: null, + description: "Acte de succession", + office: offices[0], + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "Acte de vente de maison individuelle", + archived_at: null, + description: "Acte de vente de maison individuelle", + office: offices[0], + created_at: new Date(), + updated_at: new Date(), + }, + ]; + + const deeds: Deed[] = [ + { + deed_type: deedTypes[0], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[0], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[0], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[0], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[0], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[0], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[0], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[1], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[1], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[1], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[1], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[1], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[1], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[1], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[2], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[2], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[2], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[2], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[2], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[2], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[2], + created_at: new Date(), + updated_at: new Date(), + }, + ]; + + const documentTypes: DocumentType[] = [ + { + archived_at: null, + name: "Document d'identité", + office: offices[0], + private_description: + "Document officiel d'identification utilisé par plusieurs personnes pour prouver leur identité et leur nationalité (CNI, passeport)", + public_description: + "Document officiel d'identification utilisé par plusieurs personnes pour prouver leur identité et leur nationalité (CNI, passeport)", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Taxe Foncière", + office: offices[0], + private_description: "Impôt annuel imposé sur les propriétés foncières et utilisé pour financer les services publics locaux.", + public_description: "Impôt annuel imposé sur les propriétés foncières et utilisé pour financer les services publics locaux.", + created_at: new Date(), + updated_at: new Date(), + }, + + { + archived_at: null, + name: "Contrat Mariage", + office: offices[0], + private_description: "Accord légal qui établit les droits et les obligations entre deux personnes s'unissant en mariage.", + public_description: "Accord légal qui établit les droits et les obligations entre deux personnes s'unissant en mariage.", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Livret de famille", + office: offices[0], + private_description: + "Document officiel qui enregistre les détails et les événements familiaux tels que les mariages, les naissances et les décès d'un couple et de leurs enfants.", + public_description: + "Document officiel qui enregistre les détails et les événements familiaux tels que les mariages, les naissances et les décès d'un couple et de leurs enfants.", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Bail commercial", + office: offices[0], + private_description: + "Contrat légal entre un propriétaire et un locataire pour la location d'un bien immobilier utilisé à des fins commerciales ou professionnelles.", + public_description: + "Contrat légal entre un propriétaire et un locataire pour la location d'un bien immobilier utilisé à des fins commerciales ou professionnelles.", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Statuts SCI", + office: offices[0], + private_description: "Document légal qui définit les règles et les dispositions régissant la Société Civile Immobilière (SCI).", + public_description: "Document légal qui définit les règles et les dispositions régissant la Société Civile Immobilière (SCI).", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Avis de taxe foncière", + office: offices[0], + private_description: "Notification officielle indiquant le montant de l'impôt foncier dû sur une propriété.", + public_description: "Notification officielle indiquant le montant de l'impôt foncier dû sur une propriété.", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Appel de charge de copropriété", + office: offices[0], + private_description: + "Document envoyé aux copropriétaires pour les informer des dépenses et des charges communes liées à la gestion et à l'entretien de l'immeuble.", + public_description: + "Document envoyé aux copropriétaires pour les informer des dépenses et des charges communes liées à la gestion et à l'entretien de l'immeuble.", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "PVAG", + office: offices[0], + private_description: + "Compte rendu écrit des discussions, décisions et résolutions prises lors d'une réunion d'assemblée générale de copropriété.", + public_description: + "Compte rendu écrit des discussions, décisions et résolutions prises lors d'une réunion d'assemblée générale de copropriété.", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Règlement de copropriété", + office: offices[0], + private_description: + "Document juridique qui établit les règles et les droits des copropriétaires d'un immeuble en copropriété.", + public_description: "Document juridique qui établit les règles et les droits des copropriétaires d'un immeuble en copropriété.", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Titre de propriété", + office: offices[0], + private_description: "Document légal qui atteste de la propriété d'un bien immobilier et en identifie le propriétaire.", + public_description: "Document légal qui atteste de la propriété d'un bien immobilier et en identifie le propriétaire.", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Plan et loi carrez", + office: offices[0], + private_description: + "Document officiel qui mesure la superficie d'un lot ou d'un bien immobilier, conformément à la loi Carrez qui encadre les transactions immobilières.", + public_description: + "Document officiel qui mesure la superficie d'un lot ou d'un bien immobilier, conformément à la loi Carrez qui encadre les transactions immobilières.", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "CNI", + office: offices[0], + private_description: + "Document officiel d'identification délivré par l'État pour prouver l'identité et la nationalité d'une personne.", + public_description: + "Document officiel d'identification délivré par l'État pour prouver l'identité et la nationalité d'une personne.", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Modifications règlement copropriété (plusieurs)", + office: offices[0], + private_description: + "Documents légaux qui apportent des changements ou des ajustements aux règles et dispositions du règlement de copropriété initial.", + public_description: + "Documents légaux qui apportent des changements ou des ajustements aux règles et dispositions du règlement de copropriété initial.", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Avis de décès", + office: offices[0], + private_description: "Notification officielle délivrée par les autorités compétentes pour informer du décès d'une personne.", + public_description: "Notification officielle délivrée par les autorités compétentes pour informer du décès d'une personne.", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Lettre de mission", + office: offices[0], + private_description: + "Document contractuel qui définit les termes et les objectifs d'une mission confiée à une personne ou à une entreprise.", + public_description: + "Document contractuel qui définit les termes et les objectifs d'une mission confiée à une personne ou à une entreprise.", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "DPE", + office: offices[0], + private_description: "Diagnostic de Performance Energétique.", + public_description: "Diagnostic de Performance Energétique.", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "RIB", + office: offices[0], + private_description: "Relevé d'identité bancaire ou IBAN.", + public_description: "Relevé d'identité bancaire ou IBAN.", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Acte d'achat par la SCI", + office: offices[0], + private_description: "Acte d'achat par la SCI.", + public_description: "Acte d'achat par la SCI.", + created_at: new Date(), + updated_at: new Date(), + }, + ]; + + const officeFolders: OfficeFolder[] = [ { - uid: uidOfficeFolder1, folder_number: "0001", - name: "Dossier", - deed_uid: uidDeed1, + name: "Vente par Mme. Simon au profit de Mme. Lextrait", + deed: deeds[0], status: EFolderStatus.LIVE, created_at: new Date(), updated_at: new Date(), - office_uid: uidOffice1, + office: offices[0], description: null, archived_description: null, }, { - uid: uidOfficeFolder2, folder_number: "0002", - name: "Dossier", - deed_uid: uidDeed2, + name: "Donation des parts sociales de la société SARL FLORE", + deed: deeds[1], status: EFolderStatus.LIVE, created_at: new Date(), updated_at: new Date(), - office_uid: uidOffice2, + office: offices[0], description: null, archived_description: null, }, { - uid: uidOfficeFolder3, folder_number: "0003", - name: "Dossier", - deed_uid: uidDeed3, + name: "Vente par Mme. Lefebvre au profit de Mme. Mathieu", + deed: deeds[2], status: EFolderStatus.LIVE, created_at: new Date(), updated_at: new Date(), - office_uid: uidOffice2, + office: offices[0], description: null, archived_description: null, }, { - uid: uidOfficeFolder4, folder_number: "0004", - name: "Dossier", - deed_uid: uidDeed4, - status: EFolderStatus.ARCHIVED, + name: "Vente par Mme. Chevalier au profit de M. Daveau", + deed: deeds[3], + status: EFolderStatus.LIVE, created_at: new Date(), updated_at: new Date(), - office_uid: uidOffice2, + office: offices[0], description: null, archived_description: null, }, { - uid: uidOfficeFolder5, folder_number: "0005", - name: "Dossier", - deed_uid: uidDeed5, - status: EFolderStatus.ARCHIVED, + name: "Vente par M. Lalo au profit de Mme. Pigale", + deed: deeds[4], + status: EFolderStatus.LIVE, created_at: new Date(), updated_at: new Date(), - office_uid: uidOffice2, + office: offices[0], + description: null, + archived_description: null, + }, + { + folder_number: "0006", + name: "Donation des parts sociales de la société SMART-TALENT", + deed: deeds[5], + status: EFolderStatus.LIVE, + created_at: new Date(), + updated_at: new Date(), + office: offices[0], + description: null, + archived_description: null, + }, + { + folder_number: "0007", + name: "Vente par M. Girard au profit de M. Louis", + deed: deeds[6], + status: EFolderStatus.LIVE, + created_at: new Date(), + updated_at: new Date(), + office: offices[0], + description: null, + archived_description: null, + }, + { + folder_number: "0008", + name: "Vente par Mme. Leclerc au profit de M. Louis", + deed: deeds[7], + status: EFolderStatus.LIVE, + created_at: new Date(), + updated_at: new Date(), + office: offices[0], + description: null, + archived_description: null, + }, + { + folder_number: "0009", + name: "Vente par M. Lambert au profit de M. Holmes", + deed: deeds[8], + status: EFolderStatus.LIVE, + created_at: new Date(), + updated_at: new Date(), + office: offices[0], description: null, archived_description: null, }, ]; - const deeds: Deeds[] = [ - { - uid: uidDeed1, - deed_type_uid: uidDeedType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed2, - deed_type_uid: uidDeedType2, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed3, - deed_type_uid: uidDeedType2, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed4, - deed_type_uid: uidDeedType2, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed5, - deed_type_uid: uidDeedType2, - created_at: new Date(), - updated_at: new Date(), - }, - ]; - - const deedTypes: DeedTypes[] = [ - { - uid: uidDeedType1, - name: "Acte de mariage", - archived_at: null, - description: "Acte regroupant deux personnes en mariage", - office_uid: uidOffice1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedType2, - name: "Vente d'un bien immobilier", - archived_at: null, - description: "Permet de vendre un bien immobilier à une entité ou une personne physique", - office_uid: uidOffice2, - created_at: new Date(), - updated_at: new Date(), - }, - ]; - - const documents: Documents[] = [ - { - uid: uidDocument1, - blockchain_anchor_uid: null, - depositor_uid: uidCustomer1, - document_status: EDocumentStatus.DEPOSITED, - folder_uid: uidOfficeFolder1, - document_type_uid: uidDocumentType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocument2, - blockchain_anchor_uid: null, - depositor_uid: uidCustomer2, - document_status: EDocumentStatus.ASKED, - folder_uid: uidOfficeFolder2, - document_type_uid: uidDocumentType2, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocument3, - blockchain_anchor_uid: null, - depositor_uid: uidCustomer1, - document_status: EDocumentStatus.ASKED, - folder_uid: uidOfficeFolder1, - document_type_uid: uidDocumentType3, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocument4, - blockchain_anchor_uid: null, - depositor_uid: uidCustomer1, - document_status: EDocumentStatus.ASKED, - folder_uid: uidOfficeFolder1, - document_type_uid: uidDocumentType2, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocument5, - blockchain_anchor_uid: null, - depositor_uid: uidCustomer1, - document_status: EDocumentStatus.ASKED, - folder_uid: uidOfficeFolder1, - document_type_uid: uidDocumentType1, - created_at: new Date(), - updated_at: new Date(), - }, - ]; - - const documentTypes: DocumentTypes[] = [ - { - uid: uidDocumentType1, - archived_at: null, - name: "Acte de naissance", - office_uid: uidOffice1, - private_description: "Ce document est confidentiel, et ne doit pas être divulgué", - public_description: "Acte de naissance est un document officiel qui atteste de la naissance d'une personne", - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocumentType2, - archived_at: null, - name: "Carte d'identité", - office_uid: uidOffice1, - private_description: "Ce document est confidentiel, demander un recto-verso au client", - public_description: "Carte d'identité est un document officiel qui atteste de l'identité d'une personne", - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocumentType3, - archived_at: null, - name: "Autres documents", - office_uid: uidOffice1, - private_description: "Ce document est confidentiel, demander un recto-verso au client", - public_description: "Carte d'identité est un document officiel qui atteste de l'identité d'une personne", - created_at: new Date(), - updated_at: new Date(), - }, - ]; - - const officeFolderHasCustomers: OfficeFolderHasCustomers[] = [ - { - uid: uidOfficeFolderHasCustomer1, - customer_uid: uidCustomer1, - office_folder_uid: uidOfficeFolder1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidOfficeFolderHasCustomer2, - customer_uid: uidCustomer2, - office_folder_uid: uidOfficeFolder2, - created_at: new Date(), - updated_at: new Date(), - }, - ]; - - const deedHasDocumentTypes: DeedHasDocumentTypes[] = [ - { - uid: uidDeedHasDocumentType1, - deed_uid: uidDeed1, - document_type_uid: uidDocumentType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType2, - deed_uid: uidDeed2, - document_type_uid: uidDocumentType2, - created_at: new Date(), - updated_at: new Date(), - }, - ]; - - const deedTypeHasDocumentTypes: DeedTypeHasDocumentTypes[] = [ - { - uid: uidDeedTypeHasDocumentType1, - deed_type_uid: uidDeedType1, - document_type_uid: uidDocumentType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedTypeHasDocumentType2, - deed_type_uid: uidDeedType2, - document_type_uid: uidDocumentType2, - created_at: new Date(), - updated_at: new Date(), - }, - ]; - - const documentHistories: DocumentHistory[] = [ - { - uid: uidDocumentHistory1, - document_status: EDocumentStatus.ASKED, - document_uid: uidDocument1, - refused_reason: "", - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocumentHistory2, - document_status: EDocumentStatus.DEPOSITED, - document_uid: uidDocument1, - refused_reason: "Le document n'est pas conforme", - created_at: new Date(), - updated_at: new Date(), - }, - ]; - - for (const address of addresses) { - await prisma.addresses.create({ data: address }); - } - - for (const contact of contacts) { - await prisma.contacts.create({ data: contact }); - } - for (const office of offices) { - await prisma.offices.create({ data: office }); + const officeCreated = await prisma.offices.create({ + data: { + idNot: office.idNot, + name: office.name, + crpcen: office.crpcen, + address: { + create: { + address: office.address!.address, + zip_code: office.address!.zip_code, + city: office.address!.city, + }, + }, + office_status: EOfficeStatus.DESACTIVATED, + }, + }); +; office.uid = officeCreated.uid; + } + for (const rule of rules) { + const ruleCreated = await prisma.rules.create({ + data: { + name: rule.name + }, + }); + rule.uid = ruleCreated.uid; } for (const role of roles) { - await prisma.roles.create({ data: role }); + const roleCreated = await prisma.roles.create({ + data: { + name: role.name, + rules: { + connect: role.rules?.map((rule) => ({ + uid: rule.uid!, + })), + }, + }, + }); + role.uid = roleCreated.uid; + } + + for (const officeRole of officeRoles) { + const officeRoleCreated = await prisma.officeRoles.create({ + data: { + name: officeRole.name, + office: { + connect: { + uid: officeRole.office.uid, + }, + }, + rules: { + connect: officeRole.rules?.map((rule) => ({ + uid: rule.uid!, + })), + }, + }, + }); + officeRole.uid = officeRoleCreated.uid; } for (const user of users) { - await prisma.users.create({ data: user }); + const createArgs: Prisma.UsersCreateArgs = { + data: { + idNot: user.idNot, + office_membership: { + connectOrCreate: { + where: { + idNot: user.office_membership!.idNot, + }, + create: { + idNot: user.office_membership!.idNot, + name: user.office_membership!.name, + crpcen: user.office_membership!.crpcen, + address: { + create: { + address: user.office_membership!.address!.address, + zip_code: user.office_membership!.address!.zip_code, + city: user.office_membership!.address!.city, + }, + }, + }, + }, + }, + contact: { + create: { + first_name: user.contact!.first_name, + last_name: user.contact!.last_name, + email: user.contact!.email, + phone_number: user.contact!.phone_number, + cell_phone_number: user.contact!.cell_phone_number, + civility: ECivility[user.contact!.civility as keyof typeof ECivility], + address: {}, + }, + }, + role: { + connect: { + uid: user.role!.uid, + }, + }, + }, + }; + if (user.contact!.address) { + createArgs.data.contact!.create!.address!.create = { + address: user.contact!.address.address, + zip_code: user.contact!.address.zip_code, + city: user.contact!.address.city, + }; + } + if (user.office_role) { + createArgs.data.office_role = { + connect: { + uid: user.office_role.uid, + }, + }; + } + const userCreated = await prisma.users.create(createArgs); + user.uid = userCreated.uid; } for (const customer of customers) { - await prisma.customers.create({ data: customer }); + const createArgs: Prisma.CustomersCreateArgs = { + data: { + status: ECustomerStatus.PENDING, + contact: { + create: { + first_name: customer.contact!.first_name, + last_name: customer.contact!.last_name, + email: customer.contact!.email, + phone_number: customer.contact!.phone_number, + cell_phone_number: customer.contact!.cell_phone_number, + civility: ECivility[customer.contact!.civility as keyof typeof ECivility], + address: {}, + }, + }, + }, + }; + + if (customer.contact?.address) { + createArgs.data.contact!.create!.address = { + create: { + address: customer.contact?.address?.address, + zip_code: customer.contact?.address?.zip_code, + city: customer.contact?.address?.city, + }, + }; + } + const customersCreated = await prisma.customers.create(createArgs); + customer.uid = customersCreated.uid; } for (const deedType of deedTypes) { - await prisma.deedTypes.create({ data: deedType }); + const createArgs: Prisma.DeedTypesCreateArgs = { + data: { + name: deedType.name, + description: deedType.description, + office: { + connect: { + uid: deedType.office!.uid, + }, + }, + }, + }; + if (deedType.document_types) { + createArgs.data.document_types = { + connect: deedType.document_types.map((documentType) => ({ + uid: documentType.uid, + })), + }; + } + const deedTypeCreated = await prisma.deedTypes.create(createArgs); + deedType.uid = deedTypeCreated.uid; } for (const deed of deeds) { - await prisma.deeds.create({ data: deed }); - } - for (const officeFolder of officeFolders) { - await prisma.officeFolders.create({ data: officeFolder }); + const createArgs: Prisma.DeedsCreateArgs = { + data: { + deed_type: { + connect: { + uid: deed.deed_type!.uid, + }, + }, + }, + }; + const deedTypeWithDocumentTypes = await prisma.deedTypes.findUniqueOrThrow({ + where: { + uid: deed.deed_type!.uid, + }, + include: { document_types: true }, + }); + + if (deedTypeWithDocumentTypes.document_types) { + createArgs.data.document_types = { + connect: deedTypeWithDocumentTypes.document_types.map((documentType) => ({ + uid: documentType.uid, + })), + }; + } + const deedCreated = await prisma.deeds.create(createArgs); + deed.uid = deedCreated.uid; } for (const documentType of documentTypes) { - await prisma.documentTypes.create({ data: documentType }); + const documentTypeCreated = await prisma.documentTypes.create({ + data: { + name: documentType.name, + public_description: documentType.public_description, + private_description: documentType.private_description, + office: { + connect: { + uid: documentType.office!.uid, + }, + }, + }, + }); + documentType.uid = documentTypeCreated.uid; } - for (const document of documents) { - await prisma.documents.create({ data: document }); - } - - for (const documentHistory of documentHistories) { - await prisma.documentHistory.create({ data: documentHistory }); - } - - for (const officeFolderHasCustomer of officeFolderHasCustomers) { - await prisma.officeFolderHasCustomers.create({ data: officeFolderHasCustomer }); - } - - for (const deedHasDocumentType of deedHasDocumentTypes) { - await prisma.deedHasDocumentTypes.create({ data: deedHasDocumentType }); - } - - for (const deedTypeHasDocumentType of deedTypeHasDocumentTypes) { - await prisma.deedTypeHasDocumentTypes.create({ data: deedTypeHasDocumentType }); + for (const officeFolder of officeFolders) { + const officeFolderCreated = await prisma.officeFolders.create({ + data: { + folder_number: officeFolder.folder_number, + name: officeFolder.name, + description: officeFolder.description, + status: EFolderStatus.LIVE, + deed: { + connect: { + uid: officeFolder.deed?.uid, + }, + }, + office: { + connect: { + uid: officeFolder.office!.uid, + }, + }, + stakeholders: { + connect: officeFolder.stakeholders?.map((stakeholder) => ({ + uid: stakeholder.uid!, + })), + } + } + }); + officeFolder.uid = officeFolderCreated.uid; } console.log(">MOCK DATA - Seeding completed!"); -})(); +} +main(); diff --git a/src/common/databases/seeders/seeder2.ts b/src/common/databases/seeders/seeder2.ts deleted file mode 100644 index ce81192e..00000000 --- a/src/common/databases/seeders/seeder2.ts +++ /dev/null @@ -1,1986 +0,0 @@ -import { - Addresses, - Contacts, - Customers, - DeedHasDocumentTypes, - DeedTypeHasDocumentTypes, - DeedTypes, - Deeds, - DocumentTypes, - Documents, - EFolderStatus, - EOfficeStatus, - OfficeFolderHasCustomers, - OfficeFolders, - Offices, - Users, - ECivility, - ECustomerStatus, - PrismaClient, - Roles, - OfficesRolesHasRules, - RolesHasRules, - Rules, -} from "@prisma/client"; - -(async () => { - const prisma = new PrismaClient(); - - const existingData = await prisma.contacts.findFirst({ where: { email: "john.doe@example.com" } }); - if (existingData) { - console.log("Seed data already exists. Skipping seeding process."); - return; - } - - const randomString = () => { - const chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; - let result = ""; - for (let i = 10; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)]; - return result; - }; - const uidCustomer1: string = randomString(); - const uidCustomer2: string = randomString(); - const uidCustomer3: string = randomString(); - const uidCustomer4: string = randomString(); - const uidCustomer5: string = randomString(); - const uidCustomer6: string = randomString(); - const uidCustomer7: string = randomString(); - const uidCustomer8: string = randomString(); - const uidCustomer9: string = randomString(); - const uidCustomer10: string = randomString(); - const uidCustomer11: string = randomString(); - const uidCustomer12: string = randomString(); - const uidCustomer13: string = randomString(); - const uidCustomer14: string = randomString(); - const uidCustomer15: string = randomString(); - - const uidContact1: string = randomString(); - const uidContact2: string = randomString(); - const uidContact3: string = randomString(); - const uidContact4: string = randomString(); - const uidContact5: string = randomString(); - const uidContact6: string = randomString(); - const uidContact7: string = randomString(); - const uidContact8: string = randomString(); - const uidContact9: string = randomString(); - const uidContact10: string = randomString(); - const uidContact11: string = randomString(); - const uidContact12: string = randomString(); - const uidContact13: string = randomString(); - const uidContact14: string = randomString(); - const uidContact15: string = randomString(); - const uidContact16: string = randomString(); - const uidContact17: string = randomString(); - const uidContact18: string = randomString(); - const uidContact19: string = randomString(); - const uidContact20: string = randomString(); - - const uidAddress1: string = randomString(); - const uidAddress2: string = randomString(); - const uidAddress3: string = randomString(); - const uidAddress4: string = randomString(); - const uidAddress5: string = randomString(); - const uidAddress6: string = randomString(); - const uidAddress7: string = randomString(); - const uidAddress8: string = randomString(); - const uidAddress9: string = randomString(); - const uidAddress10: string = randomString(); - const uidAddress11: string = randomString(); - const uidAddress12: string = randomString(); - const uidAddress13: string = randomString(); - const uidAddress14: string = randomString(); - const uidAddress15: string = randomString(); - const uidAddress16: string = randomString(); - const uidAddress17: string = randomString(); - const uidAddress18: string = randomString(); - const uidAddress19: string = randomString(); - const uidAddress20: string = randomString(); - - const uidOffice1: string = randomString(); - - const uidUser1: string = randomString(); - const uidUser2: string = randomString(); - const uidUser3: string = randomString(); - const uidUser4: string = randomString(); - const uidUser5: string = randomString(); - - const uidRole1: string = randomString(); - const uidRole2: string = randomString(); - - const uidRule1: string = randomString(); - const uidRule2: string = randomString(); - - const uidOfficeFolder1: string = randomString(); - const uidOfficeFolder2: string = randomString(); - const uidOfficeFolder3: string = randomString(); - const uidOfficeFolder4: string = randomString(); - const uidOfficeFolder5: string = randomString(); - const uidOfficeFolder6: string = randomString(); - const uidOfficeFolder7: string = randomString(); - const uidOfficeFolder8: string = randomString(); - const uidOfficeFolder9: string = randomString(); - - const uidDeed1: string = randomString(); - const uidDeed2: string = randomString(); - const uidDeed3: string = randomString(); - const uidDeed4: string = randomString(); - const uidDeed5: string = randomString(); - const uidDeed6: string = randomString(); - const uidDeed7: string = randomString(); - const uidDeed8: string = randomString(); - const uidDeed9: string = randomString(); - const uidDeed10: string = randomString(); - const uidDeed11: string = randomString(); - const uidDeed12: string = randomString(); - const uidDeed13: string = randomString(); - const uidDeed14: string = randomString(); - const uidDeed15: string = randomString(); - const uidDeed16: string = randomString(); - const uidDeed17: string = randomString(); - const uidDeed18: string = randomString(); - const uidDeed19: string = randomString(); - const uidDeed20: string = randomString(); - const uidDeed21: string = randomString(); - - - const uidDeedType1: string = randomString(); - const uidDeedType2: string = randomString(); - const uidDeedType3: string = randomString(); - const uidDeedType4: string = randomString(); - - const uidDocumentType1: string = randomString(); - const uidDocumentType2: string = randomString(); - const uidDocumentType3: string = randomString(); - const uidDocumentType4: string = randomString(); - const uidDocumentType5: string = randomString(); - const uidDocumentType6: string = randomString(); - const uidDocumentType7: string = randomString(); - const uidDocumentType8: string = randomString(); - const uidDocumentType9: string = randomString(); - const uidDocumentType10: string = randomString(); - const uidDocumentType11: string = randomString(); - const uidDocumentType12: string = randomString(); - const uidDocumentType13: string = randomString(); - const uidDocumentType14: string = randomString(); - const uidDocumentType15: string = randomString(); - const uidDocumentType16: string = randomString(); - const uidDocumentType17: string = randomString(); - const uidDocumentType18: string = randomString(); - const uidDocumentType19: string = randomString(); - - - const uidOfficeFolderHasCustomer1: string = randomString(); - const uidOfficeFolderHasCustomer3: string = randomString(); - const uidOfficeFolderHasCustomer4: string = randomString(); - - const uidOfficeRoleHasRule1: string = randomString(); - const uidOfficeRoleHasRule2: string = randomString(); - - const uidRoleHasRule1: string = randomString(); - const uidRoleHasRule2: string = randomString(); - - const uidDeedHasDocumentType1: string = randomString(); - const uidDeedHasDocumentType2: string = randomString(); - const uidDeedHasDocumentType3: string = randomString(); - const uidDeedHasDocumentType4: string = randomString(); - const uidDeedHasDocumentType5: string = randomString(); - const uidDeedHasDocumentType6: string = randomString(); - const uidDeedHasDocumentType7: string = randomString(); - const uidDeedHasDocumentType8: string = randomString(); - const uidDeedHasDocumentType9: string = randomString(); - const uidDeedHasDocumentType10: string = randomString(); - const uidDeedHasDocumentType11: string = randomString(); - const uidDeedHasDocumentType12: string = randomString(); - const uidDeedHasDocumentType13: string = randomString(); - const uidDeedHasDocumentType14: string = randomString(); - const uidDeedHasDocumentType15: string = randomString(); - const uidDeedHasDocumentType16: string = randomString(); - const uidDeedHasDocumentType17: string = randomString(); - const uidDeedHasDocumentType18: string = randomString(); - const uidDeedHasDocumentType19: string = randomString(); - const uidDeedHasDocumentType20: string = randomString(); - const uidDeedHasDocumentType21: string = randomString(); - const uidDeedHasDocumentType22: string = randomString(); - const uidDeedHasDocumentType23: string = randomString(); - const uidDeedHasDocumentType24: string = randomString(); - const uidDeedHasDocumentType25: string = randomString(); - const uidDeedHasDocumentType26: string = randomString(); - const uidDeedHasDocumentType27: string = randomString(); - const uidDeedHasDocumentType28: string = randomString(); - const uidDeedHasDocumentType29: string = randomString(); - const uidDeedHasDocumentType30: string = randomString(); - const uidDeedHasDocumentType31: string = randomString(); - const uidDeedHasDocumentType32: string = randomString(); - const uidDeedHasDocumentType33: string = randomString(); - const uidDeedHasDocumentType34: string = randomString(); - const uidDeedHasDocumentType35: string = randomString(); - const uidDeedHasDocumentType36: string = randomString(); - const uidDeedHasDocumentType37: string = randomString(); - const uidDeedHasDocumentType38: string = randomString(); - const uidDeedHasDocumentType39: string = randomString(); - const uidDeedHasDocumentType40: string = randomString(); - const uidDeedHasDocumentType41: string = randomString(); - const uidDeedHasDocumentType42: string = randomString(); - const uidDeedHasDocumentType43: string = randomString(); - const uidDeedHasDocumentType44: string = randomString(); - const uidDeedHasDocumentType45: string = randomString(); - - - - const uidDeedTypeHasDocumentType1: string = randomString(); - const uidDeedTypeHasDocumentType2: string = randomString(); - const uidDeedTypeHasDocumentType3: string = randomString(); - const uidDeedTypeHasDocumentType4: string = randomString(); - const uidDeedTypeHasDocumentType5: string = randomString(); - const uidDeedTypeHasDocumentType6: string = randomString(); - const uidDeedTypeHasDocumentType7: string = randomString(); - const uidDeedTypeHasDocumentType8: string = randomString(); - const uidDeedTypeHasDocumentType9: string = randomString(); - const uidDeedTypeHasDocumentType10: string = randomString(); - const uidDeedTypeHasDocumentType11: string = randomString(); - const uidDeedTypeHasDocumentType12: string = randomString(); - const uidDeedTypeHasDocumentType13: string = randomString(); - const uidDeedTypeHasDocumentType14: string = randomString(); - const uidDeedTypeHasDocumentType15: string = randomString(); - const uidDeedTypeHasDocumentType16: string = randomString(); - const uidDeedTypeHasDocumentType17: string = randomString(); - const uidDeedTypeHasDocumentType18: string = randomString(); - const uidDeedTypeHasDocumentType19: string = randomString(); - const uidDeedTypeHasDocumentType20: string = randomString(); - const uidDeedTypeHasDocumentType21: string = randomString(); - const uidDeedTypeHasDocumentType22: string = randomString(); - - - - - const customers: Customers[] = [ - { - uid: uidCustomer1, - contact_uid: uidContact1, - created_at: new Date(), - updated_at: new Date(), - status: ECustomerStatus.PENDING, - }, - { - uid: uidCustomer2, - contact_uid: uidContact2, - created_at: new Date(), - updated_at: new Date(), - status: ECustomerStatus.PENDING, - }, - { - uid: uidCustomer3, - contact_uid: uidContact3, - created_at: new Date(), - updated_at: new Date(), - status: ECustomerStatus.PENDING, - }, - { - uid: uidCustomer4, - contact_uid: uidContact4, - created_at: new Date(), - updated_at: new Date(), - status: ECustomerStatus.PENDING, - }, - { - uid: uidCustomer5, - contact_uid: uidContact5, - created_at: new Date(), - updated_at: new Date(), - status: ECustomerStatus.PENDING, - }, - { - uid: uidCustomer6, - contact_uid: uidContact6, - created_at: new Date(), - updated_at: new Date(), - status: ECustomerStatus.PENDING, - }, - { - uid: uidCustomer7, - contact_uid: uidContact7, - created_at: new Date(), - updated_at: new Date(), - status: ECustomerStatus.PENDING, - }, - { - uid: uidCustomer8, - contact_uid: uidContact8, - created_at: new Date(), - updated_at: new Date(), - status: ECustomerStatus.PENDING, - }, - { - uid: uidCustomer9, - contact_uid: uidContact9, - created_at: new Date(), - updated_at: new Date(), - status: ECustomerStatus.PENDING, - }, - { - uid: uidCustomer10, - contact_uid: uidContact10, - created_at: new Date(), - updated_at: new Date(), - status: ECustomerStatus.PENDING, - }, - { - uid: uidCustomer11, - contact_uid: uidContact11, - created_at: new Date(), - updated_at: new Date(), - status: ECustomerStatus.PENDING, - }, - { - uid: uidCustomer12, - contact_uid: uidContact12, - created_at: new Date(), - updated_at: new Date(), - status: ECustomerStatus.PENDING, - }, - { - uid: uidCustomer13, - contact_uid: uidContact13, - created_at: new Date(), - updated_at: new Date(), - status: ECustomerStatus.PENDING, - }, - { - uid: uidCustomer14, - contact_uid: uidContact14, - created_at: new Date(), - updated_at: new Date(), - status: ECustomerStatus.PENDING, - }, - { - uid: uidCustomer15, - contact_uid: uidContact15, - created_at: new Date(), - updated_at: new Date(), - status: ECustomerStatus.PENDING, - }, - ]; - - const addresses: Addresses[] = [ - { - uid: uidAddress1, - address: "148 Avenue du bac", - city: "Rennes", - zip_code: 35000, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidAddress2, - address: "Rue Pierre Emillion", - city: "Pacé", - zip_code: 35740, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidAddress3, - address: "Rue Pierre Charles", - city: "Rennes", - zip_code: 35000, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidAddress4, - address: "Rue Pierre Pologne", - city: "Rennes", - zip_code: 35000, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidAddress5, - address: "Rue Pierre Marcel", - city: "Rennes", - zip_code: 35000, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidAddress6, - address: "Rue Pierre Jacques", - city: "Rennes", - zip_code: 35000, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidAddress7, - address: "Rue Pierre Pascal", - city: "Rennes", - zip_code: 35000, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidAddress8, - address: "Rue Maxime Henry", - city: "Rennes", - zip_code: 35000, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidAddress9, - address: "Rue Maxime Francis", - city: "Rennes", - zip_code: 35000, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidAddress10, - address: "Avenue Paul Roger", - city: "Rennes", - zip_code: 35000, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidAddress11, - address: "Avenue Paul Franck", - city: "Rennes", - zip_code: 35000, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidAddress12, - address: "Avenue Paul Maréchal", - city: "Rennes", - zip_code: 35000, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidAddress13, - address: "Avenue Marcel Denis", - city: "Rennes", - zip_code: 35000, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidAddress14, - address: "Place Alexandre", - city: "Rennes", - zip_code: 35000, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidAddress15, - address: "Place Alexandre Jacques", - city: "Rennes", - zip_code: 35000, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidAddress16, - address: "Place Alexandre 2", - city: "Rennes", - zip_code: 35000, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidAddress17, - address: "Rue du livre", - city: "Rennes", - zip_code: 35000, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidAddress18, - address: "Place de la joie", - city: "Rennes", - zip_code: 35000, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidAddress19, - address: "Rue Paul Henry", - city: "Rennes", - zip_code: 35000, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidAddress20, - address: "Rue Marcelin", - city: "Rennes", - zip_code: 35000, - created_at: new Date(), - updated_at: new Date(), - }, - - ]; - - const contacts: Contacts[] = [ - { - uid: uidContact1, - address_uid: uidAddress1, - first_name: "Manon", - last_name: "Simon", - email: "manon.simon@gmail.com", - phone_number: "06 12 34 56 78", - cell_phone_number: "06 12 34 56 78", - birthdate: null, - created_at: new Date(), - updated_at: new Date(), - civility: ECivility.FEMALE, - }, - { - uid: uidContact2, - address_uid: uidAddress2, - first_name: "Kevin", - last_name: "Hautefaye", - email: "kevin.hautefaye@gmail.com", - phone_number: "06 23 45 67 89", - cell_phone_number: "06 23 45 67 89", - birthdate: null, - created_at: new Date(), - updated_at: new Date(), - civility: ECivility.MALE, - }, - { - uid: uidContact3, - address_uid: uidAddress3, - first_name: "Maxime", - last_name: "Lalo", - email: "maxime.lalo@gmail.com", - phone_number: "06 34 56 78 90", - cell_phone_number: "06 34 56 78 90", - birthdate: null, - created_at: new Date(), - updated_at: new Date(), - civility: ECivility.MALE, - }, - { - uid: uidContact4, - address_uid: uidAddress4, - first_name: "Vincent", - last_name: "Brognard", - email: "vincent.brognard@gmail.com", - phone_number: "06 45 67 89 01", - cell_phone_number: "06 45 67 89 01", - birthdate: null, - created_at: new Date(), - updated_at: new Date(), - civility: ECivility.MALE, - }, - { - uid: uidContact5, - address_uid: uidAddress5, - first_name: "Maxime", - last_name: "Leroy", - email: "maxime.leroy@hotmail.fr", - phone_number: "06 56 78 90 12", - cell_phone_number: "06 56 78 90 12", - birthdate: null, - created_at: new Date(), - updated_at: new Date(), - civility: ECivility.MALE, - }, - { - uid: uidContact6, - address_uid: uidAddress6, - first_name: "Thibault", - last_name: "Dubois", - email: "thibault.dubois@outlook.com", - phone_number: "06 67 89 01 23", - cell_phone_number: "06 67 89 01 23", - birthdate: null, - created_at: new Date(), - updated_at: new Date(), - civility: ECivility.MALE, - }, - { - uid: uidContact7, - address_uid: uidAddress7, - first_name: "Léa", - last_name: "Fontaine", - email: "lea.fontaine@gmail.com", - phone_number: "06 78 90 12 34", - cell_phone_number: "06 78 90 12 34", - birthdate: null, - created_at: new Date(), - updated_at: new Date(), - civility: ECivility.FEMALE, - }, - { - uid: uidContact8, - address_uid: uidAddress8, - first_name: "Guillaume", - last_name: "Renaud", - email: "guillaume.renaud@gmail.com", - phone_number: "06 89 01 23 45", - cell_phone_number: "06 89 01 23 45", - birthdate: null, - created_at: new Date(), - updated_at: new Date(), - civility: ECivility.MALE, - }, - { - uid: uidContact9, - address_uid: uidAddress9, - first_name: "Lucie", - last_name: "Chevalier", - email: "lucie.chevalier@outlook.com", - phone_number: "07 12 34 56 78", - cell_phone_number: "07 12 34 56 78", - birthdate: null, - created_at: new Date(), - updated_at: new Date(), - civility: ECivility.FEMALE, - }, - { - uid: uidContact10, - address_uid: uidAddress10, - first_name: "Sébastien", - last_name: "Dubois", - email: "sebastien.dubois@gmail.com", - phone_number: "07 23 45 67 89", - cell_phone_number: "07 23 45 67 89", - birthdate: null, - created_at: new Date(), - updated_at: new Date(), - civility: ECivility.MALE, - }, - { - uid: uidContact11, - address_uid: uidAddress11, - first_name: "Mathilde", - last_name: "Durand", - email: "mathilde.durand@gmail.com", - phone_number: "07 34 56 78 90", - cell_phone_number: "07 34 56 78 90", - birthdate: null, - created_at: new Date(), - updated_at: new Date(), - civility: ECivility.FEMALE, - }, - { - uid: uidContact12, - address_uid: uidAddress12, - first_name: "Antoine", - last_name: "Bernard", - email: "antoine.bernard@outlook.com", - phone_number: "07 45 67 89 01", - cell_phone_number: "07 45 67 89 01", - birthdate: null, - created_at: new Date(), - updated_at: new Date(), - civility: ECivility.MALE, - }, - { - uid: uidContact13, - address_uid: uidAddress13, - first_name: "Camille", - last_name: "Laurent", - email: "camille.laurent@gmail.com", - phone_number: "07 56 78 90 12", - cell_phone_number: "07 56 78 90 12", - birthdate: null, - created_at: new Date(), - updated_at: new Date(), - civility: ECivility.FEMALE, - }, - { - uid: uidContact14, - address_uid: uidAddress14, - first_name: "Julien", - last_name: "Mercier", - email: "julien.mercier@hotmail.fr", - phone_number: "07 67 89 01 23", - cell_phone_number: "07 67 89 01 23", - birthdate: null, - created_at: new Date(), - updated_at: new Date(), - civility: ECivility.MALE, - }, - { - uid: uidContact15, - address_uid: uidAddress15, - first_name: "Charlotte", - last_name: "Lefebvre", - email: "charlotte.lefebvre@gmail.com", - phone_number: "07 78 90 12 34", - cell_phone_number: "07 78 90 12 34", - birthdate: null, - created_at: new Date(), - updated_at: new Date(), - civility: ECivility.FEMALE, - }, - { - uid: uidContact16, - address_uid: uidAddress16, - first_name: "Caroline", - last_name: "Pallut", - email: "caroline.pallut@gmail.com", - phone_number: "07 89 01 23 45", - cell_phone_number: "07 89 01 23 45", - birthdate: null, - created_at: new Date(), - updated_at: new Date(), - civility: ECivility.FEMALE, - }, - { - uid: uidContact17, - address_uid: uidAddress17, - first_name: "Nadège", - last_name: "Gauchet", - email: "nedege.gauchet@outlook.com", - phone_number: "06 11 22 33 44", - cell_phone_number: "06 11 22 33 44", - birthdate: null, - created_at: new Date(), - updated_at: new Date(), - civility: ECivility.FEMALE, - }, - { - uid: uidContact18, - address_uid: uidAddress18, - first_name: "Matthieu", - last_name: "Bougeard", - email: "matthieu.bougeard@gmail.com", - phone_number: "07 22 33 44 55", - cell_phone_number: "07 22 33 44 55", - birthdate: null, - created_at: new Date(), - updated_at: new Date(), - civility: ECivility.MALE, - }, - { - uid: uidContact19, - address_uid: uidAddress19, - first_name: "Cécile", - last_name: "Celton", - email: "cecile.celton@outlook.com", - phone_number: "06 55 66 77 88", - cell_phone_number: "06 55 66 77 88", - birthdate: null, - created_at: new Date(), - updated_at: new Date(), - civility: ECivility.FEMALE, - }, - { - uid: uidContact20, - address_uid: uidAddress20, - first_name: "Gwendal", - last_name: "Texier", - email: "gwendal.texier@gmail.com", - phone_number: "07 88 99 00 11", - cell_phone_number: "07 88 99 00 11", - birthdate: null, - created_at: new Date(), - updated_at: new Date(), - civility: ECivility.MALE, - }, - ]; - - const offices: Offices[] = [ - { - uid: uidOffice1, - idNot: randomString(), - name: "Office Rennes", - crpcen: randomString(), - address_uid: uidAddress1, - created_at: new Date(), - updated_at: new Date(), - office_status: EOfficeStatus.ACTIVATED, - } - ]; - - const roles: Roles[] = [ - { - uid: uidRole1, - name: 'super-admin', - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidRole2, - name: 'admin', - created_at: new Date(), - updated_at: new Date(), - } - ]; - - const users: Users[] = [ - { - uid: uidUser1, - created_at: new Date(), - updated_at: new Date(), - idNot: randomString(), - contact_uid: uidContact16, - office_uid: uidOffice1, - roles_uid: uidRole1, - }, - { - uid: uidUser2, - created_at: new Date(), - updated_at: new Date(), - idNot: randomString(), - contact_uid: uidContact17, - office_uid: uidOffice1, - roles_uid: uidRole2, - }, - { - uid: uidUser3, - created_at: new Date(), - updated_at: new Date(), - idNot: randomString(), - contact_uid: uidContact18, - office_uid: uidOffice1, - roles_uid: uidRole1, - }, - { - uid: uidUser4, - created_at: new Date(), - updated_at: new Date(), - idNot: randomString(), - contact_uid: uidContact19, - office_uid: uidOffice1, - roles_uid: uidRole2, - }, - { - uid: uidUser5, - created_at: new Date(), - updated_at: new Date(), - idNot: randomString(), - contact_uid: uidContact20, - office_uid: uidOffice1, - roles_uid: uidRole1, - }, - ]; - - const officeFolders: OfficeFolders[] = [ - { - uid: uidOfficeFolder1, - folder_number: "0001", - name: "Vente par Mme. Simon au profit de Mme. Lextrait", - deed_uid: uidDeed1, - status: EFolderStatus.LIVE, - created_at: new Date(), - updated_at: new Date(), - office_uid: uidOffice1, - description: null, - archived_description: null, - }, - { - uid: uidOfficeFolder2, - folder_number: "0002", - name: "Donation des parts sociales de la société SARL FLORE", - deed_uid: uidDeed2, - status: EFolderStatus.LIVE, - created_at: new Date(), - updated_at: new Date(), - office_uid: uidOffice1, - description: null, - archived_description: null, - }, - { - uid: uidOfficeFolder3, - folder_number: "0003", - name: "Vente par Mme. Lefebvre au profit de Mme. Mathieu", - deed_uid: uidDeed3, - status: EFolderStatus.LIVE, - created_at: new Date(), - updated_at: new Date(), - office_uid: uidOffice1, - description: null, - archived_description: null, - }, - { - uid: uidOfficeFolder4, - folder_number: "0004", - name: "Vente par Mme. Chevalier au profit de M. Daveau", - deed_uid: uidDeed4, - status: EFolderStatus.LIVE, - created_at: new Date(), - updated_at: new Date(), - office_uid: uidOffice1, - description: null, - archived_description: null, - }, - { - uid: uidOfficeFolder5, - folder_number: "0005", - name: "Vente par M. Lalo au profit de Mme. Pigale", - deed_uid: uidDeed5, - status: EFolderStatus.LIVE, - created_at: new Date(), - updated_at: new Date(), - office_uid: uidOffice1, - description: null, - archived_description: null, - }, - { - uid: uidOfficeFolder6, - folder_number: "0006", - name: "Donation des parts sociales de la société SMART-TALENT", - deed_uid: uidDeed6, - status: EFolderStatus.LIVE, - created_at: new Date(), - updated_at: new Date(), - office_uid: uidOffice1, - description: null, - archived_description: null, - }, - { - uid: uidOfficeFolder7, - folder_number: "0007", - name: "Vente par M. Girard au profit de M. Louis", - deed_uid: uidDeed7, - status: EFolderStatus.LIVE, - created_at: new Date(), - updated_at: new Date(), - office_uid: uidOffice1, - description: null, - archived_description: null, - }, - { - uid: uidOfficeFolder8, - folder_number: "0008", - name: "Vente par Mme. Leclerc au profit de M. Louis", - deed_uid: uidDeed8, - status: EFolderStatus.LIVE, - created_at: new Date(), - updated_at: new Date(), - office_uid: uidOffice1, - description: null, - archived_description: null, - }, - { - uid: uidOfficeFolder9, - folder_number: "0009", - name: "Vente par M. Lambert au profit de M. Holmes", - deed_uid: uidDeed9, - status: EFolderStatus.LIVE, - created_at: new Date(), - updated_at: new Date(), - office_uid: uidOffice1, - description: null, - archived_description: null, - }, - ]; - - const deeds: Deeds[] = [ - { - uid: uidDeed1, - deed_type_uid: uidDeedType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed2, - deed_type_uid: uidDeedType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed3, - deed_type_uid: uidDeedType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed4, - deed_type_uid: uidDeedType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed5, - deed_type_uid: uidDeedType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed6, - deed_type_uid: uidDeedType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed7, - deed_type_uid: uidDeedType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed8, - deed_type_uid: uidDeedType2, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed9, - deed_type_uid: uidDeedType2, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed10, - deed_type_uid: uidDeedType2, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed11, - deed_type_uid: uidDeedType2, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed12, - deed_type_uid: uidDeedType2, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed13, - deed_type_uid: uidDeedType2, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed14, - deed_type_uid: uidDeedType2, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed15, - deed_type_uid: uidDeedType3, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed16, - deed_type_uid: uidDeedType3, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed17, - deed_type_uid: uidDeedType3, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed18, - deed_type_uid: uidDeedType3, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed19, - deed_type_uid: uidDeedType3, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed20, - deed_type_uid: uidDeedType3, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeed21, - deed_type_uid: uidDeedType3, - created_at: new Date(), - updated_at: new Date(), - }, - ]; - - const deedTypes: DeedTypes[] = [ - { - uid: uidDeedType1, - name: "Acte de donation", - archived_at: null, - description: "Acte de donation", - office_uid: uidOffice1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedType2, - name: "Acte de vente", - archived_at: null, - description: "Acte de vente", - office_uid: uidOffice1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedType3, - name: "Acte de succession", - archived_at: null, - description: "Acte de succession", - office_uid: uidOffice1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedType4, - name: "Acte de vente de maison individuelle", - archived_at: null, - description: "Acte de vente de maison individuelle", - office_uid: uidOffice1, - created_at: new Date(), - updated_at: new Date(), - }, - - ]; - - const documents: Documents[] = [ - ]; - - const documentTypes: DocumentTypes[] = [ - { - uid: uidDocumentType1, - archived_at: null, - name: "Document d'identité", - office_uid: uidOffice1, - private_description: "Document officiel d'identification utilisé par plusieurs personnes pour prouver leur identité et leur nationalité (CNI, passeport)", - public_description: "Document officiel d'identification utilisé par plusieurs personnes pour prouver leur identité et leur nationalité (CNI, passeport)", - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocumentType2, - archived_at: null, - name: "Taxe Foncière", - office_uid: uidOffice1, - private_description: "Impôt annuel imposé sur les propriétés foncières et utilisé pour financer les services publics locaux.", - public_description: "Impôt annuel imposé sur les propriétés foncières et utilisé pour financer les services publics locaux.", - created_at: new Date(), - updated_at: new Date(), - }, - - { - uid: uidDocumentType3, - archived_at: null, - name: "Contrat Mariage", - office_uid: uidOffice1, - private_description: "Accord légal qui établit les droits et les obligations entre deux personnes s'unissant en mariage.", - public_description: "Accord légal qui établit les droits et les obligations entre deux personnes s'unissant en mariage.", - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocumentType4, - archived_at: null, - name: "Livret de famille", - office_uid: uidOffice1, - private_description: "Document officiel qui enregistre les détails et les événements familiaux tels que les mariages, les naissances et les décès d'un couple et de leurs enfants.", - public_description: "Document officiel qui enregistre les détails et les événements familiaux tels que les mariages, les naissances et les décès d'un couple et de leurs enfants.", - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocumentType16, - archived_at: null, - name: "Bail commercial", - office_uid: uidOffice1, - private_description: "Contrat légal entre un propriétaire et un locataire pour la location d'un bien immobilier utilisé à des fins commerciales ou professionnelles.", - public_description: "Contrat légal entre un propriétaire et un locataire pour la location d'un bien immobilier utilisé à des fins commerciales ou professionnelles.", - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocumentType5, - archived_at: null, - name: "Statuts SCI", - office_uid: uidOffice1, - private_description: "Document légal qui définit les règles et les dispositions régissant la Société Civile Immobilière (SCI).", - public_description: "Document légal qui définit les règles et les dispositions régissant la Société Civile Immobilière (SCI).", - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocumentType6, - archived_at: null, - name: "Avis de taxe foncière", - office_uid: uidOffice1, - private_description: "Notification officielle indiquant le montant de l'impôt foncier dû sur une propriété.", - public_description: "Notification officielle indiquant le montant de l'impôt foncier dû sur une propriété.", - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocumentType7, - archived_at: null, - name: "Appel de charge de copropriété", - office_uid: uidOffice1, - private_description: "Document envoyé aux copropriétaires pour les informer des dépenses et des charges communes liées à la gestion et à l'entretien de l'immeuble.", - public_description: "Document envoyé aux copropriétaires pour les informer des dépenses et des charges communes liées à la gestion et à l'entretien de l'immeuble.", - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocumentType8, - archived_at: null, - name: "PVAG", - office_uid: uidOffice1, - private_description: "Compte rendu écrit des discussions, décisions et résolutions prises lors d'une réunion d'assemblée générale de copropriété.", - public_description: "Compte rendu écrit des discussions, décisions et résolutions prises lors d'une réunion d'assemblée générale de copropriété.", - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocumentType9, - archived_at: null, - name: "Règlement de copropriété", - office_uid: uidOffice1, - private_description: "Document juridique qui établit les règles et les droits des copropriétaires d'un immeuble en copropriété.", - public_description: "Document juridique qui établit les règles et les droits des copropriétaires d'un immeuble en copropriété.", - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocumentType10, - archived_at: null, - name: "Titre de propriété", - office_uid: uidOffice1, - private_description: "Document légal qui atteste de la propriété d'un bien immobilier et en identifie le propriétaire.", - public_description: "Document légal qui atteste de la propriété d'un bien immobilier et en identifie le propriétaire.", - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocumentType11, - archived_at: null, - name: "Plan et loi carrez", - office_uid: uidOffice1, - private_description: "Document officiel qui mesure la superficie d'un lot ou d'un bien immobilier, conformément à la loi Carrez qui encadre les transactions immobilières.", - public_description: "Document officiel qui mesure la superficie d'un lot ou d'un bien immobilier, conformément à la loi Carrez qui encadre les transactions immobilières.", - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocumentType12, - archived_at: null, - name: "CNI", - office_uid: uidOffice1, - private_description: "Document officiel d'identification délivré par l'État pour prouver l'identité et la nationalité d'une personne.", - public_description: "Document officiel d'identification délivré par l'État pour prouver l'identité et la nationalité d'une personne.", - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocumentType13, - archived_at: null, - name: "Modifications règlement copropriété (plusieurs)", - office_uid: uidOffice1, - private_description: "Documents légaux qui apportent des changements ou des ajustements aux règles et dispositions du règlement de copropriété initial.", - public_description: "Documents légaux qui apportent des changements ou des ajustements aux règles et dispositions du règlement de copropriété initial.", - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocumentType14, - archived_at: null, - name: "Avis de décès", - office_uid: uidOffice1, - private_description: "Notification officielle délivrée par les autorités compétentes pour informer du décès d'une personne.", - public_description: "Notification officielle délivrée par les autorités compétentes pour informer du décès d'une personne.", - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocumentType15, - archived_at: null, - name: "Lettre de mission", - office_uid: uidOffice1, - private_description: "Document contractuel qui définit les termes et les objectifs d'une mission confiée à une personne ou à une entreprise.", - public_description: "Document contractuel qui définit les termes et les objectifs d'une mission confiée à une personne ou à une entreprise.", - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocumentType17, - archived_at: null, - name: "DPE", - office_uid: uidOffice1, - private_description: "Diagnostic de Performance Energétique.", - public_description: "Diagnostic de Performance Energétique.", - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocumentType18, - archived_at: null, - name: "RIB", - office_uid: uidOffice1, - private_description: "Relevé d'identité bancaire ou IBAN.", - public_description: "Relevé d'identité bancaire ou IBAN.", - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDocumentType19, - archived_at: null, - name: "Acte d'achat par la SCI", - office_uid: uidOffice1, - private_description: "Acte d'achat par la SCI.", - public_description: "Acte d'achat par la SCI.", - created_at: new Date(), - updated_at: new Date(), - }, - ]; - - const officeFolderHasCustomers: OfficeFolderHasCustomers[] = [ - { - uid: uidOfficeFolderHasCustomer1, - customer_uid: uidCustomer1, - office_folder_uid: uidOfficeFolder1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidOfficeFolderHasCustomer3, - customer_uid: uidCustomer3, - office_folder_uid: uidOfficeFolder3, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidOfficeFolderHasCustomer4, - customer_uid: uidCustomer4, - office_folder_uid: uidOfficeFolder4, - created_at: new Date(), - updated_at: new Date(), - }, - - ]; - - const deedHasDocumentTypes: DeedHasDocumentTypes[] = [ - { - uid: uidDeedHasDocumentType1, - deed_uid: uidDeed1, - document_type_uid: uidDocumentType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType2, - deed_uid: uidDeed1, - document_type_uid: uidDocumentType6, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType3, - deed_uid: uidDeed1, - document_type_uid: uidDocumentType10, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType4, - deed_uid: uidDeed1, - document_type_uid: uidDocumentType17, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType5, - deed_uid: uidDeed1, - document_type_uid: uidDocumentType18, - created_at: new Date(), - updated_at: new Date(), - }, - - - { - uid: uidDeedHasDocumentType6, - deed_uid: uidDeed2, - document_type_uid: uidDocumentType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType7, - deed_uid: uidDeed2, - document_type_uid: uidDocumentType6, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType8, - deed_uid: uidDeed2, - document_type_uid: uidDocumentType10, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType9, - deed_uid: uidDeed2, - document_type_uid: uidDocumentType17, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType10, - deed_uid: uidDeed2, - document_type_uid: uidDocumentType18, - created_at: new Date(), - updated_at: new Date(), - }, - - - { - uid: uidDeedHasDocumentType11, - deed_uid: uidDeed3, - document_type_uid: uidDocumentType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType12, - deed_uid: uidDeed3, - document_type_uid: uidDocumentType6, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType13, - deed_uid: uidDeed3, - document_type_uid: uidDocumentType10, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType14, - deed_uid: uidDeed3, - document_type_uid: uidDocumentType17, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType15, - deed_uid: uidDeed3, - document_type_uid: uidDocumentType18, - created_at: new Date(), - updated_at: new Date(), - }, - - - { - uid: uidDeedHasDocumentType16, - deed_uid: uidDeed4, - document_type_uid: uidDocumentType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType17, - deed_uid: uidDeed4, - document_type_uid: uidDocumentType6, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType18, - deed_uid: uidDeed4, - document_type_uid: uidDocumentType10, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType19, - deed_uid: uidDeed4, - document_type_uid: uidDocumentType17, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType20, - deed_uid: uidDeed4, - document_type_uid: uidDocumentType18, - created_at: new Date(), - updated_at: new Date(), - }, - - - { - uid: uidDeedHasDocumentType21, - deed_uid: uidDeed5, - document_type_uid: uidDocumentType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType22, - deed_uid: uidDeed5, - document_type_uid: uidDocumentType6, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType23, - deed_uid: uidDeed5, - document_type_uid: uidDocumentType10, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType24, - deed_uid: uidDeed5, - document_type_uid: uidDocumentType17, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType25, - deed_uid: uidDeed5, - document_type_uid: uidDocumentType18, - created_at: new Date(), - updated_at: new Date(), - }, - - - { - uid: uidDeedHasDocumentType26, - deed_uid: uidDeed6, - document_type_uid: uidDocumentType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType27, - deed_uid: uidDeed6, - document_type_uid: uidDocumentType6, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType28, - deed_uid: uidDeed6, - document_type_uid: uidDocumentType10, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType29, - deed_uid: uidDeed6, - document_type_uid: uidDocumentType17, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType30, - deed_uid: uidDeed6, - document_type_uid: uidDocumentType18, - created_at: new Date(), - updated_at: new Date(), - }, - - - { - uid: uidDeedHasDocumentType31, - deed_uid: uidDeed7, - document_type_uid: uidDocumentType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType32, - deed_uid: uidDeed7, - document_type_uid: uidDocumentType6, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType33, - deed_uid: uidDeed7, - document_type_uid: uidDocumentType10, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType34, - deed_uid: uidDeed7, - document_type_uid: uidDocumentType17, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType35, - deed_uid: uidDeed7, - document_type_uid: uidDocumentType18, - created_at: new Date(), - updated_at: new Date(), - }, - - - { - uid: uidDeedHasDocumentType36, - deed_uid: uidDeed8, - document_type_uid: uidDocumentType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType37, - deed_uid: uidDeed8, - document_type_uid: uidDocumentType6, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType38, - deed_uid: uidDeed8, - document_type_uid: uidDocumentType10, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType39, - deed_uid: uidDeed8, - document_type_uid: uidDocumentType17, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType40, - deed_uid: uidDeed8, - document_type_uid: uidDocumentType18, - created_at: new Date(), - updated_at: new Date(), - }, - - - { - uid: uidDeedHasDocumentType41, - deed_uid: uidDeed9, - document_type_uid: uidDocumentType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType42, - deed_uid: uidDeed9, - document_type_uid: uidDocumentType6, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType43, - deed_uid: uidDeed9, - document_type_uid: uidDocumentType10, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType44, - deed_uid: uidDeed9, - document_type_uid: uidDocumentType17, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedHasDocumentType45, - deed_uid: uidDeed9, - document_type_uid: uidDocumentType18, - created_at: new Date(), - updated_at: new Date(), - }, - ]; - - const officeRoleHasRules: OfficesRolesHasRules[] = [ - { - uid: uidOfficeRoleHasRule1, - office_uid: uidOffice1, - role_uid: uidRole1, - rule_uid: uidRule1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidOfficeRoleHasRule2, - office_uid: uidOffice1, - role_uid: uidRole2, - rule_uid: uidRule2, - created_at: new Date(), - updated_at: new Date(), - }, - ]; - - const roleHasRules: RolesHasRules[] = [ - { - uid: uidRoleHasRule1, - role_uid: uidRole1, - rule_uid: uidRule2, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidRoleHasRule2, - role_uid: uidRole2, - rule_uid: uidRule1, - created_at: new Date(), - updated_at: new Date(), - }, - ]; - - const rules: Rules[] = [ - { - uid: uidRule1, - name: 'GET users', - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidRule2, - name: 'GET offices', - created_at: new Date(), - updated_at: new Date(), - } - ]; - - const deedTypeHasDocumentTypes: DeedTypeHasDocumentTypes[] = [ - { - uid: uidDeedTypeHasDocumentType1, - deed_type_uid: uidDeedType1, - document_type_uid: uidDocumentType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedTypeHasDocumentType2, - deed_type_uid: uidDeedType1, - document_type_uid: uidDocumentType2, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedTypeHasDocumentType3, - deed_type_uid: uidDeedType1, - document_type_uid: uidDocumentType3, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedTypeHasDocumentType9, - deed_type_uid: uidDeedType1, - document_type_uid: uidDocumentType4, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedTypeHasDocumentType10, - deed_type_uid: uidDeedType1, - document_type_uid: uidDocumentType16, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedTypeHasDocumentType11, - deed_type_uid: uidDeedType1, - document_type_uid: uidDocumentType5, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedTypeHasDocumentType12, - deed_type_uid: uidDeedType1, - document_type_uid: uidDocumentType19, - created_at: new Date(), - updated_at: new Date(), - }, - - - { - uid: uidDeedTypeHasDocumentType13, - deed_type_uid: uidDeedType2, - document_type_uid: uidDocumentType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedTypeHasDocumentType14, - deed_type_uid: uidDeedType2, - document_type_uid: uidDocumentType13, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedTypeHasDocumentType15, - deed_type_uid: uidDeedType2, - document_type_uid: uidDocumentType2, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedTypeHasDocumentType16, - deed_type_uid: uidDeedType2, - document_type_uid: uidDocumentType8, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedTypeHasDocumentType17, - deed_type_uid: uidDeedType2, - document_type_uid: uidDocumentType10, - created_at: new Date(), - updated_at: new Date(), - }, - - - { - uid: uidDeedTypeHasDocumentType18, - deed_type_uid: uidDeedType3, - document_type_uid: uidDocumentType14, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedTypeHasDocumentType19, - deed_type_uid: uidDeedType3, - document_type_uid: uidDocumentType15, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedTypeHasDocumentType20, - deed_type_uid: uidDeedType3, - document_type_uid: uidDocumentType4, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedTypeHasDocumentType21, - deed_type_uid: uidDeedType3, - document_type_uid: uidDocumentType10, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedTypeHasDocumentType22, - deed_type_uid: uidDeedType3, - document_type_uid: uidDocumentType1, - created_at: new Date(), - updated_at: new Date(), - }, - - - { - uid: uidDeedTypeHasDocumentType4, - deed_type_uid: uidDeedType4, - document_type_uid: uidDocumentType1, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedTypeHasDocumentType5, - deed_type_uid: uidDeedType4, - document_type_uid: uidDocumentType6, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedTypeHasDocumentType6, - deed_type_uid: uidDeedType4, - document_type_uid: uidDocumentType10, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedTypeHasDocumentType7, - deed_type_uid: uidDeedType4, - document_type_uid: uidDocumentType17, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidDeedTypeHasDocumentType8, - deed_type_uid: uidDeedType4, - document_type_uid: uidDocumentType18, - created_at: new Date(), - updated_at: new Date(), - }, - ]; - - - for (const address of addresses) { - await prisma.addresses.create({ data: address }); - } - - for (const contact of contacts) { - await prisma.contacts.create({ data: contact }); - } - - for (const office of offices) { - await prisma.offices.create({ data: office }); - } - - for (const role of roles) { - await prisma.roles.create({ data: role }); - } - - for (const rule of rules) { - await prisma.rules.create({ data: rule }); - } - - for (const user of users) { - await prisma.users.create({ data: user }); - } - - for (const customer of customers) { - await prisma.customers.create({ data: customer }); - } - - for (const deedType of deedTypes) { - await prisma.deedTypes.create({ data: deedType }); - } - - for (const deed of deeds) { - await prisma.deeds.create({ data: deed }); - } - for (const officeFolder of officeFolders) { - await prisma.officeFolders.create({ data: officeFolder }); - } - - for (const documentType of documentTypes) { - await prisma.documentTypes.create({ data: documentType }); - } - - for (const document of documents) { - await prisma.documents.create({ data: document }); - } - - for (const officeFolderHasCustomer of officeFolderHasCustomers) { - await prisma.officeFolderHasCustomers.create({ data: officeFolderHasCustomer }); - } - - for (const officeRoleHasRule of officeRoleHasRules) { - await prisma.officesRolesHasRules.create({ data: officeRoleHasRule }); - } - - for (const roleHasRule of roleHasRules) { - await prisma.rolesHasRules.create({ data: roleHasRule }); - } - - for (const deedHasDocumentType of deedHasDocumentTypes) { - await prisma.deedHasDocumentTypes.create({ data: deedHasDocumentType }); - } - - for (const deedTypeHasDocumentType of deedTypeHasDocumentTypes) { - await prisma.deedTypeHasDocumentTypes.create({ data: deedTypeHasDocumentType }); - } - - console.log(">MOCK DATA - Seeding completed!"); -})(); diff --git a/src/common/repositories/AddressesRepository.ts b/src/common/repositories/AddressesRepository.ts deleted file mode 100644 index 268d9059..00000000 --- a/src/common/repositories/AddressesRepository.ts +++ /dev/null @@ -1,38 +0,0 @@ -import Database from "@Common/databases/database"; -import BaseRepository from "@Repositories/BaseRepository"; -import { Service } from "typedi"; -import { Addresses } from "@prisma/client"; - -@Service() -export default class AddressesRepository extends BaseRepository { - constructor(private database: Database) { - super(); - } - protected get model() { - return this.database.getClient().addresses; - } - protected get instanceDb() { - return this.database.getClient(); - } - - /** - * @description : Find many addresses - */ - public async findMany(query: any): Promise { - query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); - return this.model.findMany(query); - } - - /** - * @description : Find one address - */ - public async findOneByUid(uid: string): Promise { - const addressEntity = await this.model.findUnique({ - where: { - uid: uid, - }, - }); - - return addressEntity; - } -} diff --git a/src/common/repositories/ContactsRepository.ts b/src/common/repositories/ContactsRepository.ts deleted file mode 100644 index 26836b4a..00000000 --- a/src/common/repositories/ContactsRepository.ts +++ /dev/null @@ -1,38 +0,0 @@ -import Database from "@Common/databases/database"; -import BaseRepository from "@Repositories/BaseRepository"; -import { Service } from "typedi"; -import { Contacts } from "@prisma/client"; - -@Service() -export default class ContactsRepository extends BaseRepository { - constructor(private database: Database) { - super(); - } - protected get model() { - return this.database.getClient().contacts; - } - protected get instanceDb() { - return this.database.getClient(); - } - - /** - * @description : Find many contacts - */ - public async findMany(query: any): Promise { - query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); - return this.model.findMany(query); - } - - /** - * @description : Find unique contact - */ - public async findOneByUid(uid: string): Promise { - const contactEntity = await this.model.findUnique({ - where: { - uid: uid, - }, - }); - - return contactEntity; - } -} diff --git a/src/common/repositories/CustomersRepository.ts b/src/common/repositories/CustomersRepository.ts index c1b48c22..a4ebfe4a 100644 --- a/src/common/repositories/CustomersRepository.ts +++ b/src/common/repositories/CustomersRepository.ts @@ -19,11 +19,7 @@ export default class CustomersRepository extends BaseRepository { /** * @description : Find many customers */ - public async findMany(query: Prisma.CustomersFindManyArgs): Promise< - (Customers & { - contact: Contacts; - })[] - > { + public async findMany(query: Prisma.CustomersFindManyArgs) { query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); if (!query.include) return this.model.findMany({ ...query, include: { contact: true } }); return this.model.findMany({ ...query, include: { contact: { include: { address: true } } } }); @@ -32,7 +28,7 @@ export default class CustomersRepository extends BaseRepository { /** * @description : Create a customer */ - public async create(customer: Customer): Promise { + public async create(customer: Customer): Promise { const createArgs: Prisma.CustomersCreateArgs = { data: { status: ECustomerStatus.PENDING, @@ -50,12 +46,12 @@ export default class CustomersRepository extends BaseRepository { }, }; - if (customer.contact!.address) { + if (customer.contact?.address) { createArgs.data.contact!.create!.address = { create: { - address: customer.contact!.address!.address, - zip_code: customer.contact!.address!.zip_code, - city: customer.contact!.address!.city, + address: customer.contact?.address?.address, + zip_code: customer.contact?.address?.zip_code, + city: customer.contact?.address?.city, }, }; } @@ -65,7 +61,7 @@ export default class CustomersRepository extends BaseRepository { /** * @description : Update data from a customer */ - public async update(uid: string, customer: Customer): Promise { + public async update(uid: string, customer: Customer): Promise { const updateArgs: Prisma.CustomersUpdateArgs = { where: { uid: uid, @@ -98,17 +94,12 @@ export default class CustomersRepository extends BaseRepository { /** * @description : Find unique customer */ - public async findOneByUid(uid: string, query?: any): Promise { - const findOneArgs: Prisma.CustomersFindUniqueArgs = { + public async findOneByUid(uid: string, query?: Prisma.CustomersInclude) { + return this.model.findUnique({ where: { uid: uid, }, - }; - if (query) { - findOneArgs.include = query; - } - const customerEntity = await this.model.findUnique(findOneArgs); - - return customerEntity; + include: query, + }); } } diff --git a/src/common/repositories/DeedTypesHasDocumentTypesRepository.ts b/src/common/repositories/DeedTypesHasDocumentTypesRepository.ts deleted file mode 100644 index e724d9d8..00000000 --- a/src/common/repositories/DeedTypesHasDocumentTypesRepository.ts +++ /dev/null @@ -1,38 +0,0 @@ -import Database from "@Common/databases/database"; -import { DeedTypeHasDocumentTypes } from "@prisma/client"; -import BaseRepository from "@Repositories/BaseRepository"; -import { Service } from "typedi"; - -@Service() -export default class DeedTypeHasDocumentTypesRepository extends BaseRepository { - constructor(private database: Database) { - super(); - } - protected get model() { - return this.database.getClient().deedTypeHasDocumentTypes; - } - protected get instanceDb() { - return this.database.getClient(); - } - - /** - * @description : Find many relations between deed type and a document type - */ - public async findMany(query: any): Promise { - query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); - return this.model.findMany(query); - } - - /** - * @description : Find unique relation between deed type and a document type - */ - public async findOneByUid(uid: string): Promise { - const deedTypeHasDoculmentTypesEntity = await this.model.findUnique({ - where: { - uid: uid, - }, - }); - - return deedTypeHasDoculmentTypesEntity; - } -} diff --git a/src/common/repositories/DeedTypesRepository.ts b/src/common/repositories/DeedTypesRepository.ts index 7a695488..3004726a 100644 --- a/src/common/repositories/DeedTypesRepository.ts +++ b/src/common/repositories/DeedTypesRepository.ts @@ -1,7 +1,7 @@ import Database from "@Common/databases/database"; import BaseRepository from "@Repositories/BaseRepository"; import { Service } from "typedi"; -import { DeedTypes, Prisma } from "@prisma/client"; +import { DeedTypes, DocumentTypes, Prisma } from "@prisma/client"; import { DeedType } from "le-coffre-resources/dist/SuperAdmin"; @Service() @@ -19,7 +19,7 @@ export default class DeedTypesRepository extends BaseRepository { /** * @description : Find many deed types */ - public async findMany(query: any): Promise { + public async findMany(query: Prisma.DeedTypesFindManyArgs): Promise { query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); return this.model.findMany(query); } @@ -39,23 +39,20 @@ export default class DeedTypesRepository extends BaseRepository { }, }, }; - if (deedType.deed_type_has_document_types) { - createArgs.data.deed_type_has_document_types = { - createMany: { - data: deedType.deed_type_has_document_types.map((relation) => ({ - document_type_uid: relation.document_type.uid!, - })), - skipDuplicates: true, - }, + if (deedType.document_types) { + createArgs.data.document_types = { + connect: deedType.document_types.map((documentType) => ({ + uid: documentType.uid, + })), }; } - return this.model.create(createArgs); + return this.model.create({...createArgs, include: { document_types: true }}); } /** * @description : Update data of a deed type */ - public async update(uid: string, deedType: DeedType): Promise { + public async update(uid: string, deedType: DeedType): Promise { const updateArgs: Prisma.DeedTypesUpdateArgs = { where: { uid: uid, @@ -69,39 +66,26 @@ export default class DeedTypesRepository extends BaseRepository { uid: deedType.office!.uid, }, }, - }, - include: { - deed_type_has_document_types: true, + document_types: { + set: deedType.document_types?.map((documentType) => ({ + uid: documentType.uid!, + })) + } }, }; - if (deedType.deed_type_has_document_types) { - updateArgs.data.deed_type_has_document_types = { - deleteMany: { deed_type_uid: uid }, - createMany: { - data: deedType.deed_type_has_document_types.map((relation) => ({ - document_type_uid: relation.document_type.uid!, - })), - skipDuplicates: true, - }, - }; - } - return this.model.update(updateArgs); + + return this.model.update({...updateArgs, include: { document_types: true }}); } /** * @description : Find unique deed type */ - public async findOneByUid(uid: string, query?: any): Promise { - const findOneArgs: Prisma.DeedTypesFindUniqueArgs = { + public async findOneByUid(uid: string, query?: Prisma.DeedTypesInclude) { + return this.model.findUnique({ where: { uid: uid, }, - }; - if (query) { - findOneArgs.include = query; - } - const deedTypeEntity = await this.model.findUnique(findOneArgs); - - return deedTypeEntity; + include: query, + }); } } diff --git a/src/common/repositories/DeedsHasDocumentTypesRepository.ts b/src/common/repositories/DeedsHasDocumentTypesRepository.ts deleted file mode 100644 index f95bca45..00000000 --- a/src/common/repositories/DeedsHasDocumentTypesRepository.ts +++ /dev/null @@ -1,38 +0,0 @@ -import Database from "@Common/databases/database"; -import { DeedHasDocumentTypes } from "@prisma/client"; -import BaseRepository from "@Repositories/BaseRepository"; -import { Service } from "typedi"; - -@Service() -export default class DeedHasDocumentTypesRepository extends BaseRepository { - constructor(private database: Database) { - super(); - } - protected get model() { - return this.database.getClient().deedHasDocumentTypes; - } - protected get instanceDb() { - return this.database.getClient(); - } - - /** - * @description : Find many deeds - */ - public async findMany(query: any): Promise { - query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); - return this.model.findMany(query); - } - - /** - * @description : Find unique relation between deed and a document type - */ - public async findOneByUid(uid: string): Promise { - const deedHasDocumentTypesEntity = await this.model.findUnique({ - where: { - uid: uid, - }, - }); - - return deedHasDocumentTypesEntity; - } -} diff --git a/src/common/repositories/DeedsRepository.ts b/src/common/repositories/DeedsRepository.ts index ce6bef38..80fbe59a 100644 --- a/src/common/repositories/DeedsRepository.ts +++ b/src/common/repositories/DeedsRepository.ts @@ -1,7 +1,7 @@ import Database from "@Common/databases/database"; import BaseRepository from "@Repositories/BaseRepository"; import { Service } from "typedi"; -import { Deeds, Prisma } from "@prisma/client"; +import { Deeds, DocumentTypes, Prisma } from "@prisma/client"; import { Deed } from "le-coffre-resources/dist/Notary"; @Service() @@ -19,7 +19,7 @@ export default class DeedsRepository extends BaseRepository { /** * @description : Find many users */ - public async findMany(query: any): Promise { + public async findMany(query: Prisma.DeedsFindManyArgs) { query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); return this.model.findMany(query); } @@ -27,7 +27,7 @@ export default class DeedsRepository extends BaseRepository { /** * @description : Create a deed based on a deed type */ - public async create(deed: Deed): Promise { + public async create(deed: Deed): Promise { const createArgs: Prisma.DeedsCreateArgs = { data: { deed_type: { @@ -41,66 +41,53 @@ export default class DeedsRepository extends BaseRepository { where: { uid: deed.deed_type!.uid, }, - include: { deed_type_has_document_types: true }, + include: { document_types: true }, }); if (deedTypeWithDocumentTypes.archived_at) throw new Error("deed type is archived"); - if (deedTypeWithDocumentTypes.deed_type_has_document_types) { - createArgs.data.deed_has_document_types = { - createMany: { - data: deedTypeWithDocumentTypes.deed_type_has_document_types.map((relation) => ({ - document_type_uid: relation.document_type_uid, - })), - skipDuplicates: true, - }, + if (deedTypeWithDocumentTypes.document_types) { + createArgs.data.document_types = { + connect: deedTypeWithDocumentTypes.document_types.map((documentType) => ({ + uid: documentType.uid, + })), }; } - return this.model.create(createArgs); + return this.model.create({ ...createArgs, include: { document_types: true } }); } /** * @description : Update data of a deed type */ - public async update(uid: string, deed: Deed): Promise { + public async update(uid: string, deed: Deed): Promise { const updateArgs: Prisma.DeedsUpdateArgs = { where: { uid: uid, }, - data: {}, + data: { + document_types: { + set: deed.document_types?.map((documentType) => ({ + uid: documentType.uid!, + })), + }, + }, include: { - deed_has_document_types: true, + document_types: true, }, }; - - if (deed.deed_has_document_types) { - updateArgs.data.deed_has_document_types = { - deleteMany: { deed_uid: uid }, - createMany: { - data: deed.deed_has_document_types.map((relation) => ({ - document_type_uid: relation.document_type.uid!, - })), - skipDuplicates: true, - }, - }; - } - return this.model.update(updateArgs); + + return this.model.update({ ...updateArgs, include: { document_types: true } }); } /** * @description : Find unique deed */ - public async findOneByUid(uid: string, query?: any): Promise { - const findOneArgs: Prisma.DeedsFindUniqueArgs = { + public async findOneByUid(uid: string, query?: Prisma.DeedsInclude) { + return this.model.findUnique({ where: { uid: uid, }, - }; - if (query) { - findOneArgs.include = query; - } - const deedTypeEntity = await this.model.findUnique(findOneArgs); - - return deedTypeEntity; + include: query, + }); } } diff --git a/src/common/repositories/DocumentTypesRepository.ts b/src/common/repositories/DocumentTypesRepository.ts index 04d785ba..0a0eab32 100644 --- a/src/common/repositories/DocumentTypesRepository.ts +++ b/src/common/repositories/DocumentTypesRepository.ts @@ -19,7 +19,7 @@ export default class DocumentTypesRepository extends BaseRepository { /** * @description : Find many document types */ - public async findMany(query: any): Promise { + public async findMany(query: Prisma.DocumentTypesFindManyArgs) { query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); return this.model.findMany(query); } @@ -28,7 +28,7 @@ export default class DocumentTypesRepository extends BaseRepository { * @description : Create a document type */ public async create(documentType: DocumentType): Promise { - return this.model.create({ + const createArgs: Prisma.DocumentTypesCreateArgs = { data: { name: documentType.name, public_description: documentType.public_description, @@ -39,14 +39,15 @@ export default class DocumentTypesRepository extends BaseRepository { }, }, }, - }); + }; + return this.model.create(createArgs); } /** * @description : update given document type */ public async update(uid: string, documentType: DocumentType): Promise { - return this.model.update({ + const updateArgs: Prisma.DocumentTypesUpdateArgs = { where: { uid: uid, }, @@ -60,24 +61,21 @@ export default class DocumentTypesRepository extends BaseRepository { uid: documentType.office!.uid, }, }, - }, - }); + } + }; + + return this.model.update(updateArgs); } /** * @description : find unique document type */ - public async findOneByUid(uid: string, query?: any): Promise { - const findOneArgs: Prisma.DocumentTypesFindUniqueArgs = { + public async findOneByUid(uid: string, query?: Prisma.DocumentTypesInclude) { + return this.model.findUnique({ where: { uid: uid, }, - }; - if (query) { - findOneArgs.include = query; - } - const documentTypeEntity = await this.model.findUnique(findOneArgs); - - return documentTypeEntity; + include: query, + }); } } diff --git a/src/common/repositories/DocumentsRepository.ts b/src/common/repositories/DocumentsRepository.ts index d6e784c9..2f1f08d6 100644 --- a/src/common/repositories/DocumentsRepository.ts +++ b/src/common/repositories/DocumentsRepository.ts @@ -1,7 +1,7 @@ import Database from "@Common/databases/database"; import BaseRepository from "@Repositories/BaseRepository"; import { Service } from "typedi"; -import { Documents, EDocumentStatus, Prisma } from "@prisma/client"; +import { DocumentTypes, Documents, EDocumentStatus, Prisma } from "@prisma/client"; import { Document } from "le-coffre-resources/dist/SuperAdmin"; @Service() @@ -19,7 +19,7 @@ export default class DocumentsRepository extends BaseRepository { /** * @description : Find many documents */ - public async findMany(query: any): Promise { + public async findMany(query: Prisma.DocumentsFindManyArgs) { query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); return this.model.findMany(query); } @@ -27,8 +27,8 @@ export default class DocumentsRepository extends BaseRepository { /** * @description : Create a document */ - public async create(document: Document): Promise { - const documentCreated = await this.model.create({ + public async create(document: Document): Promise { + const createArgs: Prisma.DocumentsCreateArgs = { data: { folder: { connect: { @@ -46,7 +46,9 @@ export default class DocumentsRepository extends BaseRepository { }, }, }, - }); + }; + + const documentCreated = await this.model.create({...createArgs, include: {document_type: true}}); await this.instanceDb.documentHistory.create({ data: { @@ -64,15 +66,29 @@ export default class DocumentsRepository extends BaseRepository { /** * @description : Create many documents linked to an office folder */ - public async createMany(documents: Document[]): Promise { - return this.model.createMany({ + public async createMany(documents: Document[]): Promise { + const createArgs: Prisma.DocumentsCreateManyArgs = { data: documents.map((document) => ({ folder_uid: document.folder!.uid!, depositor_uid: document.depositor!.uid!, document_type_uid: document.document_type!.uid!, })), skipDuplicates: true, - }); + }; + + const batchPayload = await this.model.createMany(createArgs); + + const documentsCreated = await this.model.findMany({orderBy: {created_at: 'desc'}, take: batchPayload.count}); + + const createHistoryArgs: Prisma.DocumentHistoryCreateManyArgs = { + data: documentsCreated.map((document) => ({ + document_uid: document.uid!, + })), + skipDuplicates: true, + }; + await this.instanceDb.documentHistory.createMany(createHistoryArgs); + + return documentsCreated; } /** @@ -109,17 +125,12 @@ export default class DocumentsRepository extends BaseRepository { /** * @description : Find unique document */ - public async findOneByUid(uid: string, query?: any): Promise { - const findOneArgs: Prisma.DocumentsFindUniqueArgs = { + public async findOneByUid(uid: string, query?: Prisma.DocumentsInclude) { + return this.model.findUnique({ where: { uid: uid, }, - }; - if (query) { - findOneArgs.include = query; - } - const documentEntity = await this.model.findUnique(findOneArgs); - - return documentEntity; + include: query, + }); } } diff --git a/src/common/repositories/FilesRepository.ts b/src/common/repositories/FilesRepository.ts index 9a0816c9..d7998b54 100644 --- a/src/common/repositories/FilesRepository.ts +++ b/src/common/repositories/FilesRepository.ts @@ -1,7 +1,7 @@ import Database from "@Common/databases/database"; import BaseRepository from "@Repositories/BaseRepository"; import { Service } from "typedi"; -import { Files } from "@prisma/client"; +import { Documents, Files, Prisma } from "@prisma/client"; import { File } from "le-coffre-resources/dist/SuperAdmin"; @Service() @@ -19,7 +19,7 @@ export default class FilesRepository extends BaseRepository { /** * @description : Find many files */ - public async findMany(query: any): Promise { + public async findMany(query: Prisma.FilesFindManyArgs) { query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); return this.model.findMany(query); } @@ -27,8 +27,8 @@ export default class FilesRepository extends BaseRepository { /** * @description : Create a file linked to a document */ - public async create(file: File, key: string): Promise { - return this.model.create({ + public async create(file: File, key: string): Promise { + const createArgs: Prisma.FilesCreateArgs = { data: { document: { connect: { @@ -40,30 +40,35 @@ export default class FilesRepository extends BaseRepository { mimetype: file.mimetype, size: file.size, key: key - }, - include: { document: true } - }); + } + }; + return this.model.create({...createArgs, include: { document: true }}); } /** * @description : Update data of a file */ - public async update(uid: string, file: File): Promise { - return this.model.update({ + public async update(uid: string, file: File, key: string): Promise { + const updateArgs: Prisma.FilesUpdateArgs = { where: { uid: uid, }, data: { + file_name: file.file_name, file_path: file.file_path, - }, - }); + mimetype: file.mimetype, + size: file.size, + key: key + } + }; + return this.model.update({...updateArgs, include: { document: true }}); } /** * @description : Delete a file key and archive */ - public async deleteKeyAndArchive(uid: string): Promise { - return this.model.update({ + public async deleteKeyAndArchive(uid: string): Promise { + const updateArgs: Prisma.FilesUpdateArgs = { where: { uid: uid, }, @@ -71,19 +76,19 @@ export default class FilesRepository extends BaseRepository { key: null, archived_at: new Date(Date.now()) } - }); + }; + return this.model.update({...updateArgs, include: { document: true }}); } /** * @description : Find unique file */ - public async findOneByUid(uid: string): Promise { - const fileEntity = await this.model.findUnique({ + public async findOneByUid(uid: string, query?: Prisma.FilesInclude) { + return this.model.findUnique({ where: { uid: uid, }, + include: query, }); - - return fileEntity; } } diff --git a/src/common/repositories/OfficeFoldersHasCustomerRepository.ts b/src/common/repositories/OfficeFoldersHasCustomerRepository.ts deleted file mode 100644 index 932e51fd..00000000 --- a/src/common/repositories/OfficeFoldersHasCustomerRepository.ts +++ /dev/null @@ -1,38 +0,0 @@ -import Database from "@Common/databases/database"; -import { OfficeFolderHasCustomers } from "@prisma/client"; -import BaseRepository from "@Repositories/BaseRepository"; -import { Service } from "typedi"; - -@Service() -export default class OfficeFoldersHasCustomerRepository extends BaseRepository { - constructor(private database: Database) { - super(); - } - protected get model() { - return this.database.getClient().officeFolderHasCustomers; - } - protected get instanceDb() { - return this.database.getClient(); - } - - /** - * @description : Find many relations - */ - public async findMany(query: any): Promise { - query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); - return this.model.findMany(query); - } - - /** - * @description : Find a unique relation between an office folder and customers - */ - public async findOneByUid(uid: string): Promise { - const officeFolderHasCustomersEntity = await this.model.findUnique({ - where: { - uid: uid, - }, - }); - - return officeFolderHasCustomersEntity; - } -} diff --git a/src/common/repositories/OfficeFoldersHasStakeholderRepository.ts b/src/common/repositories/OfficeFoldersHasStakeholderRepository.ts deleted file mode 100644 index 864856cd..00000000 --- a/src/common/repositories/OfficeFoldersHasStakeholderRepository.ts +++ /dev/null @@ -1,38 +0,0 @@ -import Database from "@Common/databases/database"; -import { OfficeFolderHasStakeholders } from "@prisma/client"; -import BaseRepository from "@Repositories/BaseRepository"; -import { Service } from "typedi"; - -@Service() -export default class OfficeFoldersHasStakeholderRepository extends BaseRepository { - constructor(private database: Database) { - super(); - } - protected get model() { - return this.database.getClient().officeFolderHasStakeholders; - } - protected get instanceDb() { - return this.database.getClient(); - } - - /** - * @description : Find many relations - */ - public async findMany(query: any): Promise { - query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); - return this.model.findMany(query); - } - - /** - * @description : Find a unique relation between an office folder and stakeholders - */ - public async findOneByUid(uid: string): Promise { - const officeFolderHasStakeholdersEntity = await this.model.findUnique({ - where: { - uid: uid, - }, - }); - - return officeFolderHasStakeholdersEntity; - } -} diff --git a/src/common/repositories/OfficeFoldersRepository.ts b/src/common/repositories/OfficeFoldersRepository.ts index d148cc46..70530560 100644 --- a/src/common/repositories/OfficeFoldersRepository.ts +++ b/src/common/repositories/OfficeFoldersRepository.ts @@ -1,7 +1,7 @@ import Database from "@Common/databases/database"; import BaseRepository from "@Repositories/BaseRepository"; import { Service } from "typedi"; -import { EFolderStatus, OfficeFolders, Prisma } from "@prisma/client"; +import { Customers, Documents, EFolderStatus, OfficeFolders, Prisma, Users } from "@prisma/client"; import { OfficeFolder } from "le-coffre-resources/dist/SuperAdmin"; @Service() @@ -19,7 +19,7 @@ export default class OfficeFoldersRepository extends BaseRepository { /** * @description : Find many office folders */ - public async findMany(query: any): Promise { + public async findMany(query: Prisma.OfficeFoldersFindManyArgs) { query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); return this.model.findMany(query); } @@ -27,7 +27,7 @@ export default class OfficeFoldersRepository extends BaseRepository { /** * @description : Create new office folder with stakeholders */ - public async create(officeFolder: OfficeFolder): Promise { + public async create(officeFolder: OfficeFolder): Promise { const createArgs: Prisma.OfficeFoldersCreateArgs = { data: { folder_number: officeFolder.folder_number, @@ -36,7 +36,7 @@ export default class OfficeFoldersRepository extends BaseRepository { status: EFolderStatus.LIVE, deed: { connect: { - uid: officeFolder.deed?.uid + uid: officeFolder.deed?.uid, }, }, office: { @@ -44,28 +44,24 @@ export default class OfficeFoldersRepository extends BaseRepository { uid: officeFolder.office!.uid, }, }, - }, - include: { - office_folder_has_stakeholder: true, - }, - }; - if (officeFolder.office_folder_has_stakeholder) { - createArgs.data.office_folder_has_stakeholder = { - createMany: { - data: officeFolder.office_folder_has_stakeholder.map((relation) => ({ - user_stakeholder_uid: relation.user_stakeholder.uid!, + stakeholders: { + connect: officeFolder.stakeholders?.map((stakeholder) => ({ + uid: stakeholder.uid!, })), - skipDuplicates: true, - }, - }; - } - return this.model.create(createArgs); + } + } + }; + + return this.model.create({...createArgs, include: {stakeholders: true}}); } /** * @description : Update data of an office folder */ - public async update(officeFolderuid: string, officeFolder: OfficeFolder): Promise { + public async update( + officeFolderuid: string, + officeFolder: OfficeFolder, + ): Promise { const updateArgs: Prisma.OfficeFoldersUpdateArgs = { where: { uid: officeFolderuid, @@ -76,64 +72,44 @@ export default class OfficeFoldersRepository extends BaseRepository { description: officeFolder.description, status: EFolderStatus[officeFolder.status as keyof typeof EFolderStatus], archived_description: officeFolder.archived_description, - }, - include: { - office_folder_has_stakeholder: true, - office_folder_has_customers: true, - documents: true, + stakeholders: { + set: officeFolder.stakeholders?.map((stakeholder) => ({ + uid: stakeholder.uid!, + })), + }, + customers: { + set: officeFolder.customers?.map((customer) => ({ + uid: customer.uid!, + })), + }, + documents: { + set: officeFolder.documents?.map((document) => ({ + uid: document.uid!, + })), + }, }, }; - if (officeFolder.office_folder_has_stakeholder) { - updateArgs.data.office_folder_has_stakeholder = { - deleteMany: { office_folder_uid: officeFolderuid }, - createMany: { - data: officeFolder.office_folder_has_stakeholder.map((relation) => ({ - user_stakeholder_uid: relation.user_stakeholder.uid!, - })), - skipDuplicates: true, - }, - }; - } - if (officeFolder.office_folder_has_customers) { - updateArgs.data.office_folder_has_customers = { - deleteMany: { office_folder_uid: officeFolderuid }, - createMany: { - data: officeFolder.office_folder_has_customers.map((relation) => ({ - customer_uid: relation.customer.uid!, - })), - skipDuplicates: true, - }, - }; - } - if (officeFolder.documents) { - updateArgs.data.documents = { - createMany: { - data: officeFolder.documents.map((relation) => ({ - document_type_uid: relation.document_type!.uid!, - depositor_uid: relation.depositor!.uid!, - })), - skipDuplicates: true, - }, - }; - } - return this.model.update(updateArgs); + + return this.model.update({ + ...updateArgs, + include: { + stakeholders: true, + customers: true, + documents: true, + }, + }); } /** * @description : Find one office folder */ - public async findOneByUid(uid: string, query?: any): Promise { - const findOneArgs: Prisma.OfficeFoldersFindUniqueArgs = { + public async findOneByUid(uid: string, query?: Prisma.OfficeFoldersInclude) { + return this.model.findUnique({ where: { uid: uid, }, - }; - if (query) { - findOneArgs.include = query; - } - const officeFolderEntity = await this.model.findUnique(findOneArgs); - - return officeFolderEntity; + include: query, + }); } /** diff --git a/src/common/repositories/OfficeRoleHasRulesRepository.ts b/src/common/repositories/OfficeRoleHasRulesRepository.ts deleted file mode 100644 index f36ccfd2..00000000 --- a/src/common/repositories/OfficeRoleHasRulesRepository.ts +++ /dev/null @@ -1,42 +0,0 @@ -import Database from "@Common/databases/database"; -import BaseRepository from "@Repositories/BaseRepository"; -import { Service } from "typedi"; -import { OfficesRolesHasRules, Prisma } from "@prisma/client"; - -@Service() -export default class OfficeRoleHasRulesRepository extends BaseRepository { - constructor(private database: Database) { - super(); - } - protected get model() { - return this.database.getClient().officesRolesHasRules; - } - protected get instanceDb() { - return this.database.getClient(); - } - - /** - * @description : Find many relations between office roles and rules - */ - public async findMany(query: any): Promise { - query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); - return this.model.findMany(query); - } - - /** - * @description : Find one relation between an office role and rules - */ - public async findOneByUid(uid: string, query?: any): Promise { - const findOneArgs: Prisma.OfficesRolesHasRulesFindUniqueArgs = { - where: { - uid: uid, - }, - }; - if (query) { - findOneArgs.include = query; - } - const roleEntity = await this.model.findUnique(findOneArgs); - - return roleEntity; - } -} diff --git a/src/common/repositories/OfficeRolesRepository.ts b/src/common/repositories/OfficeRolesRepository.ts new file mode 100644 index 00000000..781920ef --- /dev/null +++ b/src/common/repositories/OfficeRolesRepository.ts @@ -0,0 +1,93 @@ +import Database from "@Common/databases/database"; +import BaseRepository from "@Repositories/BaseRepository"; +import { Service } from "typedi"; +import { OfficeRoles, Prisma, Rules } from "@prisma/client"; +import { OfficeRole } from "le-coffre-resources/dist/SuperAdmin"; + +@Service() +export default class OfficeRolesRepository extends BaseRepository { + constructor(private database: Database) { + super(); + } + protected get model() { + return this.database.getClient().officeRoles; + } + protected get instanceDb() { + return this.database.getClient(); + } + + /** + * @description : Find many officeRoles + */ + public async findMany(query: Prisma.OfficeRolesFindManyArgs) { + query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); + return this.model.findMany(query); + } + + /** + * @description : Create new officeRole with rules + */ + public async create(officeRole: OfficeRole): Promise { + const createArgs: Prisma.OfficeRolesCreateArgs = { + data: { + name: officeRole.name, + office: { + connect: { + uid: officeRole.office.uid, + }, + }, + rules: { + connect: officeRole.rules?.map((rule) => ({ + uid: rule.uid!, + })), + }, + }, + }; + + return this.model.create({...createArgs, include: {rules: true}}); + } + + /** + * @description : Update data of a officeRole with rules + */ + public async update(officeRole: OfficeRole): Promise { + const updateArgs: Prisma.OfficeRolesUpdateArgs = { + where: { + uid: officeRole.uid, + }, + data: { + name: officeRole.name, + rules: { + set: officeRole.rules?.map((rule) => ({ + uid: rule.uid!, + })), + }, + }, + }; + + return this.model.update({...updateArgs, include: {rules: true}}); + } + + /** + * @description : Find one officeRole + */ + public async findOneByUid(uid: string, query?: Prisma.OfficeRolesInclude) { + return this.model.findUnique({ + where: { + uid: uid, + }, + include: query, + }); + } + + /** + * @description : Delete a officeRole + */ + public async delete(uid: string): Promise { + return this.model.delete({ + where: { + uid: uid, + }, + }); + } +} diff --git a/src/common/repositories/OfficesRepository.ts b/src/common/repositories/OfficesRepository.ts index e74a1d52..f1b72517 100644 --- a/src/common/repositories/OfficesRepository.ts +++ b/src/common/repositories/OfficesRepository.ts @@ -19,7 +19,7 @@ export default class OfficesRepository extends BaseRepository { /** * @description : Find many users */ - public async findMany(query: any): Promise { + public async findMany(query: Prisma.OfficesFindManyArgs) { query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); return this.model.findMany(query); @@ -29,7 +29,7 @@ export default class OfficesRepository extends BaseRepository { * @description : Create an office */ public async create(office: OfficeRessource): Promise { - return this.model.create({ + const createArgs: Prisma.OfficesCreateArgs = { data: { idNot: office.idNot, name: office.name, @@ -43,14 +43,15 @@ export default class OfficesRepository extends BaseRepository { }, office_status: EOfficeStatus.DESACTIVATED, }, - }); + }; + return this.model.create(createArgs); } /** * @description : Update data from an office */ public async update(uid: string, office: OfficeRessource): Promise { - return this.model.update({ + const updateArgs: Prisma.OfficesUpdateArgs = { where: { uid: uid, }, @@ -65,23 +66,29 @@ export default class OfficesRepository extends BaseRepository { }, office_status: EOfficeStatus[office.office_status as keyof typeof EOfficeStatus], }, + }; + return this.model.update(updateArgs); + } + + /** + * @description : Find one office + */ + public async findOneByUid(uid: string, query?: Prisma.OfficesInclude) { + return this.model.findUnique({ + where: { + uid: uid, + }, + include: query, }); } /** * @description : Find one office */ - public async findOneByUid(uid: string, query?: any): Promise { - const findOneArgs: Prisma.OfficesFindUniqueArgs = { - where: { - uid: uid, - }, - }; - if (query) { - findOneArgs.include = query; - } - const officeEntity = await this.model.findUnique(findOneArgs); - - return officeEntity; + public async findOneByProvider(providerName: string, id: string, query?: Prisma.OfficesInclude) { + return this.model.findUnique({ + where: { [providerName]: id }, + include: query, + }); } } diff --git a/src/common/repositories/RolesHasRulesRepository.ts b/src/common/repositories/RolesHasRulesRepository.ts deleted file mode 100644 index 7a255dc5..00000000 --- a/src/common/repositories/RolesHasRulesRepository.ts +++ /dev/null @@ -1,42 +0,0 @@ -import Database from "@Common/databases/database"; -import BaseRepository from "@Repositories/BaseRepository"; -import { Service } from "typedi"; -import { RolesHasRules, Prisma } from "@prisma/client"; - -@Service() -export default class RolesHasRulesRepository extends BaseRepository { - constructor(private database: Database) { - super(); - } - protected get model() { - return this.database.getClient().rolesHasRules; - } - protected get instanceDb() { - return this.database.getClient(); - } - - /** - * @description : Find many relations between basic roles and rules - */ - public async findMany(query: any): Promise { - query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); - return this.model.findMany(query); - } - - /** - * @description : Find one relation between an basic role and rules - */ - public async findOneByUid(uid: string, query?: any): Promise { - const findOneArgs: Prisma.RolesHasRulesFindUniqueArgs = { - where: { - uid: uid, - }, - }; - if (query) { - findOneArgs.include = query; - } - const roleEntity = await this.model.findUnique(findOneArgs); - - return roleEntity; - } -} diff --git a/src/common/repositories/RolesRepository.ts b/src/common/repositories/RolesRepository.ts index 3b69797a..20d203c7 100644 --- a/src/common/repositories/RolesRepository.ts +++ b/src/common/repositories/RolesRepository.ts @@ -19,7 +19,7 @@ export default class RolesRepository extends BaseRepository { /** * @description : Find many roles */ - public async findMany(query: any): Promise { + public async findMany(query: Prisma.RolesFindManyArgs) { query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); return this.model.findMany(query); } @@ -31,27 +31,13 @@ export default class RolesRepository extends BaseRepository { const createArgs: Prisma.RolesCreateArgs = { data: { name: role.name, - role_has_rules: { - createMany: { - data: role.role_has_rules!.rules.map((relation) => ({ - rule_uid: relation.uid!, - })), - skipDuplicates: true, - }, + rules: { + connect: role.rules?.map((rule) => ({ + uid: rule.uid!, + })), }, }, }; - if (role.office_role_has_rules) { - createArgs.data.office_role_has_rules = { - createMany: { - data: role.office_role_has_rules.rules.map((relation) => ({ - office_uid: role.office_role_has_rules!.office.uid!, - rule_uid: relation.uid!, - })), - skipDuplicates: true, - }, - }; - } return this.model.create(createArgs); } @@ -66,29 +52,13 @@ export default class RolesRepository extends BaseRepository { }, data: { name: role.name, - role_has_rules: { - deleteMany: { role_uid: role.uid }, - createMany: { - data: role.role_has_rules!.rules.map((relation) => ({ - rule_uid: relation.uid!, - })), - skipDuplicates: true, - }, + rules: { + set: role.rules?.map((rule) => ({ + uid: rule.uid!, + })), }, }, }; - if (role.office_role_has_rules) { - updateArgs.data.office_role_has_rules = { - deleteMany: { role_uid: role.uid }, - createMany: { - data: role.office_role_has_rules.rules.map((relation) => ({ - office_uid: role.office_role_has_rules!.office.uid!, - rule_uid: relation.uid!, - })), - skipDuplicates: true, - }, - }; - } return this.model.update(updateArgs); } @@ -96,18 +66,13 @@ export default class RolesRepository extends BaseRepository { /** * @description : Find one role */ - public async findOneByUid(uid: string, query?: any): Promise { - const findOneArgs: Prisma.RolesFindUniqueArgs = { + public async findOneByUid(uid: string, query?: Prisma.RolesInclude) { + return this.model.findUnique({ where: { uid: uid, }, - }; - if (query) { - findOneArgs.include = query; - } - const roleEntity = await this.model.findUnique(findOneArgs); - - return roleEntity; + include: query, + }); } /** diff --git a/src/common/repositories/RulesRepository.ts b/src/common/repositories/RulesRepository.ts index 7d015429..431d2cc7 100644 --- a/src/common/repositories/RulesRepository.ts +++ b/src/common/repositories/RulesRepository.ts @@ -19,7 +19,7 @@ export default class RulesRepository extends BaseRepository { /** * @description : Find many rules */ - public async findMany(query: any): Promise { + public async findMany(query: Prisma.RulesFindManyArgs) { query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); return this.model.findMany(query); } @@ -56,18 +56,13 @@ export default class RulesRepository extends BaseRepository { /** * @description : Find one rule */ - public async findOneByUid(uid: string, query?: any): Promise { - const findOneArgs: Prisma.RulesFindUniqueArgs = { + public async findOneByUid(uid: string, query?: Prisma.RulesInclude) { + return this.model.findUnique({ where: { uid: uid, }, - }; - if (query) { - findOneArgs.include = query; - } - const ruleEntity = await this.model.findUnique(findOneArgs); - - return ruleEntity; + include: query, + }); } /** diff --git a/src/common/repositories/UsersRepository.ts b/src/common/repositories/UsersRepository.ts index a0f14234..a2f89268 100644 --- a/src/common/repositories/UsersRepository.ts +++ b/src/common/repositories/UsersRepository.ts @@ -19,7 +19,7 @@ export default class UsersRepository extends BaseRepository { /** * @description : Find many users */ - public async findMany(query: Prisma.UsersFindManyArgs): Promise { + public async findMany(query: Prisma.UsersFindManyArgs) { query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); return this.model.findMany(query); } @@ -65,7 +65,7 @@ export default class UsersRepository extends BaseRepository { connect: { uid: user.role!.uid, }, - } + }, }, }; if (user.contact!.address) { @@ -75,6 +75,13 @@ export default class UsersRepository extends BaseRepository { city: user.contact!.address.city, }; } + if (user.office_role) { + createArgs.data.office_role = { + connect: { + uid: user.office_role.uid, + }, + }; + } return this.model.create({ ...createArgs, include: { contact: true, office_membership: { include: { address: true } } } }); } @@ -137,23 +144,39 @@ export default class UsersRepository extends BaseRepository { city: user.contact!.address!.city, }; } + if (user.office_role) { + updateArgs.data.office_role = { + connect: { + uid: user.office_role.uid, + }, + }; + } return this.model.update({ ...updateArgs, include: { contact: true, office_membership: { include: { address: true } } } }); } /** * @description : Find one user */ - public async findOneByUid(uid: string, query?: any): Promise { - const findOneArgs: Prisma.UsersFindUniqueArgs = { + public async findOneByUid(uid: string, query?: Prisma.UsersInclude){ + return this.model.findUnique({ where: { uid: uid, }, - }; - if (query) { - findOneArgs.include = query; - } - const userEntity = await this.model.findUnique(findOneArgs); + include: query, + }); + } - return userEntity; + /** + * @description : Find one user + */ + public async findOneByProvider(providerName: string, id: string) { + return this.model.findUnique({ + where: { [providerName]: id }, + include: { + role: { include: { rules: true } } , + office_role: { include: { rules: true } } , + office_membership: true, + }, + }); } } diff --git a/src/common/system/OpenIdInterface.ts b/src/common/system/OpenIdInterface.ts index d2d25049..62700e63 100644 --- a/src/common/system/OpenIdInterface.ts +++ b/src/common/system/OpenIdInterface.ts @@ -10,7 +10,21 @@ export type Tokens = { token_type: string; }; +export type OpenIdConfig = { + authorization_endpoint: string; + token_endpoint: string; + userinfo_endpoint: string; + claims_supported: string[]; + end_session_endpoint: string; + grant_types_supported: string[]; + response_types_supported: string[]; + scopes_supported: string[]; + issuer: string; + jwks_uri: string; +} + export default interface OpenIdInterface { + getOpenIdConfig(): Promise verifyIdToken(signingKey: string): Promise; getSigningKeys(jwksUri: string): Promise; } diff --git a/src/entries/App.ts b/src/entries/App.ts index 0b426b5d..f500c7f6 100644 --- a/src/entries/App.ts +++ b/src/entries/App.ts @@ -5,10 +5,8 @@ import ExpressServer from "@Common/system/ExpressServer"; import routes from "@App/index"; import cors from "cors"; import bodyParser from "body-parser"; -// import TezosLink from "@Common/databases/TezosLink"; import errorHandler from "@App/middlewares/ErrorHandler"; import { BackendVariables } from "@Common/config/variables/Variables"; -//import fileHandler from "@App/middlewares/FileHandler"; import multer from "multer"; @@ -22,7 +20,6 @@ const storage = multer.memoryStorage(); const rootUrl = variables.APP_ROOT_URL; const label = variables.APP_LABEL ?? "Unknown Service"; - // Container.get(TezosLink).connect(); Container.get(ExpressServer).init({ label, port: parseInt(port), diff --git a/src/services/common/AddressesService/AddressesService.ts b/src/services/common/AddressesService/AddressesService.ts deleted file mode 100644 index 4054aaba..00000000 --- a/src/services/common/AddressesService/AddressesService.ts +++ /dev/null @@ -1,27 +0,0 @@ -import AddressesRepository from "@Repositories/AddressesRepository"; -import BaseService from "@Services/BaseService"; -import { Addresses } from "@prisma/client"; -import { Service } from "typedi"; - -@Service() -export default class AddressesService extends BaseService { - constructor(private addressRepository: AddressesRepository) { - super(); - } - - /** - * @description : Get all addresses - * @throws {Error} If addresses cannot be get - */ - public async get(query: any): Promise { - return this.addressRepository.findMany(query); - } - - /** - * @description : Get a address by uid - * @throws {Error} If address cannot be get - */ - public async getByUid(uid: string): Promise { - return this.addressRepository.findOneByUid(uid); - } -} diff --git a/src/services/common/AuthService/AuthService.ts b/src/services/common/AuthService/AuthService.ts index 8d497fa9..0a6088a7 100644 --- a/src/services/common/AuthService/AuthService.ts +++ b/src/services/common/AuthService/AuthService.ts @@ -1,17 +1,23 @@ import jwt, { VerifyCallback } from "jsonwebtoken"; import BaseService from "@Services/BaseService"; -import "reflect-metadata"; import { BackendVariables } from "@Common/config/variables/Variables"; import { Service } from "typedi"; import UsersService from "@Services/super-admin/UsersService/UsersService"; -export type UserPayload = { - uid: string; - idNot: string; - office_idNot: string; +enum PROVIDER_OPENID { + idNot = "idNot", +} + +interface IJwtPayload { + userId: string; + openId: { + providerName: PROVIDER_OPENID; + userId: string | number; + }; + office_IdNot_Id: string; role: string; rules: string[]; -}; +} @Service() export default class AuthService extends BaseService { @@ -19,32 +25,35 @@ export default class AuthService extends BaseService { super(); } - public async getUserPayload(id: string): Promise { - const user: any = ( - await this.userService.get({ - where: { idNot: id }, - include: { - role: { include: { role_has_rules: { include: { rule: true } }, office_role_has_rules: { include: { rule: true } } } }, - office_membership: true, - }, - }) - )[0]; + public async getUserJwtPayload(id: string, providerName: PROVIDER_OPENID = PROVIDER_OPENID.idNot): Promise { + const user = await this.userService.getByProvider(providerName, id); - if (!user) throw new Error("User not found"); + if (!user) return null; - let rules: string[] = []; - if (user.role.office_role_has_rules.length) { - user.role.office_role_has_rules.forEach((relation: any) => { - if (relation.office_uid === user.office_membership.uid) rules.push(relation.rule.name); + const rules: string[] = []; + if (user.office_role) { + user.office_role.rules.forEach((rule) => { + rules.push(rule.name); }); - return { uid: user.uid, idNot: user.idNot, office_idNot: user.office_membership.idNot, role: user.role.name, rules: rules }; + return { + userId: user.uid, + openId: { providerName: providerName, userId: user.idNot }, + office_IdNot_Id: user.office_membership.idNot, + role: user.role.name, + rules: rules, + }; } - if (!rules.length) { - user.role.role_has_rules.forEach((relation: any) => { - rules.push(relation.rule.name); - }); - } - return { uid: user.uid, idNot: user.idNot, office_idNot: user.office_membership.idNot, role: user.role.name, rules: rules }; + + user.role.rules.forEach((rule) => { + rules.push(rule.name); + }); + return { + userId: user.uid, + openId: { providerName: providerName, userId: user.idNot }, + office_IdNot_Id: user.office_membership.idNot, + role: user.role.name, + rules: rules, + }; } public generateAccessToken(user: any): string { diff --git a/src/services/common/ContactsService/ContactsService.ts b/src/services/common/ContactsService/ContactsService.ts deleted file mode 100644 index 116c9cbe..00000000 --- a/src/services/common/ContactsService/ContactsService.ts +++ /dev/null @@ -1,27 +0,0 @@ -import ContactsRepository from "@Repositories/ContactsRepository"; -import BaseService from "@Services/BaseService"; -import { Contacts } from "@prisma/client"; -import { Service } from "typedi"; - -@Service() -export default class ContactsService extends BaseService { - constructor(private contactRepository: ContactsRepository) { - super(); - } - - /** - * @description : Get all contacts - * @throws {Error} If contacts cannot be get - */ - public async get(query: any): Promise { - return this.contactRepository.findMany(query); - } - - /** - * @description : Get a contact by uid - * @throws {Error} If contact cannot be get - */ - public async getByUid(uid: string): Promise { - return this.contactRepository.findOneByUid(uid); - } -} diff --git a/src/services/common/FilesService/FilesService.ts b/src/services/common/FilesService/FilesService.ts index 78cf9588..6118a4eb 100644 --- a/src/services/common/FilesService/FilesService.ts +++ b/src/services/common/FilesService/FilesService.ts @@ -72,7 +72,8 @@ export default class FilesService extends BaseService { * @throws {Error} If file cannot be modified */ public async update(uid: string, file: File): Promise { - return this.filesRepository.update(uid, file); + const key = v4(); + return this.filesRepository.update(uid, file, key); } /** diff --git a/src/services/common/OpenIdService/OpenIdService.ts b/src/services/common/OpenIdService/OpenIdService.ts new file mode 100644 index 00000000..c6785c83 --- /dev/null +++ b/src/services/common/OpenIdService/OpenIdService.ts @@ -0,0 +1,55 @@ +import jwt from "jsonwebtoken"; +import BaseService from "@Services/BaseService"; +import { Service } from "typedi"; + +export type Tokens = { + access_token: string; + expires_in: number; + id_token: string; + token_type: string; +}; + +export type OpenIdConfig = { + authorization_endpoint: string; + token_endpoint: string; + userinfo_endpoint: string; + claims_supported: string[]; + end_session_endpoint: string; + grant_types_supported: string[]; + response_types_supported: string[]; + scopes_supported: string[]; + issuer: string; + jwks_uri: string; +} + +@Service() +export default class OpenIdService extends BaseService { + protected authorizationServerUrl: string; + constructor(authorizationServerUrl: string) { + super(); + this.authorizationServerUrl = authorizationServerUrl; + } + + public async getOpenIdConfig(): Promise { + const response = await fetch(this.authorizationServerUrl + "/.well-known/openid-configuration"); + return await response.json(); + } + + public async getSigningKey(kid: string): Promise { + const jwksUri = (await this.getOpenIdConfig()).jwks_uri; + const response = await fetch(jwksUri); + const jwks = await response.json(); + const signingKey = jwks.keys.find((key: any) => key.kid === kid); + if (!signingKey) return null; + return signingKey; + } + + /** + * @throws Error + */ + public async verifyIdToken(idToken: string, kid: string) { + const signingKey = await this.getSigningKey(kid); + if (!signingKey) throw new Error("Signing key not found"); + return jwt.verify(idToken, signingKey); + } +} diff --git a/src/services/customer/DocumentsService/DocumentsService.ts b/src/services/customer/DocumentsService/DocumentsService.ts index e8aeec5e..e04a1864 100644 --- a/src/services/customer/DocumentsService/DocumentsService.ts +++ b/src/services/customer/DocumentsService/DocumentsService.ts @@ -1,4 +1,4 @@ -import { Documents, Prisma } from "@prisma/client"; +import { Documents } from "@prisma/client"; import { Document } from "le-coffre-resources/dist/Customer"; import DocumentsRepository from "@Repositories/DocumentsRepository"; import BaseService from "@Services/BaseService"; @@ -30,7 +30,7 @@ export default class DocumentsService extends BaseService { * @description : Create new documents * @throws {Error} If documents or one of them cannot be created */ - public async createMany(documents: Document[]): Promise { + public async createMany(documents: Document[]): Promise { return this.documentsRepository.createMany(documents); } diff --git a/src/services/super-admin/DocumentsService/DocumentsService.ts b/src/services/super-admin/DocumentsService/DocumentsService.ts index bf7a421b..5310e5bb 100644 --- a/src/services/super-admin/DocumentsService/DocumentsService.ts +++ b/src/services/super-admin/DocumentsService/DocumentsService.ts @@ -1,4 +1,4 @@ -import { Documents, Prisma } from "@prisma/client"; +import { Documents } from "@prisma/client"; import { Document } from "le-coffre-resources/dist/SuperAdmin"; import DocumentsRepository from "@Repositories/DocumentsRepository"; import BaseService from "@Services/BaseService"; @@ -30,7 +30,7 @@ export default class DocumentsService extends BaseService { * @description : Create new documents * @throws {Error} If documents or one of them cannot be created */ - public async createMany(documents: Document[]): Promise { + public async createMany(documents: Document[]): Promise { return this.documentsRepository.createMany(documents); } diff --git a/src/services/super-admin/OfficeFoldersService/OfficeFoldersService.ts b/src/services/super-admin/OfficeFoldersService/OfficeFoldersService.ts index 91fd7113..6de0e5dc 100644 --- a/src/services/super-admin/OfficeFoldersService/OfficeFoldersService.ts +++ b/src/services/super-admin/OfficeFoldersService/OfficeFoldersService.ts @@ -59,11 +59,11 @@ export default class OfficeFoldersService extends BaseService { * @throws {Error} If document cannot be deleted */ public async delete(uid: string): Promise { - const officeFolderEntity = await this.officeFoldersRepository.findOneByUid(uid, { office_folder_has_customers: true }); + const officeFolderEntity = await this.officeFoldersRepository.findOneByUid(uid, { customers: true }); if(!officeFolderEntity) throw new Error('office folder not found'); const officeFolder = OfficeFolder.hydrate(officeFolderEntity, { strategy: "excludeAll" }); - if (officeFolder.office_folder_has_customers && officeFolder.office_folder_has_customers.length !== 0) { + if (officeFolder.customers?.length) { throw new Error("This folder is used by customers"); } return this.officeFoldersRepository.delete(uid); diff --git a/src/services/super-admin/OfficeRolesService/OfficeRolesService.ts b/src/services/super-admin/OfficeRolesService/OfficeRolesService.ts new file mode 100644 index 00000000..e50ac7e4 --- /dev/null +++ b/src/services/super-admin/OfficeRolesService/OfficeRolesService.ts @@ -0,0 +1,44 @@ +import BaseService from "@Services/BaseService"; +import { Service } from "typedi"; +import OfficeRolesRepository from "@Repositories/OfficeRolesRepository"; +import { OfficeRole } from "le-coffre-resources/dist/SuperAdmin"; +import {Prisma, OfficeRoles } from "@prisma/client"; + +@Service() +export default class OfficeRolesService extends BaseService { + constructor(private officeRoleRepository: OfficeRolesRepository) { + super(); + } + + /** + * @description : Get all officeRoles + * @throws {Error} If officeRoles cannot be get + */ + public get(query: Prisma.OfficeRolesFindManyArgs): Promise { + return this.officeRoleRepository.findMany(query); + } + + /** + * @description : Create a officeRole + * @throws {Error} If officeRole couldn't be created + */ + public create(officeRoleEntity: OfficeRole): Promise { + return this.officeRoleRepository.create(officeRoleEntity); + } + + /** + * @description : Modify a officeRole + * @throws {Error} If officeRole modification failed + */ + public update(officeRoleEntity: OfficeRole): Promise { + return this.officeRoleRepository.update(officeRoleEntity); + } + + /** + * @description : Get a officeRole by uid + * @throws {Error} If officeRole cannot be get by uid + */ + public getByUid(uid: string, query?: any): Promise { + return this.officeRoleRepository.findOneByUid(uid, query); + } +} diff --git a/src/services/super-admin/UsersService/UsersService.ts b/src/services/super-admin/UsersService/UsersService.ts index 7846b23d..4c2a27b3 100644 --- a/src/services/super-admin/UsersService/UsersService.ts +++ b/src/services/super-admin/UsersService/UsersService.ts @@ -15,7 +15,7 @@ export default class UsersService extends BaseService { * @description : Get all users * @throws {Error} If users cannot be get */ - public get(query: Prisma.UsersFindManyArgs): Promise { + public get(query: Prisma.UsersFindManyArgs) { return this.userRepository.findMany(query); } @@ -42,4 +42,12 @@ export default class UsersService extends BaseService { public getByUid(uid: string, query?: any): Promise { return this.userRepository.findOneByUid(uid, query); } + + /** + * @description : Get a user by uid + * @throws {Error} If user cannot be get by uid + */ + public getByProvider(providerName: string, id: string) { + return this.userRepository.findOneByProvider(providerName, id); + } } diff --git a/src/test/config/Init.ts b/src/test/config/Init.ts index a488d9a0..74721622 100644 --- a/src/test/config/Init.ts +++ b/src/test/config/Init.ts @@ -5,6 +5,7 @@ import { ECivility, ECustomerStatus, Offices, + Prisma, PrismaClient, Roles, Rules, @@ -43,23 +44,26 @@ export const initDocumentType = (documentType: DocumentType, office: Office): Pr }); }; -export const initDeedType = (deedType: DeedType, office: Office, documentTypes?: string[]): Promise => { - return prisma.deedTypes.create({ +export const initDeedType = (deedType: DeedType): Promise => { + const createArgs: Prisma.DeedTypesCreateArgs = { data: { name: deedType.name, description: deedType.description, - archived_at: null, - office_uid: office.uid!, - deed_type_has_document_types: { - createMany: { - data: documentTypes!.map((documentType) => ({ - document_type_uid: documentType, - })), - skipDuplicates: true, + office: { + connect: { + uid: deedType.office!.uid, }, }, }, - }); + }; + if (deedType.document_types) { + createArgs.data.document_types = { + connect: deedType.document_types.map((documentType) => ({ + uid: documentType.uid, + })), + }; + } + return prisma.deedTypes.create(createArgs); }; export const initCustomers = (customer: Customer): Promise => { diff --git a/src/test/config/MockedData.ts b/src/test/config/MockedData.ts index 051fe912..89292170 100644 --- a/src/test/config/MockedData.ts +++ b/src/test/config/MockedData.ts @@ -144,14 +144,7 @@ export const deedType: DeedType = { office: office, created_at: null, updated_at: null, - deed_type_has_document_types: [ - { - document_type: documentType, - deed_type: new DeedType(), - created_at: null, - updated_at: null, - }, - ], + document_types: [documentType], }; export const deedType_: DeedType = { @@ -197,34 +190,8 @@ export const officeFolder: OfficeFolder = { status: "ARCHIVED", deed: deed, office: office, - office_folder_has_customers: [ - { - customer: customer, - office_folder: new OfficeFolder(), - created_at: null, - updated_at: null, - }, - { - customer: customer_, - office_folder: new OfficeFolder(), - created_at: null, - updated_at: null, - }, - ], - office_folder_has_stakeholder: [ - { - user_stakeholder: user, - office_folder: new OfficeFolder(), - created_at: null, - updated_at: null, - }, - { - user_stakeholder: user_, - office_folder: new OfficeFolder(), - created_at: null, - updated_at: null, - }, - ], + customers: [customer, customer_], + stakeholders: [user, user_], created_at: null, updated_at: null, }; diff --git a/src/test/services/super-admin/DeedService.test.ts b/src/test/services/super-admin/DeedService.test.ts index 6e67e3fd..2628cff0 100644 --- a/src/test/services/super-admin/DeedService.test.ts +++ b/src/test/services/super-admin/DeedService.test.ts @@ -16,7 +16,7 @@ beforeAll(async () => { office.uid = (await initOffice(office)).uid; documentType.uid = (await initDocumentType(documentType, office)).uid; documentType_.uid = (await initDocumentType(documentType_, office)).uid; - deedType.uid = (await initDeedType(deedType, office, [documentType.uid])).uid; + deedType.uid = (await initDeedType(deedType)).uid; }); afterAll(async () => { @@ -46,9 +46,9 @@ describe("test create function", () => { }); it("should have by default the same document types as its deed type ", async () => { - const deedWithDocumentTypes = await prisma.deeds.findFirstOrThrow({ include: { deed_has_document_types: true } }); - expect(deedWithDocumentTypes.deed_has_document_types.length).toEqual(1); - expect(deedWithDocumentTypes.deed_has_document_types[0]?.document_type_uid).toEqual(documentType.uid); + const deedWithDocumentTypes = await prisma.deeds.findFirstOrThrow({ include: { document_types: true } }); + expect(deedWithDocumentTypes.document_types.length).toEqual(1); + expect(deedWithDocumentTypes.document_types[0]?.uid).toEqual(documentType.uid); }); it("should create a the same deed based on existing deed type", async () => { @@ -83,20 +83,7 @@ describe("test update function", () => { const deedUid = (await prisma.deeds.findFirstOrThrow({ where: { deed_type_uid: deedType.uid } })).uid; let deedToUpdate: Deed = JSON.parse(JSON.stringify(deed)); - deedToUpdate.deed_has_document_types = [ - { - document_type: documentType, - deed: new Deed(), - created_at: null, - updated_at: null, - }, - { - document_type: documentType_, - deed: new Deed(), - created_at: null, - updated_at: null, - }, - ]; + deedToUpdate.document_types = [documentType, documentType_]; await DeedServiceTest.update(deedUid, deedToUpdate); @@ -105,30 +92,17 @@ describe("test update function", () => { uid: deedUid, }, include: { - deed_has_document_types: true, + document_types: true, }, }); - expect(deedUpdated.deed_has_document_types.length).toEqual(2); + expect(deedUpdated.document_types.length).toEqual(2); }); it("should not add document types to a deed type that already has those document types ", async () => { const deedUid = (await prisma.deeds.findFirstOrThrow({ where: { deed_type_uid: deedType.uid } })).uid; let deedToUpdate: Deed = JSON.parse(JSON.stringify(deed)); - deedToUpdate.deed_has_document_types = [ - { - document_type: documentType, - deed: new Deed(), - created_at: null, - updated_at: null, - }, - { - document_type: documentType_, - deed: new Deed(), - created_at: null, - updated_at: null, - }, - ]; + deedToUpdate.document_types = [documentType, documentType_]; await DeedServiceTest.update(deedUid, deedToUpdate); @@ -137,10 +111,10 @@ describe("test update function", () => { uid: deedUid, }, include: { - deed_has_document_types: true, + document_types: true, }, }); - expect(deedUpdated.deed_has_document_types.length).toEqual(2); + expect(deedUpdated.document_types.length).toEqual(2); }); it("should delete document types from a deed", async () => { @@ -148,7 +122,7 @@ describe("test update function", () => { let deedToUpdate: Deed = JSON.parse(JSON.stringify(deed)); // set relation between deed and document types empty - deedToUpdate.deed_has_document_types = []; + deedToUpdate.document_types = []; await DeedServiceTest.update(deedUid, deedToUpdate); @@ -157,10 +131,10 @@ describe("test update function", () => { uid: deedUid, }, include: { - deed_has_document_types: true, + document_types: true, }, }); - expect(deedUpdated.deed_has_document_types.length).toEqual(0); + expect(deedUpdated.document_types.length).toEqual(0); }); }); diff --git a/src/test/services/super-admin/DeedTypesService.test.ts b/src/test/services/super-admin/DeedTypesService.test.ts index af923ad1..57ea73d9 100644 --- a/src/test/services/super-admin/DeedTypesService.test.ts +++ b/src/test/services/super-admin/DeedTypesService.test.ts @@ -188,20 +188,7 @@ describe("test update function", () => { const deedTypeUid = (await prisma.deedTypes.findFirstOrThrow({ where: { name: deedType.name, office_uid: office.uid } })).uid; let deedTypeToUpdate: DeedType = JSON.parse(JSON.stringify(deedType)); - deedTypeToUpdate.deed_type_has_document_types = [ - { - document_type: documentType, - deed_type: new DeedType(), - created_at: null, - updated_at: null, - }, - { - document_type: documentType_, - deed_type: new DeedType(), - created_at: null, - updated_at: null, - }, - ]; + deedTypeToUpdate.document_types = [documentType, documentType_]; await DeedTypeServiceTest.update(deedTypeUid, deedTypeToUpdate); @@ -210,30 +197,17 @@ describe("test update function", () => { uid: deedTypeUid, }, include: { - deed_type_has_document_types: true, + document_types: true, }, }); - expect(deedTypeUpdated.deed_type_has_document_types.length).toEqual(2); + expect(deedTypeUpdated.document_types.length).toEqual(2); }); it("should not add document types to a deed type that already has those document types ", async () => { const deedTypeUid = (await prisma.deedTypes.findFirstOrThrow({ where: { name: deedType.name, office_uid: office.uid } })).uid; let deedTypeToUpdate: DeedType = JSON.parse(JSON.stringify(deedType)); - deedTypeToUpdate.deed_type_has_document_types = [ - { - document_type: documentType, - deed_type: new DeedType(), - created_at: null, - updated_at: null, - }, - { - document_type: documentType_, - deed_type: new DeedType(), - created_at: null, - updated_at: null, - }, - ]; + deedTypeToUpdate.document_types = [documentType, documentType_]; await DeedTypeServiceTest.update(deedTypeUid, deedTypeToUpdate); @@ -242,10 +216,10 @@ describe("test update function", () => { uid: deedTypeUid, }, include: { - deed_type_has_document_types: true, + document_types: true, }, }); - expect(deedTypeUpdated.deed_type_has_document_types.length).toEqual(2); + expect(deedTypeUpdated.document_types.length).toEqual(2); }); it("should delete document types from a deed", async () => { @@ -253,7 +227,7 @@ describe("test update function", () => { let deedTypeToUpdate: DeedType = JSON.parse(JSON.stringify(deedType)); // set relation between deed and document types empty - deedTypeToUpdate.deed_type_has_document_types = []; + deedTypeToUpdate.document_types = []; await DeedTypeServiceTest.update(deedTypeUid, deedTypeToUpdate); @@ -262,10 +236,10 @@ describe("test update function", () => { uid: deedTypeUid, }, include: { - deed_type_has_document_types: true, + document_types: true, }, }); - expect(deedTypeUpdated.deed_type_has_document_types.length).toEqual(0); + expect(deedTypeUpdated.document_types.length).toEqual(0); }); }); diff --git a/src/test/services/super-admin/OfficeFolderService.test.ts b/src/test/services/super-admin/OfficeFolderService.test.ts index c0c52549..78ea6f54 100644 --- a/src/test/services/super-admin/OfficeFolderService.test.ts +++ b/src/test/services/super-admin/OfficeFolderService.test.ts @@ -1,6 +1,6 @@ import "module-alias/register"; import "reflect-metadata"; -import { OfficeFolderHasCustomers, OfficeFolderHasStakeholders, PrismaClient } from "prisma/prisma-client"; +import { PrismaClient } from "prisma/prisma-client"; import { customer, customer_, deedType, documentType, documentType_, office, officeFolder, officeFolder_, user, user_ } from "@Test/config/MockedData"; import Container from "typedi"; import OfficeFoldersRepository from "@Repositories/OfficeFoldersRepository"; @@ -18,7 +18,7 @@ beforeAll(async () => { office.uid = (await initOffice(office)).uid; documentType.uid = (await initDocumentType(documentType, office)).uid; documentType_.uid = (await initDocumentType(documentType_, office)).uid; - deedType.uid = (await initDeedType(deedType, office, [documentType.uid])).uid; + deedType.uid = (await initDeedType(deedType)).uid; user.uid = (await initUsers(user)).uid; user_.uid = (await initUsers(user_)).uid; customer.uid = (await initCustomers(customer)).uid; @@ -72,40 +72,9 @@ describe("test create function", () => { it("should contains stakeholders", async () => { const officeFolderCreated = await prisma.officeFolders.findFirstOrThrow({ - include: { office_folder_has_stakeholder: true }, + include: { stakeholders: true }, }); - const stakeholderRelation = await prisma.officeFolderHasStakeholders.findUniqueOrThrow({ - where: { - office_folder_uid_user_stakeholder_uid: { - user_stakeholder_uid: user.uid!, - office_folder_uid: officeFolderCreated.uid, - }, - }, - }); - const stakeholderRelation_ = await prisma.officeFolderHasStakeholders.findUniqueOrThrow({ - where: { - office_folder_uid_user_stakeholder_uid: { - user_stakeholder_uid: user_.uid!, - office_folder_uid: officeFolderCreated.uid, - }, - }, - }); - expect(officeFolderCreated.office_folder_has_stakeholder.length).toEqual(2); - const stakeholder: OfficeFolderHasStakeholders = { - uid: stakeholderRelation.uid, - office_folder_uid: officeFolderCreated.uid, - user_stakeholder_uid: user.uid!, - created_at: officeFolderCreated.created_at, - updated_at: officeFolderCreated.updated_at, - }; - const stakeholder_: OfficeFolderHasStakeholders = { - uid: stakeholderRelation_.uid, - office_folder_uid: officeFolderCreated.uid, - user_stakeholder_uid: user_.uid!, - created_at: officeFolderCreated.created_at, - updated_at: officeFolderCreated.updated_at, - }; - expect(officeFolderCreated.office_folder_has_stakeholder).toEqual(expect.arrayContaining([stakeholder, stakeholder_])); + expect(officeFolderCreated.stakeholders).toEqual([user, user_]); }); it("should not create a new office folder with folder number already created", async () => { @@ -131,123 +100,51 @@ describe("test create function", () => { describe("test update function", () => { it("should add customers", async () => { let officeFolderCreated = await prisma.officeFolders.findFirstOrThrow({ - include: { office_folder_has_customers: true }, + include: { customers: true }, }); - expect(officeFolderCreated.office_folder_has_customers).toEqual([]); + expect(officeFolderCreated.customers).toEqual([]); // mocked data contains the customers await OfficeFolderServiceTest.update(officeFolderCreated.uid, officeFolder); - const customerRelation = await prisma.officeFolderHasCustomers.findUniqueOrThrow({ - where: { - office_folder_uid_customer_uid: { - customer_uid: customer.uid!, - office_folder_uid: officeFolderCreated.uid, - }, - }, - }); - const customerRelation_ = await prisma.officeFolderHasCustomers.findUniqueOrThrow({ - where: { - office_folder_uid_customer_uid: { - customer_uid: customer_.uid!, - office_folder_uid: officeFolderCreated.uid, - }, - }, - }); - officeFolderCreated = await prisma.officeFolders.findFirstOrThrow({ - include: { office_folder_has_customers: true }, + include: { customers: true }, }); - expect(officeFolderCreated.office_folder_has_customers.length).toEqual(2); - const officeFolderHasCustomer: OfficeFolderHasCustomers = { - uid: customerRelation.uid, - office_folder_uid: officeFolderCreated.uid, - customer_uid: customer.uid!, - created_at: customerRelation.created_at, - updated_at: customerRelation.updated_at, - }; - const officeFolderHasCustomer_: OfficeFolderHasCustomers = { - uid: customerRelation_.uid, - office_folder_uid: officeFolderCreated.uid, - customer_uid: customer_.uid!, - created_at: customerRelation_.created_at, - updated_at: customerRelation_.updated_at, - }; - expect(officeFolderCreated.office_folder_has_customers).toEqual( - expect.arrayContaining([officeFolderHasCustomer, officeFolderHasCustomer_]), - ); + expect(officeFolderCreated.customers.length).toEqual([customer, customer_].length); }); it("should remove customers", async () => { let officeFolderCreated = await prisma.officeFolders.findFirstOrThrow({ - include: { office_folder_has_customers: true }, + include: { customers: true }, }); - expect(officeFolderCreated.office_folder_has_customers.length).toEqual(2); + expect(officeFolderCreated.customers.length).toEqual(2); let officeFolderWithLessCustomers: OfficeFolder = JSON.parse(JSON.stringify(officeFolder)); - officeFolderWithLessCustomers.office_folder_has_customers!.pop(); + officeFolderWithLessCustomers.customers!.pop(); // mocked data contains the customers await OfficeFolderServiceTest.update(officeFolderCreated.uid, officeFolderWithLessCustomers); - const customerRelation = await prisma.officeFolderHasCustomers.findUniqueOrThrow({ - where: { - office_folder_uid_customer_uid: { - customer_uid: customer.uid!, - office_folder_uid: officeFolderCreated.uid, - }, - }, - }); - - officeFolderCreated = await prisma.officeFolders.findFirstOrThrow({ - include: { office_folder_has_customers: true }, - }); - - expect(officeFolderCreated.office_folder_has_customers.length).toEqual(1); - const officeFolderHasCustomer: OfficeFolderHasCustomers = { - uid: customerRelation.uid, - office_folder_uid: officeFolderCreated.uid, - customer_uid: customer.uid!, - created_at: customerRelation.created_at, - updated_at: customerRelation.updated_at, - }; - expect(officeFolderCreated.office_folder_has_customers).toEqual([officeFolderHasCustomer]); + expect(officeFolderCreated.customers.length).toEqual([customer]); }); it("should remove stakeholders", async () => { let officeFolderCreated = await prisma.officeFolders.findFirstOrThrow({ - include: { office_folder_has_stakeholder: true }, + include: { stakeholders: true }, }); - expect(officeFolderCreated.office_folder_has_stakeholder.length).toEqual(2); + expect(officeFolderCreated.stakeholders.length).toEqual(2); let officeFolderWithLessStakeholders: OfficeFolder = JSON.parse(JSON.stringify(officeFolder)); - officeFolderWithLessStakeholders.office_folder_has_stakeholder!.pop(); + officeFolderWithLessStakeholders.stakeholders!.pop(); // mocked data contains the customers await OfficeFolderServiceTest.update(officeFolderCreated.uid, officeFolderWithLessStakeholders); - const stakeholderRelation = await prisma.officeFolderHasStakeholders.findUniqueOrThrow({ - where: { - office_folder_uid_user_stakeholder_uid: { - user_stakeholder_uid: user.uid!, - office_folder_uid: officeFolderCreated.uid, - }, - }, - }); - officeFolderCreated = await prisma.officeFolders.findFirstOrThrow({ - include: { office_folder_has_stakeholder: true }, + include: { stakeholders: true }, }); - expect(officeFolderCreated.office_folder_has_stakeholder.length).toEqual(1); - const officeFolderHasStakeholder: OfficeFolderHasStakeholders = { - uid: stakeholderRelation.uid, - office_folder_uid: officeFolderCreated.uid, - user_stakeholder_uid: user.uid!, - created_at: stakeholderRelation.created_at, - updated_at: stakeholderRelation.updated_at, - }; - expect(officeFolderCreated.office_folder_has_stakeholder).toEqual([officeFolderHasStakeholder]); + expect(officeFolderCreated.stakeholders).toEqual([user]); }); it("should archivate an office folder", async () => { const officeFolderCreated = await prisma.officeFolders.findFirstOrThrow({}); diff --git a/tsconfig.json b/tsconfig.json index b0dd3f39..88257ffd 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -69,7 +69,7 @@ "@ControllerPattern/*": [ "src/common/system/controller-pattern/*" ], - "@Test/*":[ + "@Test/*": [ "src/test/*" ], }, @@ -95,8 +95,7 @@ "include": [ "**/*.ts", "**/*.tsx", - "src/app/api/admin/UsersController.ts" -, "src/common/databases/seeders/seeder.ts" ], + ], "exclude": [ "node_modules" ]