From 1916e343f4d5e60272274f58a92d499ecbc064a4 Mon Sep 17 00:00:00 2001 From: ChelleAmon Date: Wed, 22 Sep 2021 15:00:12 -0700 Subject: [PATCH 01/12] chore(mongoose): run npm install mongoose --save --- package-lock.json | 193 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 1 + 2 files changed, 192 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8576f71..6a55cba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -388,8 +388,7 @@ "@types/node": { "version": "15.14.9", "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", - "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==", - "dev": true + "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==" }, "@types/normalize-package-data": { "version": "2.4.1", @@ -428,6 +427,20 @@ "socket.io-client": "*" } }, + "@types/webidl-conversions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", + "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==" + }, + "@types/whatwg-url": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz", + "integrity": "sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ==", + "requires": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, "@typescript-eslint/eslint-plugin": { "version": "4.31.2", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.2.tgz", @@ -696,6 +709,11 @@ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, "base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", @@ -816,6 +834,23 @@ "fill-range": "^7.0.1" } }, + "bson": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.5.2.tgz", + "integrity": "sha512-8CEMJpwc7qlQtrn2rney38jQSEeMar847lz0LyitwRmVknAW8iHXrzW4fTjHfyWm0E3sukyD/zppdH+QU1QefA==", + "requires": { + "buffer": "^5.6.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", @@ -1116,6 +1151,11 @@ "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, + "denque": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", + "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==" + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -1591,6 +1631,11 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, "ignore": { "version": "5.1.8", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", @@ -1755,6 +1800,11 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "kareem": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", + "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" + }, "keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", @@ -1828,6 +1878,12 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, + "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==", + "optional": true + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -1893,6 +1949,79 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, + "mongodb": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.1.1.tgz", + "integrity": "sha512-fbACrWEyvr6yl0sSiCGV0sqEiBwTtDJ8iSojmkDjAfw9JnOZSAkUyv9seFSPYhPPKwxp1PDtyjvBNfMDz0WBLQ==", + "requires": { + "bson": "^4.5.1", + "denque": "^1.5.0", + "mongodb-connection-string-url": "^2.0.0", + "saslprep": "^1.0.0" + } + }, + "mongodb-connection-string-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.1.0.tgz", + "integrity": "sha512-Qf9Zw7KGiRljWvMrrUFDdVqo46KIEiDuCzvEN97rh/PcKzk2bd6n9KuzEwBwW9xo5glwx69y1mI6s+jFUD/aIQ==", + "requires": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^9.1.0" + } + }, + "mongoose": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.0.7.tgz", + "integrity": "sha512-44STDcV6awu0zfo1Z3NyKPHZwfVrGU93/QgR0gYbt4bik/nEa7lI1RRGcq5oyGM0YE7l63i2j80v1OhvrlFvYw==", + "requires": { + "bson": "^4.2.2", + "kareem": "2.3.2", + "mongodb": "4.1.1", + "mpath": "0.8.4", + "mquery": "4.0.0", + "ms": "2.1.2", + "regexp-clone": "1.0.0", + "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==" + } + } + }, + "mpath": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", + "integrity": "sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==" + }, + "mquery": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.0.tgz", + "integrity": "sha512-nGjm89lHja+T/b8cybAby6H0YgA4qYC/lx6UlwvHGqvTq8bDaNeCwl1sY8uRELrNbVWJzIihxVd+vphGGn1vBw==", + "requires": { + "debug": "4.x", + "regexp-clone": "^1.0.0", + "sliced": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -2116,6 +2245,11 @@ "once": "^1.3.1" } }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, "pupa": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", @@ -2185,6 +2319,11 @@ "picomatch": "^2.2.1" } }, + "regexp-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", + "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" + }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -2268,6 +2407,15 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -2337,6 +2485,11 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, + "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.4", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.4.tgz", @@ -2349,6 +2502,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=" + }, "socket.io": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.2.0.tgz", @@ -2453,6 +2611,15 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } + }, "spawn-command": { "version": "0.0.2-1", "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", @@ -2572,6 +2739,14 @@ "nopt": "~1.0.10" } }, + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "requires": { + "punycode": "^2.1.1" + } + }, "tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -2767,6 +2942,20 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" + }, + "whatwg-url": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-9.1.0.tgz", + "integrity": "sha512-CQ0UcrPHyomtlOCot1TL77WyMIm/bCwrJ2D6AOKGwEczU9EpyoqAokfqrf/MioU9kHcMsmJZcg1egXix2KYEsA==", + "requires": { + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + }, "widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", diff --git a/package.json b/package.json index 28d1c53..e075ffb 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ }, "dependencies": { "express": "^4.17.1", + "mongoose": "^6.0.7", "socket.io": "^4.1.2" }, "devDependencies": { From 4ebf55d482a8fe06f6a25abba9121cca0b62cfb1 Mon Sep 17 00:00:00 2001 From: ChelleAmon Date: Wed, 22 Sep 2021 15:02:44 -0700 Subject: [PATCH 02/12] chore(mongoose): run npm install -save-dev @types/mongoose --- package-lock.json | 9 +++++++++ package.json | 1 + 2 files changed, 10 insertions(+) diff --git a/package-lock.json b/package-lock.json index 6a55cba..01ae196 100644 --- a/package-lock.json +++ b/package-lock.json @@ -385,6 +385,15 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, + "@types/mongoose": { + "version": "5.11.97", + "resolved": "https://registry.npmjs.org/@types/mongoose/-/mongoose-5.11.97.tgz", + "integrity": "sha512-cqwOVYT3qXyLiGw7ueU2kX9noE8DPGRY6z8eUxudhXY8NZ7DMKYAxyZkLSevGfhCX3dO/AoX5/SO9lAzfjon0Q==", + "dev": true, + "requires": { + "mongoose": "*" + } + }, "@types/node": { "version": "15.14.9", "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", diff --git a/package.json b/package.json index e075ffb..3780ea1 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "devDependencies": { "@babel/preset-typescript": "^7.14.5", "@types/express": "^4.17.12", + "@types/mongoose": "^5.11.97", "@types/node": "^15.12.2", "@types/socket.io-client": "^3.0.0", "@typescript-eslint/eslint-plugin": "^4.26.1", From 646b78792e47a2f1b7a28e3d1c25cfe8cc94860c Mon Sep 17 00:00:00 2001 From: ChelleAmon Date: Wed, 22 Sep 2021 15:07:15 -0700 Subject: [PATCH 03/12] feat(server, db): add user schema --- src/server/schema/user.schema.ts | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/server/schema/user.schema.ts diff --git a/src/server/schema/user.schema.ts b/src/server/schema/user.schema.ts new file mode 100644 index 0000000..eb8689b --- /dev/null +++ b/src/server/schema/user.schema.ts @@ -0,0 +1,8 @@ +import mongoose from 'mongoose'; + +const UserSchema = new mongoose.Schema({ + name: {type: String, required: true}, + email: {type: String, required: true} +}); + +export const UserModel = mongoose.model('User', UserSchema ) \ No newline at end of file From baf71f51de15968849f098e73a3b4b329377a3eb Mon Sep 17 00:00:00 2001 From: ChelleAmon Date: Wed, 22 Sep 2021 15:21:33 -0700 Subject: [PATCH 04/12] refactor(server,route): update db --- src/server/server.ts | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/server/server.ts b/src/server/server.ts index 637d16b..9089ebc 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -1,12 +1,22 @@ +import { UserModel } from './schema/user.schema.js'; import express from 'express'; import cors from 'cors'; -import fs from 'fs'; import path from 'path'; +import mongoose from 'mongoose'; const app = express(); const __dirname = path.resolve(); const PORT = 3501; + +mongoose.connect('mongodb://localhost:27017/test') +.then(() =>{ + console.log('Successfully connected to DB'); +}).catch(err => { + console.log(err, 'DB failed') +}) + + app.use(cors()); @@ -15,7 +25,13 @@ app.get('/', function(req, res) { }); app.get('/users', function(req,res){ - res.sendFile(path.join(__dirname, 'users.json')); + UserModel.find() + .then(users => { + res.json({data:users}) + }).catch(err => { + res.status(501); + res.json({errors: err}) + }) }); From 84de57a5e42cac07178b42bc0d28d9fdbde8c37e Mon Sep 17 00:00:00 2001 From: ChelleAmon Date: Wed, 22 Sep 2021 15:35:32 -0700 Subject: [PATCH 05/12] feat(server, route): add user create route --- src/server/server.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/server/server.ts b/src/server/server.ts index 9089ebc..cc56b14 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -18,6 +18,7 @@ mongoose.connect('mongodb://localhost:27017/test') app.use(cors()); +app.use(express.json()); app.get('/', function(req, res) { @@ -34,6 +35,20 @@ app.get('/users', function(req,res){ }) }); +app.post('/create-user', function (req,res){ + const {name, email} = req.body; + const user = new UserModel({ + name, + email, + }); + user.save() + .then(data => { + res.json({data}); + }).catch(error =>{ + res.status(501); + res.json({errors:error}) + }) +}); app.listen(PORT, function(){ console.log( `starting at localhost http://localhost: ${PORT}`); From a288762d0a079a9072265439b938e5e55a1f00f7 Mon Sep 17 00:00:00 2001 From: ChelleAmon Date: Wed, 22 Sep 2021 16:13:09 -0700 Subject: [PATCH 06/12] feat(server,db): Add post schema --- src/server/schema/post.schema.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/server/schema/post.schema.ts diff --git a/src/server/schema/post.schema.ts b/src/server/schema/post.schema.ts new file mode 100644 index 0000000..97e6fe0 --- /dev/null +++ b/src/server/schema/post.schema.ts @@ -0,0 +1,14 @@ +import mongoose from 'mongoose'; + +interface Post{ + title: string, + body: string, +} + +const PostSchema = new mongoose.Schema({ + title: {type: String, required: true}, + body: {type: String, required: true}, +}); + + +export const PostModel = mongoose.model('Post', PostSchema) \ No newline at end of file From f0331e12d0acdb93908bc53318d117b24920088d Mon Sep 17 00:00:00 2001 From: ChelleAmon Date: Wed, 22 Sep 2021 21:05:20 -0700 Subject: [PATCH 07/12] feat(server,post): Add db interaction for post --- src/client/src/app/app.module.ts | 4 ++- .../add-user/add-user.component.html | 1 + .../add-user/add-user.component.scss | 0 .../components/add-user/add-user.component.ts | 15 ++++++++++ src/server/server.ts | 28 +++++++++++++++++++ 5 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 src/client/src/app/components/add-user/add-user.component.html create mode 100644 src/client/src/app/components/add-user/add-user.component.scss create mode 100644 src/client/src/app/components/add-user/add-user.component.ts diff --git a/src/client/src/app/app.module.ts b/src/client/src/app/app.module.ts index 38150af..1635e76 100644 --- a/src/client/src/app/app.module.ts +++ b/src/client/src/app/app.module.ts @@ -3,10 +3,12 @@ import { BrowserModule } from '@angular/platform-browser'; import { HttpClientModule } from '@angular/common/http'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; +import { AddUserComponent } from './components/add-user/add-user.component'; @NgModule({ declarations: [ - AppComponent + AppComponent, + AddUserComponent ], imports: [ BrowserModule, diff --git a/src/client/src/app/components/add-user/add-user.component.html b/src/client/src/app/components/add-user/add-user.component.html new file mode 100644 index 0000000..0c8da7d --- /dev/null +++ b/src/client/src/app/components/add-user/add-user.component.html @@ -0,0 +1 @@ +

