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..7c574a83 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,7 +42,7 @@ 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); 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/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/schema.prisma b/src/common/databases/schema.prisma index fa2ad5eb..6fb4da16 100644 --- a/src/common/databases/schema.prisma +++ b/src/common/databases/schema.prisma @@ -56,6 +56,8 @@ model Users { 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) @@ -67,20 +69,20 @@ model 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[] + OfficeRoles OfficeRoles[] @@map("offices") } @@ -300,53 +302,63 @@ model DeedTypeHasDocumentTypes { } 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 +// 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") -} +// @@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 +// model OfficesRolesHasRules { +// uid String @id @unique @default(uuid()) +// office_role OfficeRoles @relation(fields: [office_role_uid], references: [uid], onDelete: Cascade) +// rule Rules @relation(fields: [rule_uid], references: [uid], onDelete: Cascade) +// office_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") -} +// @@map("office_role_has_rules") +// } enum ECivility { MALE diff --git a/src/common/databases/seeders/seeder.ts b/src/common/databases/seeders/seeder.ts index c8eb63f8..e7e2816a 100644 --- a/src/common/databases/seeders/seeder.ts +++ b/src/common/databases/seeders/seeder.ts @@ -1,599 +1,599 @@ import { - Addresses, - Contacts, - Customers, - DeedHasDocumentTypes, - DeedTypeHasDocumentTypes, - DeedTypes, - Deeds, - DocumentHistory, - DocumentTypes, - Documents, - EDocumentStatus, - EFolderStatus, - EOfficeStatus, - OfficeFolderHasCustomers, - OfficeFolders, - Offices, - Users, - ECivility, - ECustomerStatus, + // Addresses, + // Contacts, + // Customers, + // DeedHasDocumentTypes, + // DeedTypeHasDocumentTypes, + // DeedTypes, + // Deeds, + // DocumentHistory, + // DocumentTypes, + // Documents, + // EDocumentStatus, + // EFolderStatus, + // EOfficeStatus, + // OfficeFolderHasCustomers, + // OfficeFolders, + // Offices, + // Users, + // ECivility, + // ECustomerStatus, PrismaClient, - Roles, +// Roles, } from "@prisma/client"; (async () => { const prisma = new PrismaClient(); + console.log(prisma); + // 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 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 uidContact1: string = randomString(); + // const uidContact2: string = randomString(); + // const uidContact3: string = randomString(); + // const uidContact4: string = randomString(); - const uidContact1: string = randomString(); - const uidContact2: string = randomString(); - const uidContact3: string = randomString(); - const uidContact4: string = randomString(); + // const uidAddress1: string = randomString(); + // const uidAddress2: string = randomString(); + // const uidAddress3: string = randomString(); + // const uidAddress4: string = 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 uidOffice1: string = randomString(); - const uidOffice2: string = randomString(); + // const uidUser1: string = randomString(); + // const uidUser2: string = randomString(); - const uidUser1: string = randomString(); - const uidUser2: string = randomString(); + // const uidRole1: string = randomString(); + // const uidRole2: 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 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 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 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 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 uidDocumentType1: string = randomString(); - const uidDocumentType2: string = randomString(); - const uidDocumentType3: string = randomString(); + // const uidOfficeFolderHasCustomer1: string = randomString(); + // const uidOfficeFolderHasCustomer2: string = randomString(); - const uidOfficeFolderHasCustomer1: string = randomString(); - const uidOfficeFolderHasCustomer2: string = randomString(); + // const uidDeedHasDocumentType1: string = randomString(); + // const uidDeedHasDocumentType2: string = randomString(); - const uidDeedHasDocumentType1: string = randomString(); - const uidDeedHasDocumentType2: string = randomString(); + // const uidDeedTypeHasDocumentType1: string = randomString(); + // const uidDeedTypeHasDocumentType2: string = randomString(); - const uidDeedTypeHasDocumentType1: string = randomString(); - const uidDeedTypeHasDocumentType2: string = randomString(); + // const uidDocumentHistory1: string = randomString(); + // const uidDocumentHistory2: 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 existingData = await prisma.contacts.findFirst({ where: { uid: uidContact4 } }); - // if (existingData) { - // console.log("Seed data already exists. Skipping seeding process."); - // return; + + // 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, + // }, + // ]; + + // const addresses: Addresses[] = [ + // { + // uid: uidAddress1, + // address: "123 Main St", + // city: "Los Angeles", + // zip_code: 90001, + // created_at: new Date(), + // updated_at: new Date(), + // }, + // { + // uid: uidAddress2, + // address: "Rue Pierre Emillion", + // city: "Paris", + // zip_code: 75003, + // created_at: new Date(), + // updated_at: new Date(), + // }, + // { + // uid: uidAddress3, + // address: "Rue Pierre Charles", + // city: "Paris", + // zip_code: 75003, + // created_at: new Date(), + // updated_at: new Date(), + // }, + // { + // uid: uidAddress4, + // address: "Rue Pierre Pologne", + // city: "Paris", + // zip_code: 75003, + // created_at: new Date(), + // updated_at: new Date(), + // }, + // ]; + + // const contacts: Contacts[] = [ + // { + // 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(), + // 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(), + // 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(), + // birthdate: null, + // created_at: new Date(), + // updated_at: new Date(), + // civility: ECivility.FEMALE, + // }, + // ]; + + // const offices: Offices[] = [ + // { + // uid: uidOffice1, + // idNot: randomString(), + // name: "LA Office", + // crpcen: randomString(), + // address_uid: uidAddress1, + // created_at: new Date(), + // updated_at: new Date(), + // office_status: EOfficeStatus.ACTIVATED, + // }, + // { + // uid: uidOffice2, + // idNot: randomString(), + // name: "NYC Office", + // crpcen: randomString(), + // address_uid: uidAddress2, + // created_at: new Date(), + // updated_at: new Date(), + // office_status: EOfficeStatus.DESACTIVATED, + // }, + // ]; + + // 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: uidContact1, + // office_uid: uidOffice1, + // roles_uid: uidRole1, + // }, + // { + // uid: uidUser2, + // created_at: new Date(), + // updated_at: new Date(), + // idNot: randomString(), + // contact_uid: uidContact2, + // office_uid: uidOffice2, + // roles_uid: uidRole2, + // }, + // ]; + + // const officeFolders: OfficeFolders[] = [ + // { + // uid: uidOfficeFolder1, + // folder_number: "0001", + // name: "Dossier", + // 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: "Dossier", + // deed_uid: uidDeed2, + // status: EFolderStatus.LIVE, + // created_at: new Date(), + // updated_at: new Date(), + // office_uid: uidOffice2, + // description: null, + // archived_description: null, + // }, + // { + // uid: uidOfficeFolder3, + // folder_number: "0003", + // name: "Dossier", + // deed_uid: uidDeed3, + // status: EFolderStatus.LIVE, + // created_at: new Date(), + // updated_at: new Date(), + // office_uid: uidOffice2, + // description: null, + // archived_description: null, + // }, + // { + // uid: uidOfficeFolder4, + // folder_number: "0004", + // name: "Dossier", + // deed_uid: uidDeed4, + // status: EFolderStatus.ARCHIVED, + // created_at: new Date(), + // updated_at: new Date(), + // office_uid: uidOffice2, + // description: null, + // archived_description: null, + // }, + // { + // uid: uidOfficeFolder5, + // folder_number: "0005", + // name: "Dossier", + // deed_uid: uidDeed5, + // status: EFolderStatus.ARCHIVED, + // created_at: new Date(), + // updated_at: new Date(), + // office_uid: uidOffice2, + // 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 }); + // } - 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, - }, - ]; + // for (const office of offices) { + // await prisma.offices.create({ data: office }); + // } - const addresses: Addresses[] = [ - { - uid: uidAddress1, - address: "123 Main St", - city: "Los Angeles", - zip_code: 90001, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidAddress2, - address: "Rue Pierre Emillion", - city: "Paris", - zip_code: 75003, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidAddress3, - address: "Rue Pierre Charles", - city: "Paris", - zip_code: 75003, - created_at: new Date(), - updated_at: new Date(), - }, - { - uid: uidAddress4, - address: "Rue Pierre Pologne", - city: "Paris", - zip_code: 75003, - created_at: new Date(), - updated_at: new Date(), - }, - ]; + // for (const role of roles) { + // await prisma.roles.create({ data: role }); + // } - const contacts: Contacts[] = [ - { - 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(), - 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(), - 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(), - birthdate: null, - created_at: new Date(), - updated_at: new Date(), - civility: ECivility.FEMALE, - }, - ]; + // for (const user of users) { + // await prisma.users.create({ data: user }); + // } - const offices: Offices[] = [ - { - uid: uidOffice1, - idNot: randomString(), - name: "LA Office", - crpcen: randomString(), - address_uid: uidAddress1, - created_at: new Date(), - updated_at: new Date(), - office_status: EOfficeStatus.ACTIVATED, - }, - { - uid: uidOffice2, - idNot: randomString(), - name: "NYC Office", - crpcen: randomString(), - address_uid: uidAddress2, - created_at: new Date(), - updated_at: new Date(), - office_status: EOfficeStatus.DESACTIVATED, - }, - ]; + // for (const customer of customers) { + // await prisma.customers.create({ data: customer }); + // } - 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(), - } - ]; + // for (const deedType of deedTypes) { + // await prisma.deedTypes.create({ data: deedType }); + // } - const users: Users[] = [ - { - uid: uidUser1, - created_at: new Date(), - updated_at: new Date(), - idNot: randomString(), - contact_uid: uidContact1, - office_uid: uidOffice1, - roles_uid: uidRole1, - }, - { - uid: uidUser2, - created_at: new Date(), - updated_at: new Date(), - idNot: randomString(), - contact_uid: uidContact2, - office_uid: uidOffice2, - roles_uid: uidRole2, - }, - ]; + // for (const deed of deeds) { + // await prisma.deeds.create({ data: deed }); + // } + // for (const officeFolder of officeFolders) { + // await prisma.officeFolders.create({ data: officeFolder }); + // } - const officeFolders: OfficeFolders[] = [ - { - uid: uidOfficeFolder1, - folder_number: "0001", - name: "Dossier", - 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: "Dossier", - deed_uid: uidDeed2, - status: EFolderStatus.LIVE, - created_at: new Date(), - updated_at: new Date(), - office_uid: uidOffice2, - description: null, - archived_description: null, - }, - { - uid: uidOfficeFolder3, - folder_number: "0003", - name: "Dossier", - deed_uid: uidDeed3, - status: EFolderStatus.LIVE, - created_at: new Date(), - updated_at: new Date(), - office_uid: uidOffice2, - description: null, - archived_description: null, - }, - { - uid: uidOfficeFolder4, - folder_number: "0004", - name: "Dossier", - deed_uid: uidDeed4, - status: EFolderStatus.ARCHIVED, - created_at: new Date(), - updated_at: new Date(), - office_uid: uidOffice2, - description: null, - archived_description: null, - }, - { - uid: uidOfficeFolder5, - folder_number: "0005", - name: "Dossier", - deed_uid: uidDeed5, - status: EFolderStatus.ARCHIVED, - created_at: new Date(), - updated_at: new Date(), - office_uid: uidOffice2, - description: null, - archived_description: null, - }, - ]; + // for (const documentType of documentTypes) { + // await prisma.documentTypes.create({ data: documentType }); + // } - 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(), - }, - ]; + // for (const document of documents) { + // await prisma.documents.create({ data: document }); + // } - 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(), - }, - ]; + // for (const documentHistory of documentHistories) { + // await prisma.documentHistory.create({ data: documentHistory }); + // } - 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(), - }, - ]; + // for (const officeFolderHasCustomer of officeFolderHasCustomers) { + // await prisma.officeFolderHasCustomers.create({ data: officeFolderHasCustomer }); + // } - 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(), - }, - ]; + // for (const deedHasDocumentType of deedHasDocumentTypes) { + // await prisma.deedHasDocumentTypes.create({ data: deedHasDocumentType }); + // } - 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(), - }, - ]; + // for (const deedTypeHasDocumentType of deedTypeHasDocumentTypes) { + // await prisma.deedTypeHasDocumentTypes.create({ data: deedTypeHasDocumentType }); + // } - 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 }); - } - - for (const role of roles) { - await prisma.roles.create({ data: role }); - } - - 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 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 }); - } - - console.log(">MOCK DATA - Seeding completed!"); + // console.log(">MOCK DATA - Seeding completed!"); })(); diff --git a/src/common/databases/seeders/seeder2.ts b/src/common/databases/seeders/seeder2.ts index ce81192e..c16b9a91 100644 --- a/src/common/databases/seeders/seeder2.ts +++ b/src/common/databases/seeders/seeder2.ts @@ -18,9 +18,8 @@ import { ECustomerStatus, PrismaClient, Roles, - OfficesRolesHasRules, - RolesHasRules, Rules, + OfficeRoles, } from "@prisma/client"; (async () => { @@ -106,6 +105,8 @@ import { const uidRole1: string = randomString(); const uidRole2: string = randomString(); + const uidOfficeRole1: string = randomString(); + const uidOfficeRole2: string = randomString(); const uidRule1: string = randomString(); const uidRule2: string = randomString(); @@ -173,12 +174,6 @@ import { 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(); @@ -801,6 +796,21 @@ import { } ]; + 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 roles: Roles[] = [ { uid: uidRole1, @@ -816,6 +826,23 @@ import { } ]; + const officeRoles: OfficeRoles[] = [ + { + uid: uidOfficeRole1, + name: 'super-admin', + created_at: new Date(), + updated_at: new Date(), + office_uid: uidOffice1, + }, + { + uid: uidOfficeRole2, + name: 'admin', + created_at: new Date(), + updated_at: new Date(), + office_uid: uidOffice1, + } + ]; + const users: Users[] = [ { uid: uidUser1, @@ -825,6 +852,7 @@ import { contact_uid: uidContact16, office_uid: uidOffice1, roles_uid: uidRole1, + office_role_uid: uidOfficeRole1, }, { uid: uidUser2, @@ -834,6 +862,7 @@ import { contact_uid: uidContact17, office_uid: uidOffice1, roles_uid: uidRole2, + office_role_uid: uidOfficeRole2, }, { uid: uidUser3, @@ -843,6 +872,7 @@ import { contact_uid: uidContact18, office_uid: uidOffice1, roles_uid: uidRole1, + office_role_uid: null, }, { uid: uidUser4, @@ -852,6 +882,7 @@ import { contact_uid: uidContact19, office_uid: uidOffice1, roles_uid: uidRole2, + office_role_uid: null, }, { uid: uidUser5, @@ -861,6 +892,7 @@ import { contact_uid: uidContact20, office_uid: uidOffice1, roles_uid: uidRole1, + office_role_uid: null, }, ]; @@ -1700,57 +1732,6 @@ import { }, ]; - 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, @@ -1927,12 +1908,16 @@ import { await prisma.offices.create({ data: office }); } + for (const rule of rules) { + await prisma.rules.create({ data: rule }); + } + for (const role of roles) { await prisma.roles.create({ data: role }); } - for (const rule of rules) { - await prisma.rules.create({ data: rule }); + for (const officeRole of officeRoles) { + await prisma.officeRoles.create({ data: officeRole }); } for (const user of users) { @@ -1966,14 +1951,6 @@ import { 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 }); } 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/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/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/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..a197e725 --- /dev/null +++ b/src/common/repositories/OfficeRolesRepository.ts @@ -0,0 +1,98 @@ +import Database from "@Common/databases/database"; +import BaseRepository from "@Repositories/BaseRepository"; +import { Service } from "typedi"; +import { OfficeRoles, Prisma } 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: any): Promise { + 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); + } + + /** + * @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); + } + + /** + * @description : Find one officeRole + */ + public async findOneByUid(uid: string, query?: any): Promise { + const findOneArgs: Prisma.OfficeRolesFindUniqueArgs = { + where: { + uid: uid, + }, + }; + if (query) { + findOneArgs.include = query; + } + const officeRoleEntity = await this.model.findUnique(findOneArgs); + + return officeRoleEntity; + } + + /** + * @description : Delete a officeRole + */ + public async delete(uid: string): Promise { + return this.model.delete({ + where: { + uid: uid, + }, + }); + } +} 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..56e5f919 100644 --- a/src/common/repositories/RolesRepository.ts +++ b/src/common/repositories/RolesRepository.ts @@ -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); } diff --git a/src/common/repositories/UsersRepository.ts b/src/common/repositories/UsersRepository.ts index a0f14234..8767fb5a 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,6 +144,13 @@ 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 } } } }); } @@ -156,4 +170,18 @@ export default class UsersRepository extends BaseRepository { 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/services/common/AuthService/AuthService.ts b/src/services/common/AuthService/AuthService.ts index 8d497fa9..39348d51 100644 --- a/src/services/common/AuthService/AuthService.ts +++ b/src/services/common/AuthService/AuthService.ts @@ -1,17 +1,24 @@ +import "reflect-metadata"; 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 +26,25 @@ 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?.rules.length) { + user.office_role.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 }; + 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) => { + user.role.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 }; + 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/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/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); + } }