diff --git a/.env-example b/.env-example deleted file mode 100644 index dfce8c4d..00000000 --- a/.env-example +++ /dev/null @@ -1,7 +0,0 @@ -PORT=3000 -MONGO_USER= -MONGO_PASSWORD= -MONGO_HOST= -MONGO_DB_NAME= -MONGO_PORT= -MONGO_CONNECTION= \ No newline at end of file diff --git a/config.js b/config.js new file mode 100644 index 00000000..9dfe72f5 --- /dev/null +++ b/config.js @@ -0,0 +1,4 @@ +require('dotenv').config() +module.exports = { + MONGO_URI: `mongodb+srv://${process.env.MONGO_USER}:${process.env.MONGO_PASSWORD}@${process.env.MONGO_HOST}/${process.env.MONGO_DB_NAME}?retryWrites=true&w=majority` +} \ No newline at end of file diff --git a/models/Categories.js b/models/Categories.js new file mode 100644 index 00000000..5d8ce0df --- /dev/null +++ b/models/Categories.js @@ -0,0 +1,15 @@ +const mongoose = require('mongoose'); +const Schema = mongoose.Schema; + +const CategoriesSchema = new Schema({ + name: { + type: String, + required: true, + }, + image: { + type: String, + required: true, + } +}); + +module.exports = mongoose.model('Categories', CategoriesSchema) \ No newline at end of file diff --git a/models/Products.js b/models/Products.js new file mode 100644 index 00000000..9be5bc7e --- /dev/null +++ b/models/Products.js @@ -0,0 +1,27 @@ +const mongoose = require('mongoose'); +const Schema = mongoose.Schema; + +const ProductsSchema = new Schema({ + name: { + type: String, + required: true, + }, + price: { + type: String, + required: true, + }, + description: { + type: String, + required: true, + }, + categoryId: { + type: String, + required: true, + }, + image: { + type: String, + required: true, + } +}); + +module.exports = mongoose.model('Products', ProductsSchema) \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 76a7fcef..dbb43c8b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,10 +9,12 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "body-parser": "^1.19.0", "cors": "^2.8.5", - "dotenv": "^8.2.0", + "dotenv": "^8.6.0", "express": "^4.17.1", - "mongodb": "^3.6.6" + "mongodb": "^3.6.6", + "mongoose": "^5.12.13" }, "devDependencies": { "jest": "^26.6.3", @@ -1349,6 +1351,14 @@ "@babel/types": "^7.3.0" } }, + "node_modules/@types/bson": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.3.tgz", + "integrity": "sha512-mVRvYnTOZJz3ccpxhr3wgxVmSeiYinW+zlzQz3SXWaJmD1DuL05Jeq7nKw3SnbKmbleW5qrLG5vdyWe/A9sXhw==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", @@ -1382,11 +1392,19 @@ "@types/istanbul-lib-report": "*" } }, + "node_modules/@types/mongodb": { + "version": "3.6.17", + "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.17.tgz", + "integrity": "sha512-9hhgvYPdC5iHyyksPcKCu45gfaAIPQHKHGdvNXu4582DmOZX3wrUJIJPT40o4G1oTKPgpMMFqZglOTjhnYoF+A==", + "dependencies": { + "@types/bson": "*", + "@types/node": "*" + } + }, "node_modules/@types/node": { "version": "14.14.41", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.41.tgz", - "integrity": "sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g==", - "dev": true + "integrity": "sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g==" }, "node_modules/@types/normalize-package-data": { "version": "2.4.0", @@ -1922,6 +1940,11 @@ "safe-buffer": "^5.1.1" } }, + "node_modules/bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, "node_modules/body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -2728,11 +2751,11 @@ } }, "node_modules/dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/duplexer3": { @@ -6360,6 +6383,11 @@ "verror": "1.10.0" } }, + "node_modules/kareem": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", + "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" + }, "node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -6674,14 +6702,14 @@ } }, "node_modules/mongodb": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.6.tgz", - "integrity": "sha512-WlirMiuV1UPbej5JeCMqE93JRfZ/ZzqE7nJTwP85XzjAF4rRSeq2bGCb1cjfoHLOF06+HxADaPGqT0g3SbVT1w==", + "version": "3.6.8", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.8.tgz", + "integrity": "sha512-sDjJvI73WjON1vapcbyBD3Ao9/VN3TKYY8/QX9EPbs22KaCSrQ5rXo5ZZd44tWJ3wl3FlnrFZ+KyUtNH6+1ZPQ==", "dependencies": { "bl": "^2.2.1", "bson": "^1.1.4", "denque": "^1.4.1", - "optional-require": "^1.0.2", + "optional-require": "^1.0.3", "safe-buffer": "^5.1.2" }, "engines": { @@ -6711,6 +6739,95 @@ } } }, + "node_modules/mongoose": { + "version": "5.12.13", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.12.13.tgz", + "integrity": "sha512-QGn1FCzZ8Z+mMGVg8oR2kQw4NmhLloCHsw1NqKWg3Yr7WfPzkE4pe7s9P6o5pkYGsku17n9mqMHowne7EFK/zQ==", + "dependencies": { + "@types/mongodb": "^3.5.27", + "bson": "^1.1.4", + "kareem": "2.3.2", + "mongodb": "3.6.8", + "mongoose-legacy-pluralize": "1.0.2", + "mpath": "0.8.3", + "mquery": "3.2.5", + "ms": "2.1.2", + "regexp-clone": "1.0.0", + "safe-buffer": "5.2.1", + "sift": "13.5.2", + "sliced": "1.0.1" + }, + "engines": { + "node": ">=4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose-legacy-pluralize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==", + "peerDependencies": { + "mongoose": "*" + } + }, + "node_modules/mongoose/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==" + }, + "node_modules/mongoose/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" + } + ] + }, + "node_modules/mpath": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", + "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.5.tgz", + "integrity": "sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A==", + "dependencies": { + "bluebird": "3.5.1", + "debug": "3.1.0", + "regexp-clone": "^1.0.0", + "safe-buffer": "5.1.2", + "sliced": "1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dependencies": { + "ms": "2.0.0" + } + }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -7696,6 +7813,11 @@ "node": ">=0.10.0" } }, + "node_modules/regexp-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", + "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" + }, "node_modules/registry-auth-token": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", @@ -8197,6 +8319,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sift": { + "version": "13.5.2", + "resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz", + "integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA==" + }, "node_modules/signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -8218,6 +8345,11 @@ "node": ">=8" } }, + "node_modules/sliced": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + }, "node_modules/snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -10832,6 +10964,14 @@ "@babel/types": "^7.3.0" } }, + "@types/bson": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.3.tgz", + "integrity": "sha512-mVRvYnTOZJz3ccpxhr3wgxVmSeiYinW+zlzQz3SXWaJmD1DuL05Jeq7nKw3SnbKmbleW5qrLG5vdyWe/A9sXhw==", + "requires": { + "@types/node": "*" + } + }, "@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", @@ -10865,11 +11005,19 @@ "@types/istanbul-lib-report": "*" } }, + "@types/mongodb": { + "version": "3.6.17", + "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.17.tgz", + "integrity": "sha512-9hhgvYPdC5iHyyksPcKCu45gfaAIPQHKHGdvNXu4582DmOZX3wrUJIJPT40o4G1oTKPgpMMFqZglOTjhnYoF+A==", + "requires": { + "@types/bson": "*", + "@types/node": "*" + } + }, "@types/node": { "version": "14.14.41", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.41.tgz", - "integrity": "sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g==", - "dev": true + "integrity": "sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g==" }, "@types/normalize-package-data": { "version": "2.4.0", @@ -11298,6 +11446,11 @@ "safe-buffer": "^5.1.1" } }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, "body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -11947,9 +12100,9 @@ } }, "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==" }, "duplexer3": { "version": "0.1.4", @@ -14712,6 +14865,11 @@ "verror": "1.10.0" } }, + "kareem": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", + "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -14958,18 +15116,82 @@ } }, "mongodb": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.6.tgz", - "integrity": "sha512-WlirMiuV1UPbej5JeCMqE93JRfZ/ZzqE7nJTwP85XzjAF4rRSeq2bGCb1cjfoHLOF06+HxADaPGqT0g3SbVT1w==", + "version": "3.6.8", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.8.tgz", + "integrity": "sha512-sDjJvI73WjON1vapcbyBD3Ao9/VN3TKYY8/QX9EPbs22KaCSrQ5rXo5ZZd44tWJ3wl3FlnrFZ+KyUtNH6+1ZPQ==", "requires": { "bl": "^2.2.1", "bson": "^1.1.4", "denque": "^1.4.1", - "optional-require": "^1.0.2", + "optional-require": "^1.0.3", "safe-buffer": "^5.1.2", "saslprep": "^1.0.0" } }, + "mongoose": { + "version": "5.12.13", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.12.13.tgz", + "integrity": "sha512-QGn1FCzZ8Z+mMGVg8oR2kQw4NmhLloCHsw1NqKWg3Yr7WfPzkE4pe7s9P6o5pkYGsku17n9mqMHowne7EFK/zQ==", + "requires": { + "@types/mongodb": "^3.5.27", + "bson": "^1.1.4", + "kareem": "2.3.2", + "mongodb": "3.6.8", + "mongoose-legacy-pluralize": "1.0.2", + "mpath": "0.8.3", + "mquery": "3.2.5", + "ms": "2.1.2", + "regexp-clone": "1.0.0", + "safe-buffer": "5.2.1", + "sift": "13.5.2", + "sliced": "1.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "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==" + } + } + }, + "mongoose-legacy-pluralize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==", + "requires": {} + }, + "mpath": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", + "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==" + }, + "mquery": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.5.tgz", + "integrity": "sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A==", + "requires": { + "bluebird": "3.5.1", + "debug": "3.1.0", + "regexp-clone": "^1.0.0", + "safe-buffer": "5.1.2", + "sliced": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -15741,6 +15963,11 @@ } } }, + "regexp-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", + "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" + }, "registry-auth-token": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", @@ -16139,6 +16366,11 @@ "object-inspect": "^1.9.0" } }, + "sift": { + "version": "13.5.2", + "resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz", + "integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA==" + }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -16157,6 +16389,11 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "sliced": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", diff --git a/package.json b/package.json index 279a5416..3d00675b 100644 --- a/package.json +++ b/package.json @@ -4,10 +4,12 @@ "description": "Reto 9 Octubre 26: Curso de Backend con Node", "main": "index.js", "dependencies": { + "body-parser": "^1.19.0", "cors": "^2.8.5", - "dotenv": "^8.2.0", + "dotenv": "^8.6.0", "express": "^4.17.1", - "mongodb": "^3.6.6" + "mongodb": "^3.6.6", + "mongoose": "^5.12.13" }, "devDependencies": { "jest": "^26.6.3", diff --git a/routes/api/categories_controller.js b/routes/api/categories_controller.js new file mode 100644 index 00000000..1360e3cd --- /dev/null +++ b/routes/api/categories_controller.js @@ -0,0 +1,71 @@ +const express = require('express'); +const { reset } = require('nodemon'); +const router = express.Router(); +//Categories model +const Categories = require('../../models/Categories'); + +//@routes Get api/categories +//@desc Get all categories +router.get('/', async (req, res) => { + try { + const categories = await Categories.find(); + if(!Categories) throw Error('No Items'); + res.status(200).json(Categories); + }catch(err) { + res.status(400).json({mesg: err}) + } +}); + +//@routes Show api/Categories/:id +//@desc Show a category +router.get('/:id', async (req, res) => { + try { + const categories = await Categories.findById(req.params.id); + if(!categories) throw Error('No Items'); + res.status(200).json(categories); + }catch(err) { + res.status(400).json({mesg: err}) + } +}); + +//@routes Post api/Categories +//@desc Create a category + +router.post('/', async (req, res) => { + const newPost = new Categories(req.body); + + try { + const categories = await newPost.save(); + if(!categories) throw Error('Ocurrio un error con la creación de la categoría') + res.status(200).json(categories); + } catch { + res.status(400).json({msg: error}) + } +}); + +//@routes Delete api/Categories/:id +//@desc Delete a category +router.delete('/:id', async (req, res) => { + try { + const categories = await Categories.findByIdAndDelete(req.params.id); + if(!categories) throw Error('Categoría no encontrada'); + res.status(200).json({success: true}) + }catch(err) { + res.status(400).json({msg: error}) + } +}); + +//@routes Update api/Categories/:id +//@desc Update a category +router.patch('/:id', async (req, res) => { + try { + const categories = await Categories.findByIdAndUpdate(req.params.id, req.body); + if(!categories) throw Error('Algo salio mal con la actualización de la categoría'); + res.status(200).json({success: true}); + }catch(err) { + res.status(400).json({msg:err}); + } +}); + + +module.exports = router; \ No newline at end of file diff --git a/routes/api/products_controller.js b/routes/api/products_controller.js new file mode 100644 index 00000000..2c4eea38 --- /dev/null +++ b/routes/api/products_controller.js @@ -0,0 +1,71 @@ +const express = require('express'); +const { reset } = require('nodemon'); +const router = express.Router(); +//Products model +const Products = require('../../models/Products'); + +//@routes Get api/products +//@desc Get all products +router.get('/', async (req, res) => { + try { + const products = await Products.find(); + if(!Products) throw Error('No Items'); + res.status(200).json(Products); + }catch(err) { + res.status(400).json({mesg: err}) + } +}); + +//@routes Show api/Products/:id +//@desc Show a product +router.get('/:id', async (req, res) => { + try { + const products = await Products.findById(req.params.id); + if(!products) throw Error('No Items'); + res.status(200).json(products); + }catch(err) { + res.status(400).json({mesg: err}) + } +}); + +//@routes Product api/Products +//@desc Create a product + +router.post('/', async (req, res) => { + const newPost = new Products(req.body); + + try { + const products = await newPost.save(); + if(!products) throw Error('Ocurrio un error con la creación del producto') + res.status(200).json(products); + } catch { + res.status(400).json({msg: error}) + } +}); + +//@routes Delete api/Products/:id +//@desc Delete a product +router.delete('/:id', async (req, res) => { + try { + const products = await Products.findByIdAndDelete(req.params.id); + if(!products) throw Error('Producto no encontrado'); + res.status(200).json({success: true}) + }catch(err) { + res.status(400).json({msg: error}) + } +}); + +//@routes Update api/Products/:id +//@desc Update a product +router.patch('/:id', async (req, res) => { + try { + const products = await Products.findByIdAndUpdate(req.params.id, req.body); + if(!products) throw Error('Algo salio mal con la actualización del producto'); + res.status(200).json({success: true}); + }catch(err) { + res.status(400).json({msg:err}); + } +}); + + +module.exports = router; \ No newline at end of file diff --git a/server.js b/server.js new file mode 100644 index 00000000..94dc061c --- /dev/null +++ b/server.js @@ -0,0 +1,29 @@ +const express = require('express'); +const mongoose = require('mongoose'); +const { MONGO_URI } = require('./config'); + + +//Routes +const productsRoutes = require('./routes/api/products_controller'); +const categoriesRoutes = require('./routes/api/categories_controller'); + +const app = express(); + +//BodyParser Middleware +app.use(express.json()); + +//connect to mongo +mongoose.connect(MONGO_URI, { + useNewUrlParser: true, + useUnifiedTopology: true, + useFindAndModify: false +}) + .then(() => console.log('***MongoDBAtlas conectado!')) + .catch(err => console.log(err)); +//User routes +app.use('/api/products', productsRoutes); +app.use('/api/categories', categoriesRoutes); + +const PORT = process.env.PORT; + +app.listen(PORT, () => console.log(`***Server corriendo en el puerto: ${PORT}`)); \ No newline at end of file diff --git a/src/index.js b/src/index.js index 389445c1..d86ef363 100644 --- a/src/index.js +++ b/src/index.js @@ -1,11 +1,29 @@ -const { config } = require('./config'); -const createApp = require('./app'); +const express = require('express'); +const mongoose = require('mongoose'); +const { MONGO_URI } = require('../config'); -const app = createApp(); -app.listen(config.port, err => { - if (err) { - console.error("Error: ", err); - return; - } -}); \ No newline at end of file +//Routes +const productsRoutes = require('../routes/api/products_controller'); +const categoriesRoutes = require('../routes/api/categories_controller'); + +const app = express(); + +//BodyParser Middleware +app.use(express.json()); + +//connect to mongo +mongoose.connect(MONGO_URI, { + useNewUrlParser: true, + useUnifiedTopology: true, + useFindAndModify: false +}) + .then(() => console.log('***MongoDBAtlas conectado!')) + .catch(err => console.log(err)); +//User routes +app.use('./api/products', productsRoutes); +app.use('./api/categories', categoriesRoutes); + +const PORT = process.env.PORT; + +app.listen(PORT, () => console.log(`***Server corriendo en el puerto: ${PORT}`)); \ No newline at end of file