add-user works!

diff --git a/src/client/src/app/components/add-user/add-user.component.scss b/src/client/src/app/components/add-user/add-user.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/client/src/app/components/add-user/add-user.component.ts b/src/client/src/app/components/add-user/add-user.component.ts new file mode 100644 index 0000000..1dcc3a3 --- /dev/null +++ b/src/client/src/app/components/add-user/add-user.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-add-user', + templateUrl: './add-user.component.html', + styleUrls: ['./add-user.component.scss'] +}) +export class AddUserComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/src/server/server.ts b/src/server/server.ts index cc56b14..5d6fc94 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -1,4 +1,6 @@ import { UserModel } from './schema/user.schema.js'; +import { PostModel } from './schema/post.schema.js'; + import express from 'express'; import cors from 'cors'; import path from 'path'; @@ -50,6 +52,32 @@ app.post('/create-user', function (req,res){ }) }); +app.get('/posts', function(req,res){ + PostModel.find() + .then(posts => { + res.json({data:posts}) + }).catch(err => { + res.status(501); + res.json({errors: err}) + }) +}); + +app.post('/create-post', function (req,res){ + const {title, body} = req.body; + const post = new PostModel({ + title, + body, + }); + post.save() + .then(data => { + res.json({data}); + }).catch(error =>{ + res.status(501); + res.json({errors:error}) + }) +}); + + app.listen(PORT, function(){ console.log( `starting at localhost http://localhost: ${PORT}`); }) From b796f33b673e8345749055dfe94a6ed4743e52f8 Mon Sep 17 00:00:00 2001 From: ChelleAmon Date: Wed, 22 Sep 2021 21:15:06 -0700 Subject: [PATCH 08/12] feat(client, user): import Forms Module. --- src/client/src/app/app.component.html | 2 +- src/client/src/app/app.module.ts | 2 ++ .../app/components/add-user/add-user.component.html | 10 +++++++++- .../src/app/components/add-user/add-user.component.ts | 4 +++- src/server/server.ts | 2 +- 5 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/client/src/app/app.component.html b/src/client/src/app/app.component.html index 25c25d5..61c1487 100644 --- a/src/client/src/app/app.component.html +++ b/src/client/src/app/app.component.html @@ -1 +1 @@ -{{title}} \ No newline at end of file + diff --git a/src/client/src/app/app.module.ts b/src/client/src/app/app.module.ts index 1635e76..b303d1b 100644 --- a/src/client/src/app/app.module.ts +++ b/src/client/src/app/app.module.ts @@ -4,6 +4,7 @@ import { HttpClientModule } from '@angular/common/http'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { AddUserComponent } from './components/add-user/add-user.component'; +import { FormsModule } from '@angular/forms'; @NgModule({ declarations: [ @@ -14,6 +15,7 @@ import { AddUserComponent } from './components/add-user/add-user.component'; BrowserModule, AppRoutingModule, HttpClientModule, + FormsModule, ], providers: [], bootstrap: [AppComponent] diff --git a/src/client/src/app/components/add-user/add-user.component.html b/src/client/src/app/components/add-user/add-user.component.html index 0c8da7d..1fde548 100644 --- a/src/client/src/app/components/add-user/add-user.component.html +++ b/src/client/src/app/components/add-user/add-user.component.html @@ -1 +1,9 @@ -

