From d223a0772f90b25a377e092e20f84bed6ddfe6af Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 08:27:53 +0530 Subject: [PATCH 01/43] models and db folder created --- P1/Project Brief/entertainment-web-app/server/db/.gitkeep | 0 P1/Project Brief/entertainment-web-app/server/models/.gitkeep | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 P1/Project Brief/entertainment-web-app/server/db/.gitkeep create mode 100644 P1/Project Brief/entertainment-web-app/server/models/.gitkeep diff --git a/P1/Project Brief/entertainment-web-app/server/db/.gitkeep b/P1/Project Brief/entertainment-web-app/server/db/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/P1/Project Brief/entertainment-web-app/server/models/.gitkeep b/P1/Project Brief/entertainment-web-app/server/models/.gitkeep new file mode 100644 index 0000000..e69de29 From 34688e6aa44d286d68f79e1f215ab43a4d20641f Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 08:34:58 +0530 Subject: [PATCH 02/43] directory structure modified, .gitignore file added, nodemon devdependency added --- .../entertainment-web-app/server/.gitignore | 120 ++++++ .../server/package-lock.json | 389 ++++++++++++++++++ .../entertainment-web-app/server/package.json | 14 + .../server/{ => src}/db/.gitkeep | 0 .../server/{ => src}/models/.gitkeep | 0 5 files changed, 523 insertions(+) create mode 100644 P1/Project Brief/entertainment-web-app/server/.gitignore create mode 100644 P1/Project Brief/entertainment-web-app/server/package-lock.json create mode 100644 P1/Project Brief/entertainment-web-app/server/package.json rename P1/Project Brief/entertainment-web-app/server/{ => src}/db/.gitkeep (100%) rename P1/Project Brief/entertainment-web-app/server/{ => src}/models/.gitkeep (100%) diff --git a/P1/Project Brief/entertainment-web-app/server/.gitignore b/P1/Project Brief/entertainment-web-app/server/.gitignore new file mode 100644 index 0000000..b277f17 --- /dev/null +++ b/P1/Project Brief/entertainment-web-app/server/.gitignore @@ -0,0 +1,120 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test +.env.production + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# End of https://mrkandreev.name/snippets/gitignore-generator/#Node \ No newline at end of file diff --git a/P1/Project Brief/entertainment-web-app/server/package-lock.json b/P1/Project Brief/entertainment-web-app/server/package-lock.json new file mode 100644 index 0000000..9b46760 --- /dev/null +++ b/P1/Project Brief/entertainment-web-app/server/package-lock.json @@ -0,0 +1,389 @@ +{ + "name": "server", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "server", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "nodemon": "^3.1.3" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/nodemon": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.3.tgz", + "integrity": "sha512-m4Vqs+APdKzDFpuaL9F9EVOF85+h070FnkHVEoU4+rmT6Vw0bmNl7s61VEkY/cJkL7RCv1p4urnUDUMrS5rk2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true, + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true, + "license": "ISC", + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true, + "license": "MIT" + } + } +} diff --git a/P1/Project Brief/entertainment-web-app/server/package.json b/P1/Project Brief/entertainment-web-app/server/package.json new file mode 100644 index 0000000..570491c --- /dev/null +++ b/P1/Project Brief/entertainment-web-app/server/package.json @@ -0,0 +1,14 @@ +{ + "name": "server", + "version": "1.0.0", + "description": "server for entertainment-web-app", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Team Lakshaya", + "license": "ISC", + "devDependencies": { + "nodemon": "^3.1.3" + } +} diff --git a/P1/Project Brief/entertainment-web-app/server/db/.gitkeep b/P1/Project Brief/entertainment-web-app/server/src/db/.gitkeep similarity index 100% rename from P1/Project Brief/entertainment-web-app/server/db/.gitkeep rename to P1/Project Brief/entertainment-web-app/server/src/db/.gitkeep diff --git a/P1/Project Brief/entertainment-web-app/server/models/.gitkeep b/P1/Project Brief/entertainment-web-app/server/src/models/.gitkeep similarity index 100% rename from P1/Project Brief/entertainment-web-app/server/models/.gitkeep rename to P1/Project Brief/entertainment-web-app/server/src/models/.gitkeep From a7bfab50433a498d12be56aaa710f6b7f56be92f Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 08:38:02 +0530 Subject: [PATCH 03/43] local developer notes file added --- P1/Project Brief/entertainment-web-app/server/.gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/P1/Project Brief/entertainment-web-app/server/.gitignore b/P1/Project Brief/entertainment-web-app/server/.gitignore index b277f17..ded0722 100644 --- a/P1/Project Brief/entertainment-web-app/server/.gitignore +++ b/P1/Project Brief/entertainment-web-app/server/.gitignore @@ -1,3 +1,6 @@ +# local developer notes +notes.js + # Logs logs *.log From 6e7042bcb5b16db10fbb5d0b9f6ee101be71ed21 Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 08:39:17 +0530 Subject: [PATCH 04/43] developer notes file modified --- P1/Project Brief/entertainment-web-app/server/.gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/P1/Project Brief/entertainment-web-app/server/.gitignore b/P1/Project Brief/entertainment-web-app/server/.gitignore index ded0722..2a44da2 100644 --- a/P1/Project Brief/entertainment-web-app/server/.gitignore +++ b/P1/Project Brief/entertainment-web-app/server/.gitignore @@ -1,5 +1,5 @@ # local developer notes -notes.js +notes.md # Logs logs From 9c889f104624d02ef585bcf8dc95f2eac69f2d7c Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 08:49:44 +0530 Subject: [PATCH 05/43] prettier devdependency added, prettier configuration done, .prettierignore file added --- .../entertainment-web-app/server/.prettierrc | 8 ++++++++ .../server/package-lock.json | 19 ++++++++++++++++++- .../entertainment-web-app/server/package.json | 3 ++- 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 P1/Project Brief/entertainment-web-app/server/.prettierrc diff --git a/P1/Project Brief/entertainment-web-app/server/.prettierrc b/P1/Project Brief/entertainment-web-app/server/.prettierrc new file mode 100644 index 0000000..c697212 --- /dev/null +++ b/P1/Project Brief/entertainment-web-app/server/.prettierrc @@ -0,0 +1,8 @@ +{ + "useTabs": true , + "tabWidth": 4 , + "semi": true , + "bracketSpacing": true , + "singleQuote": true , + "trailingComma":"es5" +} \ No newline at end of file diff --git a/P1/Project Brief/entertainment-web-app/server/package-lock.json b/P1/Project Brief/entertainment-web-app/server/package-lock.json index 9b46760..713dfdc 100644 --- a/P1/Project Brief/entertainment-web-app/server/package-lock.json +++ b/P1/Project Brief/entertainment-web-app/server/package-lock.json @@ -9,7 +9,8 @@ "version": "1.0.0", "license": "ISC", "devDependencies": { - "nodemon": "^3.1.3" + "nodemon": "^3.1.3", + "prettier": "^3.3.2" } }, "node_modules/anymatch": { @@ -296,6 +297,22 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/prettier": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", diff --git a/P1/Project Brief/entertainment-web-app/server/package.json b/P1/Project Brief/entertainment-web-app/server/package.json index 570491c..c409591 100644 --- a/P1/Project Brief/entertainment-web-app/server/package.json +++ b/P1/Project Brief/entertainment-web-app/server/package.json @@ -9,6 +9,7 @@ "author": "Team Lakshaya", "license": "ISC", "devDependencies": { - "nodemon": "^3.1.3" + "nodemon": "^3.1.3", + "prettier": "^3.3.2" } } From 72d3d7c89b74b4a5852d27e5bbeca683e9378976 Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 08:56:23 +0530 Subject: [PATCH 06/43] express, dotenv, mongoose dependencies added, scripts changed, dev command added and Changed the type field in package.json to module to use ES modules instead of CommonJS. This will enable the use of import/export statements throughout the project and align with modern JavaScript standards. --- .../server/package-lock.json | 1017 ++++++++++++++++- .../entertainment-web-app/server/package.json | 8 +- .../entertainment-web-app/server/src/index.js | 0 3 files changed, 1022 insertions(+), 3 deletions(-) create mode 100644 P1/Project Brief/entertainment-web-app/server/src/index.js diff --git a/P1/Project Brief/entertainment-web-app/server/package-lock.json b/P1/Project Brief/entertainment-web-app/server/package-lock.json index 713dfdc..2d14aa5 100644 --- a/P1/Project Brief/entertainment-web-app/server/package-lock.json +++ b/P1/Project Brief/entertainment-web-app/server/package-lock.json @@ -8,11 +8,53 @@ "name": "server", "version": "1.0.0", "license": "ISC", + "dependencies": { + "dotenv": "^16.4.5", + "express": "^4.19.2", + "mongoose": "^8.4.3" + }, "devDependencies": { "nodemon": "^3.1.3", "prettier": "^3.3.2" } }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz", + "integrity": "sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q==", + "license": "MIT", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", + "license": "MIT" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "license": "MIT", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -27,6 +69,12 @@ "node": ">= 8" } }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -47,6 +95,45 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -71,6 +158,43 @@ "node": ">=8" } }, + "node_modules/bson": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.7.0.tgz", + "integrity": "sha512-w2IquM5mYzYZv6rs3uN2DZTOBe2a0zXLj53TGDqwF4l6Sz/XsISrisXOJihArF9+BZ6Cq/GjVht7Sjfmri7ytQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -103,11 +227,46 @@ "dev": true, "license": "MIT" }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, "node_modules/debug": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dev": true, "license": "MIT", "dependencies": { "ms": "2.1.2" @@ -121,6 +280,162 @@ } } }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -134,6 +449,57 @@ "node": ">=8" } }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -149,6 +515,34 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -162,6 +556,18 @@ "node": ">= 6" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -172,6 +578,82 @@ "node": ">=4" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", @@ -179,6 +661,21 @@ "dev": true, "license": "ISC" }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -225,6 +722,78 @@ "node": ">=0.12.0" } }, + "node_modules/kareem": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", + "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "license": "MIT" + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "license": "MIT" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -238,13 +807,126 @@ "node": "*" } }, + "node_modules/mongodb": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.6.2.tgz", + "integrity": "sha512-ZF9Ugo2JCG/GfR7DEb4ypfyJJyiKbg5qBYKRintebj8+DNS33CyGMkWbrS9lara+u+h+yEOGSRiLhFO/g1s1aw==", + "license": "Apache-2.0", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.5", + "bson": "^6.7.0", + "mongodb-connection-string-url": "^3.0.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", + "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", + "license": "Apache-2.0", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^13.0.0" + } + }, + "node_modules/mongoose": { + "version": "8.4.3", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.4.3.tgz", + "integrity": "sha512-GxPVLD+I/dxVkgcts2r2QmJJvS62/++btVj3RFt8YnHt+DSOp1Qjj62YEvgZaElwIOTcc4KGJM95X5LlrU1qQg==", + "license": "MIT", + "dependencies": { + "bson": "^6.7.0", + "kareem": "2.6.3", + "mongodb": "6.6.2", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "17.1.3" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "license": "MIT", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, "license": "MIT" }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/nodemon": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.3.tgz", @@ -284,6 +966,42 @@ "node": ">=0.10.0" } }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "license": "MIT" + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -313,6 +1031,19 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", @@ -320,6 +1051,54 @@ "dev": true, "license": "MIT" }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -333,6 +1112,32 @@ "node": ">=8.10.0" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, "node_modules/semver": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", @@ -346,6 +1151,113 @@ "node": ">=10" } }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sift": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", + "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==", + "license": "MIT" + }, "node_modules/simple-update-notifier": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", @@ -359,6 +1271,24 @@ "node": ">=10" } }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "license": "MIT", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -385,6 +1315,15 @@ "node": ">=8.0" } }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, "node_modules/touch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", @@ -395,12 +1334,86 @@ "nodetouch": "bin/nodetouch.js" } }, + "node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true, "license": "MIT" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", + "license": "MIT", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=16" + } } } } diff --git a/P1/Project Brief/entertainment-web-app/server/package.json b/P1/Project Brief/entertainment-web-app/server/package.json index c409591..3640af6 100644 --- a/P1/Project Brief/entertainment-web-app/server/package.json +++ b/P1/Project Brief/entertainment-web-app/server/package.json @@ -3,13 +3,19 @@ "version": "1.0.0", "description": "server for entertainment-web-app", "main": "index.js", + "type" : "module", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "dev": "nodemon src/index.js" }, "author": "Team Lakshaya", "license": "ISC", "devDependencies": { "nodemon": "^3.1.3", "prettier": "^3.3.2" + }, + "dependencies": { + "dotenv": "^16.4.5", + "express": "^4.19.2", + "mongoose": "^8.4.3" } } diff --git a/P1/Project Brief/entertainment-web-app/server/src/index.js b/P1/Project Brief/entertainment-web-app/server/src/index.js new file mode 100644 index 0000000..e69de29 From 1778c1c13bda2b44079d1398ff766e3096e06986 Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 09:12:57 +0530 Subject: [PATCH 07/43] chore: update Prettier configuration and adjust .gitignore- Modified .prettierrc to update Prettier settings for better code formatting.- Removed .prettierignore from .gitignore to ensure it is tracked in the repository.This update ensures consistent formatting rules across the project and tracks the .prettierignore file for better collaboration. --- .../entertainment-web-app/server/.prettierignore | 7 +++++++ P1/Project Brief/entertainment-web-app/server/.prettierrc | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 P1/Project Brief/entertainment-web-app/server/.prettierignore diff --git a/P1/Project Brief/entertainment-web-app/server/.prettierignore b/P1/Project Brief/entertainment-web-app/server/.prettierignore new file mode 100644 index 0000000..7a282ac --- /dev/null +++ b/P1/Project Brief/entertainment-web-app/server/.prettierignore @@ -0,0 +1,7 @@ +/.vscode +/node_modules +./dist + +*.env +.env +.env.* \ No newline at end of file diff --git a/P1/Project Brief/entertainment-web-app/server/.prettierrc b/P1/Project Brief/entertainment-web-app/server/.prettierrc index c697212..5e4b421 100644 --- a/P1/Project Brief/entertainment-web-app/server/.prettierrc +++ b/P1/Project Brief/entertainment-web-app/server/.prettierrc @@ -4,5 +4,5 @@ "semi": true , "bracketSpacing": true , "singleQuote": true , - "trailingComma":"es5" + "trailingComma":"es5" } \ No newline at end of file From 114e715c98ed9444cf869ac2f000628f788aa11f Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 09:19:17 +0530 Subject: [PATCH 08/43] feat: add initial project files --- P1/Project Brief/entertainment-web-app/server/src/app.js | 0 P1/Project Brief/entertainment-web-app/server/src/constants.js | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 P1/Project Brief/entertainment-web-app/server/src/app.js create mode 100644 P1/Project Brief/entertainment-web-app/server/src/constants.js diff --git a/P1/Project Brief/entertainment-web-app/server/src/app.js b/P1/Project Brief/entertainment-web-app/server/src/app.js new file mode 100644 index 0000000..e69de29 diff --git a/P1/Project Brief/entertainment-web-app/server/src/constants.js b/P1/Project Brief/entertainment-web-app/server/src/constants.js new file mode 100644 index 0000000..e69de29 From 32101ab99271ac006203e98a616a12bfc00a69c4 Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 09:20:54 +0530 Subject: [PATCH 09/43] removed .prettier.ignore file from .gitignore file --- P1/Project Brief/entertainment-web-app/.gitignore | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/P1/Project Brief/entertainment-web-app/.gitignore b/P1/Project Brief/entertainment-web-app/.gitignore index d13464a..f3459aa 100644 --- a/P1/Project Brief/entertainment-web-app/.gitignore +++ b/P1/Project Brief/entertainment-web-app/.gitignore @@ -12,5 +12,4 @@ *.xd # Avoid your project being littered with annoying .DS_Store files! -.DS_Store -.prettierignore \ No newline at end of file +.DS_Store \ No newline at end of file From 98b1dd2be180b962f4f75c3db5cabfd31f62376d Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 09:41:12 +0530 Subject: [PATCH 10/43] user schema initialsed, movies schema initialised --- .../entertainment-web-app/server/src/models/.gitkeep | 0 .../entertainment-web-app/server/src/models/movie.model.js | 7 +++++++ .../entertainment-web-app/server/src/models/user.model.js | 7 +++++++ 3 files changed, 14 insertions(+) delete mode 100644 P1/Project Brief/entertainment-web-app/server/src/models/.gitkeep create mode 100644 P1/Project Brief/entertainment-web-app/server/src/models/movie.model.js create mode 100644 P1/Project Brief/entertainment-web-app/server/src/models/user.model.js diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/.gitkeep b/P1/Project Brief/entertainment-web-app/server/src/models/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/movie.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/movie.model.js new file mode 100644 index 0000000..7f079c4 --- /dev/null +++ b/P1/Project Brief/entertainment-web-app/server/src/models/movie.model.js @@ -0,0 +1,7 @@ +import mongoose , { Schema } from "mongoose" ; + +const movieSchema = new Schema({ + +} , { timestamps : true } ) ; + +export const Movie = mongoose.model('Movie' , movieSchema ) ; \ No newline at end of file diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/user.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/user.model.js new file mode 100644 index 0000000..7f3a5dd --- /dev/null +++ b/P1/Project Brief/entertainment-web-app/server/src/models/user.model.js @@ -0,0 +1,7 @@ +import mongoose , {Schema} from "mongoose" ; + +const UserSchema = new Schema({ + +} , {timestamps : true} ) ; + +export const User = mongoose.model('User' , UserSchema) ; \ No newline at end of file From 49c7a2a8dc0c5f197b66beaa3aef15077118945c Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 10:08:19 +0530 Subject: [PATCH 11/43] schema documentation started, eraser.io link added --- .../entertainment-web-app/server/src/models/Readme.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 P1/Project Brief/entertainment-web-app/server/src/models/Readme.md diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/Readme.md b/P1/Project Brief/entertainment-web-app/server/src/models/Readme.md new file mode 100644 index 0000000..9b272e8 --- /dev/null +++ b/P1/Project Brief/entertainment-web-app/server/src/models/Readme.md @@ -0,0 +1,3 @@ +# Schema Documentation +- Model link - [Do checkout and edit](https://app.eraser.io/workspace/rPYaoaqlntkQMFml7Rjz?origin=share) + From 49b2743733c6f39712f371fb78e50d93460080b9 Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 11:35:31 +0530 Subject: [PATCH 12/43] schema documentation updated, user schema, movie schema and shows schema added --- .../server/src/models/Readme.md | 9 +++++++++ .../server/src/models/assets/movie.model.png | Bin 0 -> 25134 bytes .../server/src/models/assets/shows.model.png | Bin 0 -> 24046 bytes .../server/src/models/assets/user.model.png | Bin 0 -> 35576 bytes 4 files changed, 9 insertions(+) create mode 100644 P1/Project Brief/entertainment-web-app/server/src/models/assets/movie.model.png create mode 100644 P1/Project Brief/entertainment-web-app/server/src/models/assets/shows.model.png create mode 100644 P1/Project Brief/entertainment-web-app/server/src/models/assets/user.model.png diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/Readme.md b/P1/Project Brief/entertainment-web-app/server/src/models/Readme.md index 9b272e8..10f4d9e 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/models/Readme.md +++ b/P1/Project Brief/entertainment-web-app/server/src/models/Readme.md @@ -1,3 +1,12 @@ # Schema Documentation - Model link - [Do checkout and edit](https://app.eraser.io/workspace/rPYaoaqlntkQMFml7Rjz?origin=share) + +### USER SCHEMA +![user.model](assets/user.model.png) + +### MOVIE SCHEMA +![movie.model](assets/movie.model.png) + +### SHOWS SCHEMA +![shows.model](assets/shows.model.png) \ No newline at end of file diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/assets/movie.model.png b/P1/Project Brief/entertainment-web-app/server/src/models/assets/movie.model.png new file mode 100644 index 0000000000000000000000000000000000000000..8daab2d7c5bae512e96aada394a04a6790f2962f GIT binary patch literal 25134 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 P`vYZp4Y?{AtKk0yXN|l= literal 0 HcmV?d00001 diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/assets/user.model.png b/P1/Project Brief/entertainment-web-app/server/src/models/assets/user.model.png new file mode 100644 index 0000000000000000000000000000000000000000..1590ba71403f1a9c48053c6ce8d658bbe19b9ed2 GIT binary patch literal 35576 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 YiyyHv+s7V;7~nrmRb7=zB}>Hr0l2YLumAu6 literal 0 HcmV?d00001 From 7b4cd8ba46606b90d463ccfdceb5f0c498b70788 Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 13:25:46 +0530 Subject: [PATCH 13/43] user and movie schema added, new schema models added- shows, subscription, likes, comments, reviews, watchlist --- .../server/src/models/comments.model.js | 0 .../server/src/models/likes.model.js | 0 .../server/src/models/movie.model.js | 68 ++++++++++++++++++- .../server/src/models/reviews.model.js | 0 .../server/src/models/shows.model.js | 0 .../server/src/models/subscription.model.js | 0 .../server/src/models/user.model.js | 55 +++++++++++++-- .../server/src/models/watchlist.model.js | 0 8 files changed, 117 insertions(+), 6 deletions(-) create mode 100644 P1/Project Brief/entertainment-web-app/server/src/models/comments.model.js create mode 100644 P1/Project Brief/entertainment-web-app/server/src/models/likes.model.js create mode 100644 P1/Project Brief/entertainment-web-app/server/src/models/reviews.model.js create mode 100644 P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js create mode 100644 P1/Project Brief/entertainment-web-app/server/src/models/subscription.model.js create mode 100644 P1/Project Brief/entertainment-web-app/server/src/models/watchlist.model.js diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/comments.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/comments.model.js new file mode 100644 index 0000000..e69de29 diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/likes.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/likes.model.js new file mode 100644 index 0000000..e69de29 diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/movie.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/movie.model.js index 7f079c4..1cba8ea 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/models/movie.model.js +++ b/P1/Project Brief/entertainment-web-app/server/src/models/movie.model.js @@ -1,7 +1,73 @@ import mongoose , { Schema } from "mongoose" ; const movieSchema = new Schema({ - + title : { + type : String , + required : true , + index : true , + }, + description : { + type : String , + required : true , + } , + genre : { + type : String , + enum : [ "Horror" , "Sports" , "Medical" , "Crime" , "Thriller" , "Pyschological" ] + } , + director : { + type : String , + required : true , + } , + producer : { + type : String , + required : true , + } , + studio : { + type : String , + required : true , + }, + artists : { + type : [ String ] , + } , + videoFile : { + type : String , + required : true , + } , + rated : { + type : String , + enum : [ "U" , "A" , "R" ] , + } , + reviews : [ + { + type : Schema.Types.ObjectId , + ref : "Review" + } + ] , + year : { + type : Number , + required : true , + } , + audioLanguages : { + type : String , + enum : [ "English" , "Hindi" , "Bengali" , "Maithli" ] + } , + subtitles : { + type : String , + enum : [ "English" , "Hindi" , "French" , "Tamil" ] + } , + contentAdvisory : { + type : [ String ] + } , + likes : { + type : Schema.Types.ObjectId , + ref : "Like" + } , + comments : [ + { + type : Schema.Types.ObjectId , + ref : "Comment" + } + ] } , { timestamps : true } ) ; export const Movie = mongoose.model('Movie' , movieSchema ) ; \ No newline at end of file diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/reviews.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/reviews.model.js new file mode 100644 index 0000000..e69de29 diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js new file mode 100644 index 0000000..e69de29 diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/subscription.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/subscription.model.js new file mode 100644 index 0000000..e69de29 diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/user.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/user.model.js index 7f3a5dd..ba554e9 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/models/user.model.js +++ b/P1/Project Brief/entertainment-web-app/server/src/models/user.model.js @@ -1,7 +1,52 @@ -import mongoose , {Schema} from "mongoose" ; +import mongoose, { Schema } from 'mongoose'; -const UserSchema = new Schema({ - -} , {timestamps : true} ) ; +const mediaSchema = new Schema({ + show: { + type: mongoose.Schema.Types.ObjectId, + ref: 'Shows', + }, + movie: { + type: mongoose.Schema.Types.ObjectId, + ref: 'Movie', + }, +}); +const UserSchema = new Schema( + { + username: { + type: String, + required: true, + unique: true, + index: true, + lowercase: true, + }, + fullName: { + type: String, + }, + password: { + type: String, + required: true, + unique: true, + }, + watchHistory: { + type: [mediaSchema], + }, + subscriptions: [ + { + type: mongoose.Schema.Types.ObjectId, + ref: 'Subscription', + }, + ], + watchList: { + type: [mediaSchema], + }, + avatar: { + type: String, + }, + refreshTokens: { + type: String, + }, + }, + { timestamps: true } +); -export const User = mongoose.model('User' , UserSchema) ; \ No newline at end of file +export const User = mongoose.model('User', UserSchema); diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/watchlist.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/watchlist.model.js new file mode 100644 index 0000000..e69de29 From ed0596f22d5badad9a82495f8ad4f1dc62dcdc75 Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 13:31:40 +0530 Subject: [PATCH 14/43] new field added to movie schema --- .../entertainment-web-app/server/src/models/movie.model.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/movie.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/movie.model.js index 1cba8ea..d1fc0c8 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/models/movie.model.js +++ b/P1/Project Brief/entertainment-web-app/server/src/models/movie.model.js @@ -67,7 +67,10 @@ const movieSchema = new Schema({ type : Schema.Types.ObjectId , ref : "Comment" } - ] + ] , + duration : { + type : Number, + } } , { timestamps : true } ) ; export const Movie = mongoose.model('Movie' , movieSchema ) ; \ No newline at end of file From dcd11a6934e065499a1b3b3c45f29faf04bf6cf0 Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 13:40:14 +0530 Subject: [PATCH 15/43] shows schema added --- .../server/src/models/shows.model.js | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js index e69de29..4b1011e 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js +++ b/P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js @@ -0,0 +1,92 @@ +import mongoose, { Schema } from 'mongoose'; + +const showSchema = new Schema( + { + title: { + type: String, + required: true, + index: true, + }, + description: { + type: String, + required: true, + }, + genre: { + type: String, + enum: [ + 'Horror', + 'Sports', + 'Medical', + 'Crime', + 'Thriller', + 'Pyschological', + ], + }, + director: { + type: String, + required: true, + }, + producer: { + type: String, + required: true, + }, + studio: { + type: String, + required: true, + }, + artists: { + type: [String], + }, + videoFiles: [ + { + type: String, + required: true, + }, + ], + rated: { + type: String, + enum: ['U', 'A', 'R'], + }, + reviews: [ + { + type: Schema.Types.ObjectId, + ref: 'Review', + }, + ], + year: { + type: Number, + required: true, + }, + audioLanguages: { + type: String, + enum: ['English', 'Hindi', 'Bengali', 'Maithli'], + }, + subtitles: { + type: String, + enum: ['English', 'Hindi', 'French', 'Tamil'], + }, + contentAdvisory: { + type: [String], + }, + likes: { + type: Schema.Types.ObjectId, + ref: 'Like', + }, + comments: [ + { + type: Schema.Types.ObjectId, + ref: 'Comment', + }, + ], + duration: { + type: Number, + }, + episodes: { + type: Schema.Types.ObjectId, + ref: 'Episode', + }, + }, + { timestamps: true } +); + +export const Show = mongoose.model('Show', showSchema); From 54d6e62754b2454289b7acf708e4cb292f9a923b Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 13:50:02 +0530 Subject: [PATCH 16/43] episode schema created, shows schema modified --- .../server/src/models/episodes.model.js | 18 ++++++++++++++++++ .../server/src/models/shows.model.js | 10 ++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 P1/Project Brief/entertainment-web-app/server/src/models/episodes.model.js diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/episodes.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/episodes.model.js new file mode 100644 index 0000000..3db1bb2 --- /dev/null +++ b/P1/Project Brief/entertainment-web-app/server/src/models/episodes.model.js @@ -0,0 +1,18 @@ +import mongoose , { Schema } from 'mongoose' ; + +const episodeSchema = new Schema( { + name : { + type : String , + required : true , + } , + description : { + type : String , + required : true , + } , + duration : { + type : Number , + required : true , + } +} , { timestamps : true } ) ; + +export const Episode = mongoose.model( "Episode" , episodeSchema ) ; \ No newline at end of file diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js index 4b1011e..809d7fc 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js +++ b/P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js @@ -81,10 +81,12 @@ const showSchema = new Schema( duration: { type: Number, }, - episodes: { - type: Schema.Types.ObjectId, - ref: 'Episode', - }, + episodes: [ + { + type: Schema.Types.ObjectId, + ref: 'Episode', + }, + ], }, { timestamps: true } ); From 7ce005867ef97255bb766bf078bc6af986cfcdd3 Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 13:53:25 +0530 Subject: [PATCH 17/43] comment schema added --- .../server/src/models/comments.model.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/comments.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/comments.model.js index e69de29..d0f2c5b 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/models/comments.model.js +++ b/P1/Project Brief/entertainment-web-app/server/src/models/comments.model.js @@ -0,0 +1,18 @@ +import mongoose, { Schema } from 'mongoose'; + +const commentSchema = new Schema( { + content : { + type : String , + required : true , + } , + media : { + type : Schema.Types.ObjectId , + ref : "Media" , + } , + owner : { + type : Schema.Types.ObjectId , + ref : "User" , + } +} , { timestamps : true } ) ; + +export const Comment = mongoose.model( "Comment" , commentSchema ) ; \ No newline at end of file From ff0d93d2f047702d602420f5695f4dd72f490bad Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 13:56:27 +0530 Subject: [PATCH 18/43] media schema added, user schema modified --- .../server/src/models/media.model.js | 14 ++++++++++++++ .../server/src/models/user.model.js | 13 ++----------- 2 files changed, 16 insertions(+), 11 deletions(-) create mode 100644 P1/Project Brief/entertainment-web-app/server/src/models/media.model.js diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/media.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/media.model.js new file mode 100644 index 0000000..a599b1b --- /dev/null +++ b/P1/Project Brief/entertainment-web-app/server/src/models/media.model.js @@ -0,0 +1,14 @@ +import mongoose, { Schema } from 'mongoose'; + +const mediaSchema = new Schema({ + show: { + type: mongoose.Schema.Types.ObjectId, + ref: 'Shows', + }, + movie: { + type: mongoose.Schema.Types.ObjectId, + ref: 'Movie', + }, +}); + +export const Media = mongoose.model("Media" , mediaSchema) ; \ No newline at end of file diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/user.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/user.model.js index ba554e9..84e6cf7 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/models/user.model.js +++ b/P1/Project Brief/entertainment-web-app/server/src/models/user.model.js @@ -1,15 +1,6 @@ import mongoose, { Schema } from 'mongoose'; +import Media from './media.model'; -const mediaSchema = new Schema({ - show: { - type: mongoose.Schema.Types.ObjectId, - ref: 'Shows', - }, - movie: { - type: mongoose.Schema.Types.ObjectId, - ref: 'Movie', - }, -}); const UserSchema = new Schema( { username: { @@ -37,7 +28,7 @@ const UserSchema = new Schema( }, ], watchList: { - type: [mediaSchema], + type: [Media], }, avatar: { type: String, From a8592a0c5d819e3a7af9f6e1c2ea5da292e0efc2 Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 14:01:51 +0530 Subject: [PATCH 19/43] watch list and watch history fields modified --- .../server/src/models/user.model.js | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/user.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/user.model.js index 84e6cf7..dc0f4f5 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/models/user.model.js +++ b/P1/Project Brief/entertainment-web-app/server/src/models/user.model.js @@ -1,5 +1,4 @@ import mongoose, { Schema } from 'mongoose'; -import Media from './media.model'; const UserSchema = new Schema( { @@ -18,18 +17,24 @@ const UserSchema = new Schema( required: true, unique: true, }, - watchHistory: { - type: [mediaSchema], - }, + watchHistory: [ + { + type: Schema.Types.ObjectId, + ref: 'Media', + }, + ], subscriptions: [ { type: mongoose.Schema.Types.ObjectId, ref: 'Subscription', }, ], - watchList: { - type: [Media], - }, + watchList: [ + { + type: Schema.Types.ObjectId, + ref: 'Media', + }, + ], avatar: { type: String, }, From 79cd492303cb0c527f21495804de41176c55748f Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 14:04:55 +0530 Subject: [PATCH 20/43] like schema added --- .../server/src/models/likes.model.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/likes.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/likes.model.js index e69de29..f726aa5 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/models/likes.model.js +++ b/P1/Project Brief/entertainment-web-app/server/src/models/likes.model.js @@ -0,0 +1,18 @@ +import mongoose, { Schema } from 'mongoose'; + +const likeSchema = new Schema( { + comment : { + type : Schema.Types.ObjectId , + ref : "Comment" , + } , + media : { + type : Schema.Types.ObjectId , + ref : "Media" , + } , + likedBy : { + type : Schema.Types.ObjectId , + ref : "User" , + } +} , { timestamps : true } ) ; + +export const Like = mongoose.model( "Like" , likeSchema ) ; \ No newline at end of file From f9791741978a7cdcdb00575091c201058062a439 Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 14:08:55 +0530 Subject: [PATCH 21/43] rating schema added --- .../server/src/models/reviews.model.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/reviews.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/reviews.model.js index e69de29..d8eb424 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/models/reviews.model.js +++ b/P1/Project Brief/entertainment-web-app/server/src/models/reviews.model.js @@ -0,0 +1,14 @@ +import mongoose, { Schema } from 'mongoose'; + +const reviewSchema = new Schema( { + rating : { + type : Number , + enum : [ 5 , 4 , 3 , 2 , 1 ] , + required : true , + } , + content : { + type : String , + } +} , { timestamps : true } ) ; + +export const Review = mongoose.model( "Review" , reviewSchema ) ; \ No newline at end of file From d7981720bd638bca7193c1ac9fa078cecb899c3d Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 14:11:29 +0530 Subject: [PATCH 22/43] subscription schema added --- .../server/src/models/subscription.model.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/subscription.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/subscription.model.js index e69de29..fa1185b 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/models/subscription.model.js +++ b/P1/Project Brief/entertainment-web-app/server/src/models/subscription.model.js @@ -0,0 +1,15 @@ +import mongoose, { Schema } from 'mongoose'; + +const subscriptionSchema = new Schema( { + plan : { + type : String + } , + price : { + type : Number , + }, + expiry : { + type : Date , + } +} , { timestamps : true } ) ; + +export const Subscription = mongoose.model( "Subscription" , subscriptionSchema ) ; \ No newline at end of file From fa04d9017b33ece80364a28edd0856022b8609db Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 14:14:12 +0530 Subject: [PATCH 23/43] watchlist schema added --- .../server/src/models/watchlist.model.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/watchlist.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/watchlist.model.js index e69de29..e8724ab 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/models/watchlist.model.js +++ b/P1/Project Brief/entertainment-web-app/server/src/models/watchlist.model.js @@ -0,0 +1,10 @@ +import mongoose, { Schema } from 'mongoose'; + +const watchlistSchema = new Schema({ + media: { + type: mongoose.Schema.Types.ObjectId, + ref: 'Media', + }, +} , { timestamps : true } ) ; + +export const Watchlist = mongoose.model("Watchlist" , watchlistSchema) ; \ No newline at end of file From e5eabbae799a2dc7ae3438f88f711429f5a3f8ce Mon Sep 17 00:00:00 2001 From: vaishali Date: Thu, 20 Jun 2024 14:45:47 +0530 Subject: [PATCH 24/43] likes model modified --- .../entertainment-web-app/server/src/models/likes.model.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/likes.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/likes.model.js index f726aa5..d98128f 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/models/likes.model.js +++ b/P1/Project Brief/entertainment-web-app/server/src/models/likes.model.js @@ -1,6 +1,11 @@ import mongoose, { Schema } from 'mongoose'; const likeSchema = new Schema( { + review : { + type : Schema.Types.ObjectId , + ref : "Review" + + }, comment : { type : Schema.Types.ObjectId , ref : "Comment" , From a761414a7ce1452cca72c8019dd464b4f8b767cb Mon Sep 17 00:00:00 2001 From: vaishali Date: Fri, 21 Jun 2024 10:13:39 +0530 Subject: [PATCH 25/43] user model corrected --- .../server/src/models/user.model.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/user.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/user.model.js index dc0f4f5..192ab36 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/models/user.model.js +++ b/P1/Project Brief/entertainment-web-app/server/src/models/user.model.js @@ -8,9 +8,19 @@ const UserSchema = new Schema( unique: true, index: true, lowercase: true, + trim : true , + }, + email : { + type : String , + required : true , + lowercase : true , + trim : true , + unique : true }, fullName: { type: String, + trim : true , + index : true , }, password: { type: String, From d6e7c10a57d64f2d2ad8d65c289fc6010a88ac87 Mon Sep 17 00:00:00 2001 From: vaishali Date: Fri, 21 Jun 2024 10:15:13 +0530 Subject: [PATCH 26/43] shows model modified --- .../entertainment-web-app/server/src/models/shows.model.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js index 809d7fc..5445b0e 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js +++ b/P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js @@ -58,12 +58,10 @@ const showSchema = new Schema( required: true, }, audioLanguages: { - type: String, - enum: ['English', 'Hindi', 'Bengali', 'Maithli'], + type: [String], }, subtitles: { - type: String, - enum: ['English', 'Hindi', 'French', 'Tamil'], + type: [String], }, contentAdvisory: { type: [String], From 0d5cf07886eadda79008f3df1b447c72fc5bba66 Mon Sep 17 00:00:00 2001 From: vaishali Date: Fri, 21 Jun 2024 10:15:58 +0530 Subject: [PATCH 27/43] shows model modified --- .../server/src/models/shows.model.js | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js index 5445b0e..1893a29 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js +++ b/P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js @@ -12,15 +12,7 @@ const showSchema = new Schema( required: true, }, genre: { - type: String, - enum: [ - 'Horror', - 'Sports', - 'Medical', - 'Crime', - 'Thriller', - 'Pyschological', - ], + type: [String], }, director: { type: String, From 64655033f2225e7263769ae72bd21482d8c8372e Mon Sep 17 00:00:00 2001 From: vaishali Date: Fri, 21 Jun 2024 10:17:58 +0530 Subject: [PATCH 28/43] review schema updated --- .../entertainment-web-app/server/src/models/reviews.model.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/reviews.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/reviews.model.js index d8eb424..c176b5b 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/models/reviews.model.js +++ b/P1/Project Brief/entertainment-web-app/server/src/models/reviews.model.js @@ -8,6 +8,10 @@ const reviewSchema = new Schema( { } , content : { type : String , + }, + media : { + type : Schema.Types.ObjectId , + ref : "Media" } } , { timestamps : true } ) ; From a9fb35f3307f31c3628721ea122e2598f55af1e9 Mon Sep 17 00:00:00 2001 From: vaishali Date: Fri, 21 Jun 2024 10:23:23 +0530 Subject: [PATCH 29/43] movie schema updated --- .../server/src/models/movie.model.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/movie.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/movie.model.js index d1fc0c8..c480dbf 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/models/movie.model.js +++ b/P1/Project Brief/entertainment-web-app/server/src/models/movie.model.js @@ -11,8 +11,8 @@ const movieSchema = new Schema({ required : true , } , genre : { - type : String , - enum : [ "Horror" , "Sports" , "Medical" , "Crime" , "Thriller" , "Pyschological" ] + type : [String] , + required : true } , director : { type : String , @@ -28,6 +28,7 @@ const movieSchema = new Schema({ }, artists : { type : [ String ] , + required : true , } , videoFile : { type : String , @@ -36,6 +37,7 @@ const movieSchema = new Schema({ rated : { type : String , enum : [ "U" , "A" , "R" ] , + rqeuired : true , } , reviews : [ { @@ -48,15 +50,16 @@ const movieSchema = new Schema({ required : true , } , audioLanguages : { - type : String , - enum : [ "English" , "Hindi" , "Bengali" , "Maithli" ] + type : [String] , + required : true , } , subtitles : { - type : String , - enum : [ "English" , "Hindi" , "French" , "Tamil" ] + type : [String] , + required : true , } , contentAdvisory : { - type : [ String ] + type : [ String ] , + required : true , } , likes : { type : Schema.Types.ObjectId , @@ -70,6 +73,7 @@ const movieSchema = new Schema({ ] , duration : { type : Number, + required : true , } } , { timestamps : true } ) ; From d3161be38a4f112ac91a8fa5a0257bac753fb3b0 Mon Sep 17 00:00:00 2001 From: vaishali Date: Fri, 21 Jun 2024 10:24:56 +0530 Subject: [PATCH 30/43] shows schema updated --- .../entertainment-web-app/server/src/models/shows.model.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js b/P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js index 1893a29..7be3401 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js +++ b/P1/Project Brief/entertainment-web-app/server/src/models/shows.model.js @@ -13,6 +13,7 @@ const showSchema = new Schema( }, genre: { type: [String], + required : true }, director: { type: String, @@ -28,6 +29,7 @@ const showSchema = new Schema( }, artists: { type: [String], + required : true }, videoFiles: [ { @@ -38,6 +40,7 @@ const showSchema = new Schema( rated: { type: String, enum: ['U', 'A', 'R'], + required : true , }, reviews: [ { @@ -51,12 +54,15 @@ const showSchema = new Schema( }, audioLanguages: { type: [String], + required : true , }, subtitles: { type: [String], + required : true , }, contentAdvisory: { type: [String], + required : true , }, likes: { type: Schema.Types.ObjectId, @@ -70,6 +76,7 @@ const showSchema = new Schema( ], duration: { type: Number, + required : true , }, episodes: [ { From 608dec45374000dd25aa4a5c06787356888516e5 Mon Sep 17 00:00:00 2001 From: vaishali Date: Fri, 21 Jun 2024 11:04:09 +0530 Subject: [PATCH 31/43] api definition started --- P1/Project Brief/entertainment-web-app/server/src/swagger.yaml | 1 + 1 file changed, 1 insertion(+) create mode 100644 P1/Project Brief/entertainment-web-app/server/src/swagger.yaml diff --git a/P1/Project Brief/entertainment-web-app/server/src/swagger.yaml b/P1/Project Brief/entertainment-web-app/server/src/swagger.yaml new file mode 100644 index 0000000..7641bd9 --- /dev/null +++ b/P1/Project Brief/entertainment-web-app/server/src/swagger.yaml @@ -0,0 +1 @@ +# API definition \ No newline at end of file From 5760b28c9ba19d8437bdbe4ce1d803dafede523d Mon Sep 17 00:00:00 2001 From: vaishali Date: Fri, 21 Jun 2024 11:55:20 +0530 Subject: [PATCH 32/43] environment variables setup complete with Readme --- .../entertainment-web-app/server/Readme.md | 25 +++++++++++++++++++ .../entertainment-web-app/server/src/index.js | 4 +++ 2 files changed, 29 insertions(+) create mode 100644 P1/Project Brief/entertainment-web-app/server/Readme.md diff --git a/P1/Project Brief/entertainment-web-app/server/Readme.md b/P1/Project Brief/entertainment-web-app/server/Readme.md new file mode 100644 index 0000000..99c28e8 --- /dev/null +++ b/P1/Project Brief/entertainment-web-app/server/Readme.md @@ -0,0 +1,25 @@ +#### Initial setup + +- Run the following command +```shell +npm install +``` +- Create a .env file. +- Add environment variables in your .env file +``` +PORT = PORT_NUMBER +MONGODB_URI = YOUR_MONGODB_URI + +CORS_ORIGIN= "*" + +ACCESS_TOKEN_SECRET = YOUR_ACCESS_TOKEN_SECRET +ACCESS_TOKEN_EXPIRY = "1d +REFRESH_TOKEN_SECRET= YOUR_REFRESH_TOKEN_SECRET +REFRESH_TOKEN_EXPIRY = "10d" + +# we use cloudinary to store images and videos +CLOUDINARY_CLOUD_NAME = YOUR_COULDINARY_CLOUD_NAME +CLOUDINARY_API_KEY = YOUR_CLOUDINARY_API_KEY +CLOUDINARY_API_SECRET = CLOUDINARY_API_SECRET +``` + diff --git a/P1/Project Brief/entertainment-web-app/server/src/index.js b/P1/Project Brief/entertainment-web-app/server/src/index.js index e69de29..50f607a 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/index.js +++ b/P1/Project Brief/entertainment-web-app/server/src/index.js @@ -0,0 +1,4 @@ +import dotenv from "dotenv" ; +dotenv.config({ + path : './.env' +}) ; \ No newline at end of file From 4a1e337fdd534b67586fd7fadadc12117c3b1462 Mon Sep 17 00:00:00 2001 From: vaishali Date: Fri, 21 Jun 2024 12:20:29 +0530 Subject: [PATCH 33/43] feat: App running and Database connection successful. Scripts in the package.json changed to support ES import of dotenv/config (dev command changed) and Database name added- Entertainify --- .../entertainment-web-app/server/package.json | 2 +- .../entertainment-web-app/server/src/app.js | 5 +++++ .../server/src/constants.js | 1 + .../server/src/db/.gitkeep | 0 .../server/src/db/index.js | 14 +++++++++++++ .../entertainment-web-app/server/src/index.js | 21 ++++++++++++++++--- 6 files changed, 39 insertions(+), 4 deletions(-) delete mode 100644 P1/Project Brief/entertainment-web-app/server/src/db/.gitkeep create mode 100644 P1/Project Brief/entertainment-web-app/server/src/db/index.js diff --git a/P1/Project Brief/entertainment-web-app/server/package.json b/P1/Project Brief/entertainment-web-app/server/package.json index 3640af6..0d46ec3 100644 --- a/P1/Project Brief/entertainment-web-app/server/package.json +++ b/P1/Project Brief/entertainment-web-app/server/package.json @@ -5,7 +5,7 @@ "main": "index.js", "type" : "module", "scripts": { - "dev": "nodemon src/index.js" + "dev": "nodemon -r dotenv/config --experimental-json-modules src/index.js" }, "author": "Team Lakshaya", "license": "ISC", diff --git a/P1/Project Brief/entertainment-web-app/server/src/app.js b/P1/Project Brief/entertainment-web-app/server/src/app.js index e69de29..a532984 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/app.js +++ b/P1/Project Brief/entertainment-web-app/server/src/app.js @@ -0,0 +1,5 @@ +import express from "express" ; + +const app = express() ; + +export { app } ; \ No newline at end of file diff --git a/P1/Project Brief/entertainment-web-app/server/src/constants.js b/P1/Project Brief/entertainment-web-app/server/src/constants.js index e69de29..9c47796 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/constants.js +++ b/P1/Project Brief/entertainment-web-app/server/src/constants.js @@ -0,0 +1 @@ +export const DB_NAME = "Entertainify" ; \ No newline at end of file diff --git a/P1/Project Brief/entertainment-web-app/server/src/db/.gitkeep b/P1/Project Brief/entertainment-web-app/server/src/db/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/P1/Project Brief/entertainment-web-app/server/src/db/index.js b/P1/Project Brief/entertainment-web-app/server/src/db/index.js new file mode 100644 index 0000000..701719b --- /dev/null +++ b/P1/Project Brief/entertainment-web-app/server/src/db/index.js @@ -0,0 +1,14 @@ +import mongoose from 'mongoose'; +import { DB_NAME } from '../constants.js'; + +export const connectDB = async () => { + const MONGODB = `${process.env.MONGODB_URI}/${DB_NAME}`; + try { + const instance = await mongoose.connect(MONGODB); + console.log( + `\n MONGODB CONNECTION SUCCESSFUL !! ${instance.connection.host} ` + ); + } catch (error) { + console.log(error); + } +}; diff --git a/P1/Project Brief/entertainment-web-app/server/src/index.js b/P1/Project Brief/entertainment-web-app/server/src/index.js index 50f607a..05481ef 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/index.js +++ b/P1/Project Brief/entertainment-web-app/server/src/index.js @@ -1,4 +1,19 @@ -import dotenv from "dotenv" ; +import dotenv from 'dotenv'; +import { connectDB } from './db/index.js'; +import { app } from './app.js'; dotenv.config({ - path : './.env' -}) ; \ No newline at end of file + path: './.env', +}); + +connectDB() + .then(() => { + app.on('error', (er) => { + console.log('error', er); + }); + app.listen(process.env.PORT, () => { + console.log(`\n SERVER RUNNING ON ${process.env.PORT} `); + }); + }) + .catch(() => { + console.log(' MONGODB CONNECTION FAILED '); + }); From 930f51c4085c246cab45c9880620a501428fc5a9 Mon Sep 17 00:00:00 2001 From: vaishali Date: Sat, 22 Jun 2024 10:06:54 +0530 Subject: [PATCH 34/43] modified --- P1/Project Brief/entertainment-web-app/server/src/swagger.yaml | 1 - 1 file changed, 1 deletion(-) delete mode 100644 P1/Project Brief/entertainment-web-app/server/src/swagger.yaml diff --git a/P1/Project Brief/entertainment-web-app/server/src/swagger.yaml b/P1/Project Brief/entertainment-web-app/server/src/swagger.yaml deleted file mode 100644 index 7641bd9..0000000 --- a/P1/Project Brief/entertainment-web-app/server/src/swagger.yaml +++ /dev/null @@ -1 +0,0 @@ -# API definition \ No newline at end of file From f605a9dd225e7c4f97b843c9fe480a35ffcaa0c8 Mon Sep 17 00:00:00 2001 From: vaishali Date: Sat, 22 Jun 2024 10:11:57 +0530 Subject: [PATCH 35/43] routes and controllers added --- .../server/src/controllers/media.controller.js | 0 .../server/src/controllers/movie.controller.js | 0 .../server/src/controllers/show.controller.js | 0 .../server/src/controllers/user.controller.js | 0 .../entertainment-web-app/server/src/routes/movies.router.js | 0 .../entertainment-web-app/server/src/routes/shows.router.js | 0 .../entertainment-web-app/server/src/routes/user.routes.js | 0 7 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 P1/Project Brief/entertainment-web-app/server/src/controllers/media.controller.js create mode 100644 P1/Project Brief/entertainment-web-app/server/src/controllers/movie.controller.js create mode 100644 P1/Project Brief/entertainment-web-app/server/src/controllers/show.controller.js create mode 100644 P1/Project Brief/entertainment-web-app/server/src/controllers/user.controller.js create mode 100644 P1/Project Brief/entertainment-web-app/server/src/routes/movies.router.js create mode 100644 P1/Project Brief/entertainment-web-app/server/src/routes/shows.router.js create mode 100644 P1/Project Brief/entertainment-web-app/server/src/routes/user.routes.js diff --git a/P1/Project Brief/entertainment-web-app/server/src/controllers/media.controller.js b/P1/Project Brief/entertainment-web-app/server/src/controllers/media.controller.js new file mode 100644 index 0000000..e69de29 diff --git a/P1/Project Brief/entertainment-web-app/server/src/controllers/movie.controller.js b/P1/Project Brief/entertainment-web-app/server/src/controllers/movie.controller.js new file mode 100644 index 0000000..e69de29 diff --git a/P1/Project Brief/entertainment-web-app/server/src/controllers/show.controller.js b/P1/Project Brief/entertainment-web-app/server/src/controllers/show.controller.js new file mode 100644 index 0000000..e69de29 diff --git a/P1/Project Brief/entertainment-web-app/server/src/controllers/user.controller.js b/P1/Project Brief/entertainment-web-app/server/src/controllers/user.controller.js new file mode 100644 index 0000000..e69de29 diff --git a/P1/Project Brief/entertainment-web-app/server/src/routes/movies.router.js b/P1/Project Brief/entertainment-web-app/server/src/routes/movies.router.js new file mode 100644 index 0000000..e69de29 diff --git a/P1/Project Brief/entertainment-web-app/server/src/routes/shows.router.js b/P1/Project Brief/entertainment-web-app/server/src/routes/shows.router.js new file mode 100644 index 0000000..e69de29 diff --git a/P1/Project Brief/entertainment-web-app/server/src/routes/user.routes.js b/P1/Project Brief/entertainment-web-app/server/src/routes/user.routes.js new file mode 100644 index 0000000..e69de29 From 23a5fcb68faae2e99abe2253942da681c402435c Mon Sep 17 00:00:00 2001 From: vaishali Date: Sat, 22 Jun 2024 10:18:07 +0530 Subject: [PATCH 36/43] bcrypt, cloudinary, cookie-parser, cors, jsonwebtoken, mongoose-aggregate-paginate-v2 and multer packages added for authentication, files upload and cors --- .../server/package-lock.json | 864 +++++++++++++++++- .../entertainment-web-app/server/package.json | 11 +- 2 files changed, 867 insertions(+), 8 deletions(-) diff --git a/P1/Project Brief/entertainment-web-app/server/package-lock.json b/P1/Project Brief/entertainment-web-app/server/package-lock.json index 2d14aa5..6fd78af 100644 --- a/P1/Project Brief/entertainment-web-app/server/package-lock.json +++ b/P1/Project Brief/entertainment-web-app/server/package-lock.json @@ -9,15 +9,42 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "bcrypt": "^5.1.1", + "cloudinary": "^2.2.0", + "cookie-parser": "^1.4.6", + "cors": "^2.8.5", "dotenv": "^16.4.5", "express": "^4.19.2", - "mongoose": "^8.4.3" + "jsonwebtoken": "^9.0.2", + "mongoose": "^8.4.3", + "mongoose-aggregate-paginate-v2": "^1.0.7", + "multer": "^1.4.5-lts.1" }, "devDependencies": { "nodemon": "^3.1.3", "prettier": "^3.3.2" } }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "license": "BSD-3-Clause", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, "node_modules/@mongodb-js/saslprep": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz", @@ -42,6 +69,12 @@ "@types/webidl-conversions": "*" } }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "license": "ISC" + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -55,6 +88,27 @@ "node": ">= 0.6" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -69,6 +123,46 @@ "node": ">= 8" } }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", + "license": "MIT" + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "license": "ISC" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -79,9 +173,22 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, "license": "MIT" }, + "node_modules/bcrypt": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz", + "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.11", + "node-addon-api": "^5.0.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -138,7 +245,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -167,6 +273,29 @@ "node": ">=16.20.1" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -220,13 +349,64 @@ "fsevents": "~2.3.2" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/cloudinary": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cloudinary/-/cloudinary-2.2.0.tgz", + "integrity": "sha512-akbLTZcNegGSkl07Frnt9fyiK9KZ2zPS+a+j7uLrjNYxVhDpDdIBz9G6snPCYqgk+WLVMRPfXTObalLr5L6g0Q==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.21", + "q": "^1.5.1" + }, + "engines": { + "node": ">=9" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, "license": "MIT" }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "license": "ISC" + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -257,12 +437,53 @@ "node": ">= 0.6" } }, + "node_modules/cookie-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", + "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "license": "MIT", + "dependencies": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/cookie-parser/node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "license": "MIT" }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/debug": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", @@ -297,6 +518,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "license": "MIT" + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -316,6 +543,15 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/dotenv": { "version": "16.4.5", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", @@ -328,12 +564,27 @@ "url": "https://dotenvx.com" } }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -500,6 +751,36 @@ "node": ">= 0.6" } }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -524,6 +805,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -543,6 +845,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -614,6 +937,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "license": "ISC" + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -642,6 +971,19 @@ "node": ">= 0.8" } }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -661,6 +1003,17 @@ "dev": true, "license": "ISC" }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -699,6 +1052,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -722,6 +1084,55 @@ "node": ">=0.12.0" } }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/kareem": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", @@ -731,6 +1142,78 @@ "node": ">=12.0.0" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -798,7 +1281,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -807,6 +1289,61 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/mongodb": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.6.2.tgz", @@ -885,6 +1422,15 @@ "url": "https://opencollective.com/mongoose" } }, + "node_modules/mongoose-aggregate-paginate-v2": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/mongoose-aggregate-paginate-v2/-/mongoose-aggregate-paginate-v2-1.0.7.tgz", + "integrity": "sha512-Xij2wux3xs9yfXhV9d7M1P92WJsz39fyNJWyVAcSDhVO4HZnoM2zz03b2ZLCT13ha5TJL9uPM+jw1Sj2IqjHAQ==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/mongoose/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -918,6 +1464,24 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "license": "MIT" }, + "node_modules/multer": { + "version": "1.4.5-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", + "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", + "license": "MIT", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -927,6 +1491,54 @@ "node": ">= 0.6" } }, + "node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/nodemon": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.3.tgz", @@ -956,6 +1568,21 @@ "url": "https://opencollective.com/nodemon" } }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -966,6 +1593,28 @@ "node": ">=0.10.0" } }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", @@ -987,6 +1636,15 @@ "node": ">= 0.8" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -996,6 +1654,15 @@ "node": ">= 0.8" } }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -1031,6 +1698,12 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -1060,6 +1733,17 @@ "node": ">=6" } }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, "node_modules/qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", @@ -1099,6 +1783,27 @@ "node": ">= 0.8" } }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -1112,6 +1817,22 @@ "node": ">=8.10.0" } }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1142,7 +1863,6 @@ "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -1211,6 +1931,12 @@ "node": ">= 0.8.0" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -1258,6 +1984,12 @@ "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==", "license": "MIT" }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, "node_modules/simple-update-notifier": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", @@ -1289,6 +2021,55 @@ "node": ">= 0.8" } }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -1302,6 +2083,35 @@ "node": ">=4" } }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -1359,6 +2169,12 @@ "node": ">= 0.6" } }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", @@ -1375,6 +2191,12 @@ "node": ">= 0.8" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -1414,6 +2236,36 @@ "engines": { "node": ">=16" } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" } } } diff --git a/P1/Project Brief/entertainment-web-app/server/package.json b/P1/Project Brief/entertainment-web-app/server/package.json index 0d46ec3..bc4348a 100644 --- a/P1/Project Brief/entertainment-web-app/server/package.json +++ b/P1/Project Brief/entertainment-web-app/server/package.json @@ -3,7 +3,7 @@ "version": "1.0.0", "description": "server for entertainment-web-app", "main": "index.js", - "type" : "module", + "type": "module", "scripts": { "dev": "nodemon -r dotenv/config --experimental-json-modules src/index.js" }, @@ -14,8 +14,15 @@ "prettier": "^3.3.2" }, "dependencies": { + "bcrypt": "^5.1.1", + "cloudinary": "^2.2.0", + "cookie-parser": "^1.4.6", + "cors": "^2.8.5", "dotenv": "^16.4.5", "express": "^4.19.2", - "mongoose": "^8.4.3" + "jsonwebtoken": "^9.0.2", + "mongoose": "^8.4.3", + "mongoose-aggregate-paginate-v2": "^1.0.7", + "multer": "^1.4.5-lts.1" } } From c913fd6207adbea5d4819ecc7c3095f636cb9e5c Mon Sep 17 00:00:00 2001 From: vaishali Date: Sat, 22 Jun 2024 10:22:40 +0530 Subject: [PATCH 37/43] middlewares added --- .../entertainment-web-app/server/src/app.js | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/P1/Project Brief/entertainment-web-app/server/src/app.js b/P1/Project Brief/entertainment-web-app/server/src/app.js index a532984..7ba2ef7 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/app.js +++ b/P1/Project Brief/entertainment-web-app/server/src/app.js @@ -1,5 +1,30 @@ -import express from "express" ; +import express from 'express'; +import cors from 'cors'; +import cookieParser from 'cookie-parser'; -const app = express() ; +const app = express(); -export { app } ; \ No newline at end of file +app.use( + cors({ + origin: process.env.CORS_ORIGIN, + credentials: true, + }) +); + +app.use( + express.json({ + limit: '16kb', + }) +); + +app.use( + express.urlencoded({ + extended: true, + limit: '16kb', + }) +); + +app.use(express.static('public')); +app.use(cookieParser()); + +export { app }; From 63ecc9aaac9e6f6d921a66f127453547e3a09214 Mon Sep 17 00:00:00 2001 From: vaishali Date: Sat, 22 Jun 2024 10:29:18 +0530 Subject: [PATCH 38/43] file upload on the server middleware added using multer and file upload on cloudinary utility added --- .../src/middlewares/multer.middleware.js | 14 ++++++++ .../server/src/utils/cloudinary.js | 32 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 P1/Project Brief/entertainment-web-app/server/src/middlewares/multer.middleware.js create mode 100644 P1/Project Brief/entertainment-web-app/server/src/utils/cloudinary.js diff --git a/P1/Project Brief/entertainment-web-app/server/src/middlewares/multer.middleware.js b/P1/Project Brief/entertainment-web-app/server/src/middlewares/multer.middleware.js new file mode 100644 index 0000000..e017dba --- /dev/null +++ b/P1/Project Brief/entertainment-web-app/server/src/middlewares/multer.middleware.js @@ -0,0 +1,14 @@ +import multer from 'multer'; + +const storage = multer.diskStorage({ + destination: function (req, file, cb) { + cb(null, './public/temp') + }, + filename: function (req, file, cb) { + cb(null, file.originalname); + } +}) + +export const upload = multer({ + storage, +}); diff --git a/P1/Project Brief/entertainment-web-app/server/src/utils/cloudinary.js b/P1/Project Brief/entertainment-web-app/server/src/utils/cloudinary.js new file mode 100644 index 0000000..9ded266 --- /dev/null +++ b/P1/Project Brief/entertainment-web-app/server/src/utils/cloudinary.js @@ -0,0 +1,32 @@ +import { v2 as cloudinary } from 'cloudinary'; +import fs from 'fs'; + +cloudinary.config({ + cloud_name: process.env.CLOUDINARY_CLOUD_NAME, + api_key: process.env.CLOUDINARY_API_KEY, + api_secret: process.env.CLOUDINARY_API_SECRET, +}); + +const uploadOnCloudinary = async (localFilePath) => { + try { + if (!localFilePath) return null; + + // upload the file on cloudinary + const response = await cloudinary.uploader.upload(localFilePath, { + resource_type: 'auto', + }); + + // file has been successfully uploaded + console.log('file is uploaded on cloudinary', response.url); + + return response; + } catch (error) { + fs.unlinkSync(localFilePath); + + // removes the locally saved temporary file as the upload operation got failed + + return null; + } +}; + +export { uploadOnCloudinary }; From 4765e66cc1d4efea9e430d5cc889cf88621564c9 Mon Sep 17 00:00:00 2001 From: vaishali Date: Sat, 22 Jun 2024 10:44:09 +0530 Subject: [PATCH 39/43] user regsiter route and controller added --- .../entertainment-web-app/server/src/app.js | 7 ++++++- .../server/src/controllers/user.controller.js | 7 +++++++ .../server/src/routes/user.routes.js | 11 +++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/P1/Project Brief/entertainment-web-app/server/src/app.js b/P1/Project Brief/entertainment-web-app/server/src/app.js index 7ba2ef7..6c33235 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/app.js +++ b/P1/Project Brief/entertainment-web-app/server/src/app.js @@ -25,6 +25,11 @@ app.use( ); app.use(express.static('public')); -app.use(cookieParser()); +app.use(cookieParser()); + +// router imports +import userRouter from "./routes/user.routes.js" ; + +app.use( "/api/v1/users" , userRouter ) ; export { app }; diff --git a/P1/Project Brief/entertainment-web-app/server/src/controllers/user.controller.js b/P1/Project Brief/entertainment-web-app/server/src/controllers/user.controller.js index e69de29..89b7c73 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/controllers/user.controller.js +++ b/P1/Project Brief/entertainment-web-app/server/src/controllers/user.controller.js @@ -0,0 +1,7 @@ +import User from '../models/user.model.js'; + +const registerUser = () => { + // registration logic +}; + +export { registerUser }; diff --git a/P1/Project Brief/entertainment-web-app/server/src/routes/user.routes.js b/P1/Project Brief/entertainment-web-app/server/src/routes/user.routes.js index e69de29..ff025c6 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/routes/user.routes.js +++ b/P1/Project Brief/entertainment-web-app/server/src/routes/user.routes.js @@ -0,0 +1,11 @@ +import { Router } from "express" ; +import { registerUser } from "../controllers/user.controller.js" ; +import { upload } from "../middlewares/multer.middleware.js" ; + +const router = Router() ; + +router.route("/register").post( + registerUser +) ; + +export default router ; \ No newline at end of file From 18d4a208c026b73d5a5f42be3ef22c405b938c52 Mon Sep 17 00:00:00 2001 From: vaishali Date: Sat, 22 Jun 2024 14:03:07 +0530 Subject: [PATCH 40/43] utility added- standard api response template added, api error function added and async function handler added --- .../server/src/utils/ApiError.js | 24 +++++++++++++++++++ .../server/src/utils/ApiResponse.js | 14 +++++++++++ .../server/src/utils/AsyncHandler.js | 12 ++++++++++ 3 files changed, 50 insertions(+) create mode 100644 P1/Project Brief/entertainment-web-app/server/src/utils/ApiError.js create mode 100644 P1/Project Brief/entertainment-web-app/server/src/utils/ApiResponse.js create mode 100644 P1/Project Brief/entertainment-web-app/server/src/utils/AsyncHandler.js diff --git a/P1/Project Brief/entertainment-web-app/server/src/utils/ApiError.js b/P1/Project Brief/entertainment-web-app/server/src/utils/ApiError.js new file mode 100644 index 0000000..6b847e9 --- /dev/null +++ b/P1/Project Brief/entertainment-web-app/server/src/utils/ApiError.js @@ -0,0 +1,24 @@ +class ApiError extends Error { + constructor( + statusCode , + message = "Something went wrong", + errors = [] , + stack = "" + ){ + super(message) + this.statusCode = statusCode ; + this.data = null // study + this.message = message ; + this.success = false ; + this.errors = errors ; + + if ( stack ) { + this.stack = stack ; + } else { + Error.captureStackTrace(this , this.constructor) ; + } + + } +} + +export { ApiError } ; \ No newline at end of file diff --git a/P1/Project Brief/entertainment-web-app/server/src/utils/ApiResponse.js b/P1/Project Brief/entertainment-web-app/server/src/utils/ApiResponse.js new file mode 100644 index 0000000..b223370 --- /dev/null +++ b/P1/Project Brief/entertainment-web-app/server/src/utils/ApiResponse.js @@ -0,0 +1,14 @@ +class ApiResponse { + constructor( + statusCode , + data , + message = "Success" + ) { + this.statusCode = statusCode ; + this.data = data ; + this.message = message ; + this.success = statusCode < 400 ; + } +} + +export { ApiResponse } ; \ No newline at end of file diff --git a/P1/Project Brief/entertainment-web-app/server/src/utils/AsyncHandler.js b/P1/Project Brief/entertainment-web-app/server/src/utils/AsyncHandler.js new file mode 100644 index 0000000..705bdd5 --- /dev/null +++ b/P1/Project Brief/entertainment-web-app/server/src/utils/AsyncHandler.js @@ -0,0 +1,12 @@ +const asyncHandler = (fn) => async (req, res, next) => { + try { + await fn(req, res, next); + } catch (error) { + res.status(error.code).json({ + success: flag, + message: error.message, + }); + } +}; + +export { asyncHandler }; From 8252e85d1f294e4467e6987cc6a98c4538becae2 Mon Sep 17 00:00:00 2001 From: vaishali Date: Mon, 24 Jun 2024 17:19:41 +0530 Subject: [PATCH 41/43] modified --- .../server/src/controllers/user.controller.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/P1/Project Brief/entertainment-web-app/server/src/controllers/user.controller.js b/P1/Project Brief/entertainment-web-app/server/src/controllers/user.controller.js index 89b7c73..8b9be8c 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/controllers/user.controller.js +++ b/P1/Project Brief/entertainment-web-app/server/src/controllers/user.controller.js @@ -1,7 +1,14 @@ import User from '../models/user.model.js'; -const registerUser = () => { - // registration logic +const registerUser = async ( req , res ) => { + // registration logic + try { + const { username , email , password } = req.body ; + + } catch( error ) { + + } + }; export { registerUser }; From d1cebbce7e5bc4daccbd713a4f7dca46de32a6e2 Mon Sep 17 00:00:00 2001 From: vaishali Date: Mon, 24 Jun 2024 18:04:13 +0530 Subject: [PATCH 42/43] added --- .../server/src/controllers/show.controller.js | 7 +++++++ .../server/src/controllers/user.controller.js | 13 ++++++++++++- .../server/src/routes/shows.router.js | 13 +++++++++++++ .../server/src/routes/user.routes.js | 5 ++++- 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/P1/Project Brief/entertainment-web-app/server/src/controllers/show.controller.js b/P1/Project Brief/entertainment-web-app/server/src/controllers/show.controller.js index e69de29..36ad534 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/controllers/show.controller.js +++ b/P1/Project Brief/entertainment-web-app/server/src/controllers/show.controller.js @@ -0,0 +1,7 @@ +const getShows = () => { + +} +const postShow = () => { + +} +export { getShows , postShow } ; \ No newline at end of file diff --git a/P1/Project Brief/entertainment-web-app/server/src/controllers/user.controller.js b/P1/Project Brief/entertainment-web-app/server/src/controllers/user.controller.js index 8b9be8c..3ba35ea 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/controllers/user.controller.js +++ b/P1/Project Brief/entertainment-web-app/server/src/controllers/user.controller.js @@ -11,4 +11,15 @@ const registerUser = async ( req , res ) => { }; -export { registerUser }; +const getUser = async ( req , res ) => { + // login logic + try { + const { username , email , password } = req.body ; + + } catch( error ) { + + } + +}; + +export { registerUser , getUser } ; diff --git a/P1/Project Brief/entertainment-web-app/server/src/routes/shows.router.js b/P1/Project Brief/entertainment-web-app/server/src/routes/shows.router.js index e69de29..0b043b8 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/routes/shows.router.js +++ b/P1/Project Brief/entertainment-web-app/server/src/routes/shows.router.js @@ -0,0 +1,13 @@ +import { Router } from 'express'; +import { getShows , postShow } from "../controllers/show.controller.js" ; +import { upload } from '../middlewares/multer.middleware.js'; + +const router = Router(); + +router.route('/shows').get( + getShows +); + +router.route('/post/shows').post( + postShow +); diff --git a/P1/Project Brief/entertainment-web-app/server/src/routes/user.routes.js b/P1/Project Brief/entertainment-web-app/server/src/routes/user.routes.js index ff025c6..22bddd8 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/routes/user.routes.js +++ b/P1/Project Brief/entertainment-web-app/server/src/routes/user.routes.js @@ -1,5 +1,5 @@ import { Router } from "express" ; -import { registerUser } from "../controllers/user.controller.js" ; +import { registerUser , getUser } from "../controllers/user.controller.js" ; import { upload } from "../middlewares/multer.middleware.js" ; const router = Router() ; @@ -7,5 +7,8 @@ const router = Router() ; router.route("/register").post( registerUser ) ; +router.route("/login").get( + getUser +) ; export default router ; \ No newline at end of file From 5441c5f0df2a93b6adba60ee9a900b71d9fe75ef Mon Sep 17 00:00:00 2001 From: vaishali Date: Mon, 24 Jun 2024 18:05:07 +0530 Subject: [PATCH 43/43] modified --- .../entertainment-web-app/server/src/routes/shows.router.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/P1/Project Brief/entertainment-web-app/server/src/routes/shows.router.js b/P1/Project Brief/entertainment-web-app/server/src/routes/shows.router.js index 0b043b8..b9702d2 100644 --- a/P1/Project Brief/entertainment-web-app/server/src/routes/shows.router.js +++ b/P1/Project Brief/entertainment-web-app/server/src/routes/shows.router.js @@ -11,3 +11,5 @@ router.route('/shows').get( router.route('/post/shows').post( postShow ); + +export default router ; \ No newline at end of file