add-user works!

+

Add User

+ +

+ Name: +

+

+ Email: +

+ diff --git a/src/client/src/app/components/add-user/add-user.component.ts b/src/client/src/app/components/add-user/add-user.component.ts index 1dcc3a3..10cb334 100644 --- a/src/client/src/app/components/add-user/add-user.component.ts +++ b/src/client/src/app/components/add-user/add-user.component.ts @@ -6,7 +6,9 @@ import { Component, OnInit } from '@angular/core'; styleUrls: ['./add-user.component.scss'] }) export class AddUserComponent implements OnInit { - + name!: string; + email!: string; + constructor() { } ngOnInit(): void { diff --git a/src/server/server.ts b/src/server/server.ts index 5d6fc94..c4d2dc6 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -79,5 +79,5 @@ app.post('/create-post', function (req,res){ app.listen(PORT, function(){ - console.log( `starting at localhost http://localhost: ${PORT}`); + console.log( `starting at localhost http://localhost:${PORT}`); }) From 64b419cd75d916f88238982673e53710143ed43f Mon Sep 17 00:00:00 2001 From: ChelleAmon Date: Wed, 22 Sep 2021 22:28:38 -0700 Subject: [PATCH 09/12] feat(client,user): Add function to create user --- .../add-user/add-user.component.html | 2 +- .../components/add-user/add-user.component.ts | 11 ++++++-- src/client/src/app/model/user.ts | 4 +++ src/client/src/app/services/api.service.ts | 6 ++++- src/client/src/app/services/user.service.ts | 27 +++++++++++++++++++ 5 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 src/client/src/app/model/user.ts create mode 100644 src/client/src/app/services/user.service.ts diff --git a/src/client/src/app/components/add-user/add-user.component.html b/src/client/src/app/components/add-user/add-user.component.html index 1fde548..0cc95d1 100644 --- a/src/client/src/app/components/add-user/add-user.component.html +++ b/src/client/src/app/components/add-user/add-user.component.html @@ -6,4 +6,4 @@

Add User

Email:

- + diff --git a/src/client/src/app/components/add-user/add-user.component.ts b/src/client/src/app/components/add-user/add-user.component.ts index 10cb334..cd1375d 100644 --- a/src/client/src/app/components/add-user/add-user.component.ts +++ b/src/client/src/app/components/add-user/add-user.component.ts @@ -1,4 +1,5 @@ import { Component, OnInit } from '@angular/core'; +import { UserService } from 'src/app/services/user.service'; @Component({ selector: 'app-add-user', @@ -8,10 +9,16 @@ import { Component, OnInit } from '@angular/core'; export class AddUserComponent implements OnInit { name!: string; email!: string; - - constructor() { } + + constructor(private userService: UserService) { + + } ngOnInit(): void { } + addUser(){ + this.userService.addUser(this.name, this.email).subscribe() + } + } diff --git a/src/client/src/app/model/user.ts b/src/client/src/app/model/user.ts new file mode 100644 index 0000000..776d0c1 --- /dev/null +++ b/src/client/src/app/model/user.ts @@ -0,0 +1,4 @@ +export class User { + name!: string; + email!: string; +} diff --git a/src/client/src/app/services/api.service.ts b/src/client/src/app/services/api.service.ts index 8707bc8..713a7ff 100644 --- a/src/client/src/app/services/api.service.ts +++ b/src/client/src/app/services/api.service.ts @@ -6,10 +6,14 @@ import { Injectable } from '@angular/core'; }) export class ApiService { baseUrl:string = 'http://localhost:3501/'; - constructor(private http: HttpClient) + constructor(private http: HttpClient) { } get(resourceName: string) { return this.http.get(this.baseUrl + resourceName); } + + post(resourceName: string, data:D){ + return this.http.post(this.baseUrl + resourceName, data) + } } diff --git a/src/client/src/app/services/user.service.ts b/src/client/src/app/services/user.service.ts new file mode 100644 index 0000000..01bbdf1 --- /dev/null +++ b/src/client/src/app/services/user.service.ts @@ -0,0 +1,27 @@ +import { User } from 'src/app/model/user'; +import { Observable } from 'rxjs'; +import { Injectable } from '@angular/core'; +import { ApiService } from './api.service'; + +@Injectable({ + providedIn: 'root' +}) +export class UserService { + + users$: Observable = new Observable(observer => { + observer.next([]); + }); + + constructor(private api: ApiService) { } + + getUsers(){ + this.users$ = this.api.get('users') + } + + addUser(name:string, email: string){ + const user = new User(); + user.name = name; + user.email = email; + return this.api.post('create-user', user); + } +} From 625851b1edd096446ca8389bbd6e56d553a0b05b Mon Sep 17 00:00:00 2001 From: ChelleAmon Date: Thu, 23 Sep 2021 09:09:36 -0700 Subject: [PATCH 10/12] feat(route): add navigation, router-outlet --- src/client/src/app/app-routing.module.ts | 7 ++++++- src/client/src/app/app.component.html | 3 ++- src/client/src/app/app.module.ts | 6 +++++- .../components/add-post/add-post.component.html | 1 + .../components/add-post/add-post.component.scss | 0 .../app/components/add-post/add-post.component.ts | 15 +++++++++++++++ .../navigation/navigation.component.html | 5 +++++ .../navigation/navigation.component.scss | 0 .../components/navigation/navigation.component.ts | 15 +++++++++++++++ 9 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 src/client/src/app/components/add-post/add-post.component.html create mode 100644 src/client/src/app/components/add-post/add-post.component.scss create mode 100644 src/client/src/app/components/add-post/add-post.component.ts create mode 100644 src/client/src/app/components/navigation/navigation.component.html create mode 100644 src/client/src/app/components/navigation/navigation.component.scss create mode 100644 src/client/src/app/components/navigation/navigation.component.ts diff --git a/src/client/src/app/app-routing.module.ts b/src/client/src/app/app-routing.module.ts index 0297262..36492ea 100644 --- a/src/client/src/app/app-routing.module.ts +++ b/src/client/src/app/app-routing.module.ts @@ -1,7 +1,12 @@ +import { AddPostComponent } from './components/add-post/add-post.component'; import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; +import { AddUserComponent } from './components/add-user/add-user.component'; -const routes: Routes = []; +const routes: Routes = [ + {path: "create-post", component:AddPostComponent }, + {path: "create-user", component:AddUserComponent }, +]; @NgModule({ imports: [RouterModule.forRoot(routes)], diff --git a/src/client/src/app/app.component.html b/src/client/src/app/app.component.html index 61c1487..04cd27d 100644 --- a/src/client/src/app/app.component.html +++ b/src/client/src/app/app.component.html @@ -1 +1,2 @@ - + + diff --git a/src/client/src/app/app.module.ts b/src/client/src/app/app.module.ts index b303d1b..c68e290 100644 --- a/src/client/src/app/app.module.ts +++ b/src/client/src/app/app.module.ts @@ -5,11 +5,15 @@ import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { AddUserComponent } from './components/add-user/add-user.component'; import { FormsModule } from '@angular/forms'; +import { AddPostComponent } from './components/add-post/add-post.component'; +import { NavigationComponent } from './components/navigation/navigation.component'; @NgModule({ declarations: [ AppComponent, - AddUserComponent + AddUserComponent, + AddPostComponent, + NavigationComponent ], imports: [ BrowserModule, diff --git a/src/client/src/app/components/add-post/add-post.component.html b/src/client/src/app/components/add-post/add-post.component.html new file mode 100644 index 0000000..786c16c --- /dev/null +++ b/src/client/src/app/components/add-post/add-post.component.html @@ -0,0 +1 @@ +

add-post works!

diff --git a/src/client/src/app/components/add-post/add-post.component.scss b/src/client/src/app/components/add-post/add-post.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/client/src/app/components/add-post/add-post.component.ts b/src/client/src/app/components/add-post/add-post.component.ts new file mode 100644 index 0000000..d0d5cd7 --- /dev/null +++ b/src/client/src/app/components/add-post/add-post.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-add-post', + templateUrl: './add-post.component.html', + styleUrls: ['./add-post.component.scss'] +}) +export class AddPostComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/src/client/src/app/components/navigation/navigation.component.html b/src/client/src/app/components/navigation/navigation.component.html new file mode 100644 index 0000000..2ecf4bc --- /dev/null +++ b/src/client/src/app/components/navigation/navigation.component.html @@ -0,0 +1,5 @@ +

Full-Stack-Project

+ diff --git a/src/client/src/app/components/navigation/navigation.component.scss b/src/client/src/app/components/navigation/navigation.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/client/src/app/components/navigation/navigation.component.ts b/src/client/src/app/components/navigation/navigation.component.ts new file mode 100644 index 0000000..18be053 --- /dev/null +++ b/src/client/src/app/components/navigation/navigation.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-navigation', + templateUrl: './navigation.component.html', + styleUrls: ['./navigation.component.scss'] +}) +export class NavigationComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} From 11f5a2d1308cc41ddf9491159ee3da1c5c368709 Mon Sep 17 00:00:00 2001 From: ChelleAmon Date: Thu, 23 Sep 2021 09:56:01 -0700 Subject: [PATCH 11/12] feat(client, post): add function to create post --- .../add-post/add-post.component.html | 17 +++++++++++- .../components/add-post/add-post.component.ts | 11 +++++++- src/client/src/app/model/post.ts | 4 +++ src/client/src/app/services/post.service.ts | 27 +++++++++++++++++++ 4 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 src/client/src/app/model/post.ts create mode 100644 src/client/src/app/services/post.service.ts diff --git a/src/client/src/app/components/add-post/add-post.component.html b/src/client/src/app/components/add-post/add-post.component.html index 786c16c..6aed3a3 100644 --- a/src/client/src/app/components/add-post/add-post.component.html +++ b/src/client/src/app/components/add-post/add-post.component.html @@ -1 +1,16 @@ -

add-post works!

+

Posts

+ +

Title:

+ +
+

Subject:

+ +
+ + +
+
    + +
+
+ diff --git a/src/client/src/app/components/add-post/add-post.component.ts b/src/client/src/app/components/add-post/add-post.component.ts index d0d5cd7..a08597d 100644 --- a/src/client/src/app/components/add-post/add-post.component.ts +++ b/src/client/src/app/components/add-post/add-post.component.ts @@ -1,3 +1,4 @@ +import { PostService } from './../../services/post.service'; import { Component, OnInit } from '@angular/core'; @Component({ @@ -6,10 +7,18 @@ import { Component, OnInit } from '@angular/core'; styleUrls: ['./add-post.component.scss'] }) export class AddPostComponent implements OnInit { + title!: string; + body!: string; - constructor() { } + constructor(private postService: PostService) { + + } ngOnInit(): void { + } + addPost(){ + return this.postService.addPost(this.title, this.body).subscribe(); + } } diff --git a/src/client/src/app/model/post.ts b/src/client/src/app/model/post.ts new file mode 100644 index 0000000..5a16fff --- /dev/null +++ b/src/client/src/app/model/post.ts @@ -0,0 +1,4 @@ +export class Post { + title!: string; + body!: string; +} diff --git a/src/client/src/app/services/post.service.ts b/src/client/src/app/services/post.service.ts new file mode 100644 index 0000000..d1248ac --- /dev/null +++ b/src/client/src/app/services/post.service.ts @@ -0,0 +1,27 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { Post } from '../model/post'; +import { ApiService } from './api.service'; + +@Injectable({ + providedIn: 'root' +}) +export class PostService { + posts$: Observable = new Observable(observer => { + observer.next([]) + }) + + constructor(private api: ApiService) { } + + getPosts(){ + this.posts$ = this.api.get('posts'); + } + + addPost(title:string, body:string){ + const post = new Post(); + post.title =title; + post.body = body; + + return this.api.post('create-post', post) + } +} From ba9de2626b0604497aec7cf86392cc0d2dcdfd22 Mon Sep 17 00:00:00 2001 From: ChelleAmon Date: Thu, 23 Sep 2021 09:57:45 -0700 Subject: [PATCH 12/12] refactor(server): modify res.json to catch error --- src/server/server.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/server/server.ts b/src/server/server.ts index c4d2dc6..8c6ab16 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -72,8 +72,7 @@ app.post('/create-post', function (req,res){ .then(data => { res.json({data}); }).catch(error =>{ - res.status(501); - res.json({errors:error}) + res.status(501).json({errors:error}) }) });