Merge branch 'master' of https://bitbucket.org/vel1024/capstone
Showing
15 changed files
with
357 additions
and
17 deletions
... | @@ -9,4 +9,6 @@ COPY prisma ./prisma/ | ... | @@ -9,4 +9,6 @@ COPY prisma ./prisma/ |
9 | 9 | ||
10 | RUN npm install && npx prisma generate | 10 | RUN npm install && npx prisma generate |
11 | 11 | ||
12 | -CMD ["npm","run","dev"] | 12 | +CMD ["npm","start"] |
13 | + | ||
14 | +COPY . . | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -1372,6 +1372,11 @@ | ... | @@ -1372,6 +1372,11 @@ |
1372 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", | 1372 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", |
1373 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" | 1373 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" |
1374 | }, | 1374 | }, |
1375 | + "asap": { | ||
1376 | + "version": "2.0.6", | ||
1377 | + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", | ||
1378 | + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" | ||
1379 | + }, | ||
1375 | "asn1": { | 1380 | "asn1": { |
1376 | "version": "0.2.4", | 1381 | "version": "0.2.4", |
1377 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", | 1382 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", |
... | @@ -1410,6 +1415,14 @@ | ... | @@ -1410,6 +1415,14 @@ |
1410 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", | 1415 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", |
1411 | "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" | 1416 | "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" |
1412 | }, | 1417 | }, |
1418 | + "axios": { | ||
1419 | + "version": "0.19.2", | ||
1420 | + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", | ||
1421 | + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", | ||
1422 | + "requires": { | ||
1423 | + "follow-redirects": "1.5.10" | ||
1424 | + } | ||
1425 | + }, | ||
1413 | "babel-code-frame": { | 1426 | "babel-code-frame": { |
1414 | "version": "6.26.0", | 1427 | "version": "6.26.0", |
1415 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", | 1428 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", |
... | @@ -2017,6 +2030,11 @@ | ... | @@ -2017,6 +2030,11 @@ |
2017 | "assert-plus": "^1.0.0" | 2030 | "assert-plus": "^1.0.0" |
2018 | } | 2031 | } |
2019 | }, | 2032 | }, |
2033 | + "dayjs": { | ||
2034 | + "version": "1.8.25", | ||
2035 | + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.25.tgz", | ||
2036 | + "integrity": "sha512-Pk36juDfQQGDCgr0Lqd1kw15w3OS6xt21JaLPE3lCfsEf8KrERGwDNwvK1tRjrjqFC0uZBJncT4smZQ4F+uV5g==" | ||
2037 | + }, | ||
2020 | "debug": { | 2038 | "debug": { |
2021 | "version": "2.6.9", | 2039 | "version": "2.6.9", |
2022 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", | 2040 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", |
... | @@ -2472,6 +2490,24 @@ | ... | @@ -2472,6 +2490,24 @@ |
2472 | "locate-path": "^3.0.0" | 2490 | "locate-path": "^3.0.0" |
2473 | } | 2491 | } |
2474 | }, | 2492 | }, |
2493 | + "follow-redirects": { | ||
2494 | + "version": "1.5.10", | ||
2495 | + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", | ||
2496 | + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", | ||
2497 | + "requires": { | ||
2498 | + "debug": "=3.1.0" | ||
2499 | + }, | ||
2500 | + "dependencies": { | ||
2501 | + "debug": { | ||
2502 | + "version": "3.1.0", | ||
2503 | + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", | ||
2504 | + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", | ||
2505 | + "requires": { | ||
2506 | + "ms": "2.0.0" | ||
2507 | + } | ||
2508 | + } | ||
2509 | + } | ||
2510 | + }, | ||
2475 | "forever-agent": { | 2511 | "forever-agent": { |
2476 | "version": "0.6.1", | 2512 | "version": "0.6.1", |
2477 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", | 2513 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", |
... | @@ -3914,6 +3950,11 @@ | ... | @@ -3914,6 +3950,11 @@ |
3914 | } | 3950 | } |
3915 | } | 3951 | } |
3916 | }, | 3952 | }, |
3953 | + "pop-iterate": { | ||
3954 | + "version": "1.0.1", | ||
3955 | + "resolved": "https://registry.npmjs.org/pop-iterate/-/pop-iterate-1.0.1.tgz", | ||
3956 | + "integrity": "sha1-zqz9q0q/NT16DyqqLB/Hs/lBO6M=" | ||
3957 | + }, | ||
3917 | "prelude-ls": { | 3958 | "prelude-ls": { |
3918 | "version": "1.1.2", | 3959 | "version": "1.1.2", |
3919 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", | 3960 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", |
... | @@ -3963,11 +4004,26 @@ | ... | @@ -3963,11 +4004,26 @@ |
3963 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", | 4004 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", |
3964 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" | 4005 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" |
3965 | }, | 4006 | }, |
4007 | + "q": { | ||
4008 | + "version": "2.0.3", | ||
4009 | + "resolved": "https://registry.npmjs.org/q/-/q-2.0.3.tgz", | ||
4010 | + "integrity": "sha1-dbjbAlWhpa+C9Yw/Oqoe/sfQ0TQ=", | ||
4011 | + "requires": { | ||
4012 | + "asap": "^2.0.0", | ||
4013 | + "pop-iterate": "^1.0.1", | ||
4014 | + "weak-map": "^1.0.5" | ||
4015 | + } | ||
4016 | + }, | ||
3966 | "qs": { | 4017 | "qs": { |
3967 | "version": "6.7.0", | 4018 | "version": "6.7.0", |
3968 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", | 4019 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", |
3969 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" | 4020 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" |
3970 | }, | 4021 | }, |
4022 | + "querystringify": { | ||
4023 | + "version": "2.1.1", | ||
4024 | + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", | ||
4025 | + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" | ||
4026 | + }, | ||
3971 | "range-parser": { | 4027 | "range-parser": { |
3972 | "version": "1.2.1", | 4028 | "version": "1.2.1", |
3973 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", | 4029 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", |
... | @@ -4179,6 +4235,11 @@ | ... | @@ -4179,6 +4235,11 @@ |
4179 | } | 4235 | } |
4180 | } | 4236 | } |
4181 | }, | 4237 | }, |
4238 | + "requires-port": { | ||
4239 | + "version": "1.0.0", | ||
4240 | + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", | ||
4241 | + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" | ||
4242 | + }, | ||
4182 | "resolve": { | 4243 | "resolve": { |
4183 | "version": "1.15.1", | 4244 | "version": "1.15.1", |
4184 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", | 4245 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", |
... | @@ -4198,6 +4259,11 @@ | ... | @@ -4198,6 +4259,11 @@ |
4198 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", | 4259 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", |
4199 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" | 4260 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" |
4200 | }, | 4261 | }, |
4262 | + "rootpath": { | ||
4263 | + "version": "0.1.2", | ||
4264 | + "resolved": "https://registry.npmjs.org/rootpath/-/rootpath-0.1.2.tgz", | ||
4265 | + "integrity": "sha1-Wzeah9ypBum5HWkKWZQ5vvJn6ms=" | ||
4266 | + }, | ||
4201 | "run-parallel": { | 4267 | "run-parallel": { |
4202 | "version": "1.1.9", | 4268 | "version": "1.1.9", |
4203 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", | 4269 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", |
... | @@ -4219,6 +4285,11 @@ | ... | @@ -4219,6 +4285,11 @@ |
4219 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", | 4285 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", |
4220 | "optional": true | 4286 | "optional": true |
4221 | }, | 4287 | }, |
4288 | + "scmp": { | ||
4289 | + "version": "2.1.0", | ||
4290 | + "resolved": "https://registry.npmjs.org/scmp/-/scmp-2.1.0.tgz", | ||
4291 | + "integrity": "sha512-o/mRQGk9Rcer/jEEw/yw4mwo3EU/NvYvp577/Btqrym9Qy5/MdWGBqipbALgd2lrdWTJ5/gqDusxfnQBxOxT2Q==" | ||
4292 | + }, | ||
4222 | "semver": { | 4293 | "semver": { |
4223 | "version": "5.7.1", | 4294 | "version": "5.7.1", |
4224 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", | 4295 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", |
... | @@ -4575,6 +4646,31 @@ | ... | @@ -4575,6 +4646,31 @@ |
4575 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", | 4646 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", |
4576 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" | 4647 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" |
4577 | }, | 4648 | }, |
4649 | + "twilio": { | ||
4650 | + "version": "3.42.2", | ||
4651 | + "resolved": "https://registry.npmjs.org/twilio/-/twilio-3.42.2.tgz", | ||
4652 | + "integrity": "sha512-59vtghp5XZXCAt19Z8mqyVMmJ3ZEEp3/JPrAjVoIbLqiGuIeffM90eXx6TWUXEwVqAdVoihrqUkzVTIlCresDQ==", | ||
4653 | + "requires": { | ||
4654 | + "@types/express": "^4.17.3", | ||
4655 | + "axios": "^0.19.2", | ||
4656 | + "dayjs": "^1.8.21", | ||
4657 | + "jsonwebtoken": "^8.5.1", | ||
4658 | + "lodash": "^4.17.15", | ||
4659 | + "q": "2.0.x", | ||
4660 | + "qs": "^6.9.1", | ||
4661 | + "rootpath": "^0.1.2", | ||
4662 | + "scmp": "^2.1.0", | ||
4663 | + "url-parse": "^1.4.7", | ||
4664 | + "xmlbuilder": "^13.0.2" | ||
4665 | + }, | ||
4666 | + "dependencies": { | ||
4667 | + "qs": { | ||
4668 | + "version": "6.9.3", | ||
4669 | + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", | ||
4670 | + "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==" | ||
4671 | + } | ||
4672 | + } | ||
4673 | + }, | ||
4578 | "type-check": { | 4674 | "type-check": { |
4579 | "version": "0.3.2", | 4675 | "version": "0.3.2", |
4580 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", | 4676 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", |
... | @@ -4704,6 +4800,15 @@ | ... | @@ -4704,6 +4800,15 @@ |
4704 | "punycode": "^2.1.0" | 4800 | "punycode": "^2.1.0" |
4705 | } | 4801 | } |
4706 | }, | 4802 | }, |
4803 | + "url-parse": { | ||
4804 | + "version": "1.4.7", | ||
4805 | + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", | ||
4806 | + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", | ||
4807 | + "requires": { | ||
4808 | + "querystringify": "^2.1.1", | ||
4809 | + "requires-port": "^1.0.0" | ||
4810 | + } | ||
4811 | + }, | ||
4707 | "url-parse-lax": { | 4812 | "url-parse-lax": { |
4708 | "version": "1.0.0", | 4813 | "version": "1.0.0", |
4709 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", | 4814 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", |
... | @@ -4752,6 +4857,11 @@ | ... | @@ -4752,6 +4857,11 @@ |
4752 | "extsprintf": "^1.2.0" | 4857 | "extsprintf": "^1.2.0" |
4753 | } | 4858 | } |
4754 | }, | 4859 | }, |
4860 | + "weak-map": { | ||
4861 | + "version": "1.0.5", | ||
4862 | + "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.5.tgz", | ||
4863 | + "integrity": "sha1-eWkVhNmGB/UHC9O3CkDmuyLkAes=" | ||
4864 | + }, | ||
4755 | "webidl-conversions": { | 4865 | "webidl-conversions": { |
4756 | "version": "2.0.1", | 4866 | "version": "2.0.1", |
4757 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-2.0.1.tgz", | 4867 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-2.0.1.tgz", |
... | @@ -4822,6 +4932,11 @@ | ... | @@ -4822,6 +4932,11 @@ |
4822 | "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=", | 4932 | "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=", |
4823 | "optional": true | 4933 | "optional": true |
4824 | }, | 4934 | }, |
4935 | + "xmlbuilder": { | ||
4936 | + "version": "13.0.2", | ||
4937 | + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-13.0.2.tgz", | ||
4938 | + "integrity": "sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==" | ||
4939 | + }, | ||
4825 | "yallist": { | 4940 | "yallist": { |
4826 | "version": "2.1.2", | 4941 | "version": "2.1.2", |
4827 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", | 4942 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", | ... | ... |
... | @@ -3,7 +3,7 @@ | ... | @@ -3,7 +3,7 @@ |
3 | "version": "1.0.0", | 3 | "version": "1.0.0", |
4 | "description": "1st semester capstone design project", | 4 | "description": "1st semester capstone design project", |
5 | "scripts": { | 5 | "scripts": { |
6 | - "dev": "nodemon --exec babel-node src/server.js", | 6 | + "start": "nodemon --exec babel-node src/server.js", |
7 | "prisma": "prisma2 studio --experimental" | 7 | "prisma": "prisma2 studio --experimental" |
8 | }, | 8 | }, |
9 | "repository": { | 9 | "repository": { |
... | @@ -22,7 +22,8 @@ | ... | @@ -22,7 +22,8 @@ |
22 | "jsonwebtoken": "^8.5.1", | 22 | "jsonwebtoken": "^8.5.1", |
23 | "merge-graphql-schemas": "^1.7.7", | 23 | "merge-graphql-schemas": "^1.7.7", |
24 | "nodemailer": "^6.4.6", | 24 | "nodemailer": "^6.4.6", |
25 | - "nodemailer-sendgrid-transport": "^0.2.0" | 25 | + "nodemailer-sendgrid-transport": "^0.2.0", |
26 | + "twilio": "^3.42.2" | ||
26 | }, | 27 | }, |
27 | "devDependencies": { | 28 | "devDependencies": { |
28 | "@babel/core": "^7.9.0", | 29 | "@babel/core": "^7.9.0", | ... | ... |
1 | +# Migration `20200424124259-init` | ||
2 | + | ||
3 | +This migration has been generated by sdy at 4/24/2020, 12:42:59 PM. | ||
4 | +You can check out the [state of the schema](./schema.prisma) after the migration. | ||
5 | + | ||
6 | +## Database Steps | ||
7 | + | ||
8 | +```sql | ||
9 | +CREATE TABLE `chat_schema`.`User` ( | ||
10 | + `avatarUrl` varchar(191) , | ||
11 | + `bio` varchar(191) , | ||
12 | + `createdAt` datetime DEFAULT CURRENT_TIMESTAMP , | ||
13 | + `email` varchar(191) NOT NULL , | ||
14 | + `emailSecret` varchar(191) , | ||
15 | + `id` int NOT NULL AUTO_INCREMENT, | ||
16 | + `name` varchar(191) NOT NULL , | ||
17 | + `password` varchar(191) NOT NULL , | ||
18 | + `phoneNumber` int , | ||
19 | + `phoneSecret` varchar(191) , | ||
20 | + PRIMARY KEY (`id`) | ||
21 | +) | ||
22 | +DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci | ||
23 | + | ||
24 | +CREATE TABLE `chat_schema`.`Room` ( | ||
25 | + `id` int NOT NULL AUTO_INCREMENT, | ||
26 | + PRIMARY KEY (`id`) | ||
27 | +) | ||
28 | +DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci | ||
29 | + | ||
30 | +CREATE TABLE `chat_schema`.`Category` ( | ||
31 | + `id` int NOT NULL AUTO_INCREMENT, | ||
32 | + `name` varchar(191) DEFAULT '' , | ||
33 | + PRIMARY KEY (`id`) | ||
34 | +) | ||
35 | +DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci | ||
36 | + | ||
37 | +CREATE TABLE `chat_schema`.`Message` ( | ||
38 | + `id` int NOT NULL AUTO_INCREMENT, | ||
39 | + `senderId` int NOT NULL , | ||
40 | + `text` varchar(191) DEFAULT '' , | ||
41 | + PRIMARY KEY (`id`) | ||
42 | +) | ||
43 | +DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci | ||
44 | + | ||
45 | +CREATE TABLE `chat_schema`.`_RoomToUser` ( | ||
46 | + `A` int NOT NULL , | ||
47 | + `B` int NOT NULL | ||
48 | +) | ||
49 | +DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci | ||
50 | + | ||
51 | +CREATE TABLE `chat_schema`.`_CategoryToRoom` ( | ||
52 | + `A` int NOT NULL , | ||
53 | + `B` int NOT NULL | ||
54 | +) | ||
55 | +DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci | ||
56 | + | ||
57 | +CREATE UNIQUE INDEX `User.email` ON `chat_schema`.`User`(`email`) | ||
58 | + | ||
59 | +CREATE UNIQUE INDEX `_RoomToUser_AB_unique` ON `chat_schema`.`_RoomToUser`(`A`,`B`) | ||
60 | + | ||
61 | +CREATE INDEX `_RoomToUser_B_index` ON `chat_schema`.`_RoomToUser`(`B`) | ||
62 | + | ||
63 | +CREATE UNIQUE INDEX `_CategoryToRoom_AB_unique` ON `chat_schema`.`_CategoryToRoom`(`A`,`B`) | ||
64 | + | ||
65 | +CREATE INDEX `_CategoryToRoom_B_index` ON `chat_schema`.`_CategoryToRoom`(`B`) | ||
66 | + | ||
67 | +ALTER TABLE `chat_schema`.`Message` ADD FOREIGN KEY (`senderId`) REFERENCES `chat_schema`.`User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE | ||
68 | + | ||
69 | +ALTER TABLE `chat_schema`.`_RoomToUser` ADD FOREIGN KEY (`A`) REFERENCES `chat_schema`.`Room`(`id`) ON DELETE CASCADE ON UPDATE CASCADE | ||
70 | + | ||
71 | +ALTER TABLE `chat_schema`.`_RoomToUser` ADD FOREIGN KEY (`B`) REFERENCES `chat_schema`.`User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE | ||
72 | + | ||
73 | +ALTER TABLE `chat_schema`.`_CategoryToRoom` ADD FOREIGN KEY (`A`) REFERENCES `chat_schema`.`Category`(`id`) ON DELETE CASCADE ON UPDATE CASCADE | ||
74 | + | ||
75 | +ALTER TABLE `chat_schema`.`_CategoryToRoom` ADD FOREIGN KEY (`B`) REFERENCES `chat_schema`.`Room`(`id`) ON DELETE CASCADE ON UPDATE CASCADE | ||
76 | + | ||
77 | +DROP TABLE `chat_schema`.`_categorytoroom`; | ||
78 | + | ||
79 | +DROP TABLE `chat_schema`.`_migration`; | ||
80 | + | ||
81 | +DROP TABLE `chat_schema`.`_roomtouser`; | ||
82 | + | ||
83 | +DROP TABLE `chat_schema`.`category`; | ||
84 | + | ||
85 | +DROP TABLE `chat_schema`.`message`; | ||
86 | + | ||
87 | +DROP TABLE `chat_schema`.`room`; | ||
88 | + | ||
89 | +DROP TABLE `chat_schema`.`test`; | ||
90 | + | ||
91 | +DROP TABLE `chat_schema`.`user`; | ||
92 | +``` | ||
93 | + | ||
94 | +## Changes | ||
95 | + | ||
96 | +```diff | ||
97 | +diff --git schema.prisma schema.prisma | ||
98 | +migration 20200419160117-init..20200424124259-init | ||
99 | +--- datamodel.dml | ||
100 | ++++ datamodel.dml | ||
101 | +@@ -4,18 +4,20 @@ | ||
102 | + } | ||
103 | + datasource db { | ||
104 | + provider = "mysql" | ||
105 | +- url = "***" | ||
106 | ++ url = env("DATABASE_URL") | ||
107 | + } | ||
108 | + model User { | ||
109 | + id Int @default(autoincrement()) @id | ||
110 | + avatarUrl String? | ||
111 | + email String @unique | ||
112 | + password String | ||
113 | + name String | ||
114 | +- loginSecret String? | ||
115 | ++ phoneNumber Int? | ||
116 | ++ emailSecret String? | ||
117 | ++ phoneSecret String? | ||
118 | + bio String? | ||
119 | + rooms Room[] @relation(references: [id]) | ||
120 | + messages Message[] | ||
121 | + createdAt DateTime? @default(now()) | ||
122 | +``` | ||
123 | + | ||
124 | + |
1 | +generator client { | ||
2 | + provider = "prisma-client-js" | ||
3 | + binaryTargets = ["native", "debian-openssl-1.1.x"] | ||
4 | +} | ||
5 | + | ||
6 | +datasource db { | ||
7 | + provider = "mysql" | ||
8 | + url = "***" | ||
9 | +} | ||
10 | + | ||
11 | +model User { | ||
12 | + id Int @default(autoincrement()) @id | ||
13 | + avatarUrl String? | ||
14 | + email String @unique | ||
15 | + password String | ||
16 | + name String | ||
17 | + phoneNumber Int? | ||
18 | + emailSecret String? | ||
19 | + phoneSecret String? | ||
20 | + bio String? | ||
21 | + rooms Room[] @relation(references: [id]) | ||
22 | + messages Message[] | ||
23 | + createdAt DateTime? @default(now()) | ||
24 | +} | ||
25 | + | ||
26 | +model Room { | ||
27 | + id Int @default(autoincrement()) @id | ||
28 | + participants User[] @relation(references: [id]) | ||
29 | + categories Category[] @relation(references: [id]) | ||
30 | +} | ||
31 | + | ||
32 | +model Category { | ||
33 | + id Int @default(autoincrement()) @id | ||
34 | + name String? @default("") | ||
35 | + rooms Room[] @relation(references: [id]) | ||
36 | +} | ||
37 | + | ||
38 | +model Message { | ||
39 | + id Int @default(autoincrement()) @id | ||
40 | + text String? @default("") | ||
41 | + sender User @relation(fields: [senderId], references: [id]) | ||
42 | + senderId Int | ||
43 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +{ | ||
2 | + "version": "0.3.14-fixed", | ||
3 | + "steps": [ | ||
4 | + { | ||
5 | + "tag": "CreateField", | ||
6 | + "model": "User", | ||
7 | + "field": "phoneNumber", | ||
8 | + "type": "Int", | ||
9 | + "arity": "Optional" | ||
10 | + }, | ||
11 | + { | ||
12 | + "tag": "CreateField", | ||
13 | + "model": "User", | ||
14 | + "field": "emailSecret", | ||
15 | + "type": "String", | ||
16 | + "arity": "Optional" | ||
17 | + }, | ||
18 | + { | ||
19 | + "tag": "CreateField", | ||
20 | + "model": "User", | ||
21 | + "field": "phoneSecret", | ||
22 | + "type": "String", | ||
23 | + "arity": "Optional" | ||
24 | + }, | ||
25 | + { | ||
26 | + "tag": "DeleteField", | ||
27 | + "model": "User", | ||
28 | + "field": "loginSecret" | ||
29 | + } | ||
30 | + ] | ||
31 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
... | @@ -3,4 +3,5 @@ | ... | @@ -3,4 +3,5 @@ |
3 | # Prisma Migrate lockfile v1 | 3 | # Prisma Migrate lockfile v1 |
4 | # Read more about conflict resolution here: TODO | 4 | # Read more about conflict resolution here: TODO |
5 | 5 | ||
6 | -20200419160117-init | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
6 | +20200419160117-init | ||
7 | +20200424124259-init | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -14,6 +14,7 @@ model User { | ... | @@ -14,6 +14,7 @@ model User { |
14 | email String @unique | 14 | email String @unique |
15 | password String | 15 | password String |
16 | name String | 16 | name String |
17 | + phoneNumber String? @unique | ||
17 | emailSecret String? | 18 | emailSecret String? |
18 | phoneSecret String? | 19 | phoneSecret String? |
19 | bio String? | 20 | bio String? | ... | ... |
1 | -import { prisma } from "../../../utils"; | 1 | +import { prisma, generateSecret } from "../../../utils"; |
2 | +import twilio from "twilio"; | ||
2 | 3 | ||
3 | export default { | 4 | export default { |
4 | Query: { | 5 | Query: { |
5 | findEmail: async (_, args) => { | 6 | findEmail: async (_, args) => { |
6 | - const { secret } = args; | 7 | + const { phoneNumber } = args; |
8 | + const accountSid = process.env.TWILIO_SID; | ||
9 | + const authToken = process.env.TWILIO_AUTH_TOKEN; | ||
10 | + const client = new twilio(accountSid, authToken); | ||
11 | + const randomWords = generateSecret(); | ||
12 | + client.messages | ||
13 | + .create({ | ||
14 | + body: `Please enter this word : ${randomWords}`, | ||
15 | + to: `${phoneNumber}`, | ||
16 | + from: "KhuChat", | ||
17 | + }) | ||
18 | + .then((message) => console.log(message.sid)); | ||
19 | + | ||
20 | + const user = await prisma.user.update({ | ||
21 | + where: { | ||
22 | + phoneNumber, | ||
23 | + }, | ||
24 | + data: { | ||
25 | + phoneSecret: randomWords, | ||
26 | + }, | ||
27 | + }); | ||
28 | + return user; | ||
7 | }, | 29 | }, |
8 | }, | 30 | }, |
9 | }; | 31 | }; | ... | ... |
... | @@ -4,6 +4,7 @@ type User { | ... | @@ -4,6 +4,7 @@ type User { |
4 | name: String | 4 | name: String |
5 | email: String! | 5 | email: String! |
6 | password: String | 6 | password: String |
7 | + phoneNumber: String | ||
7 | emailSecret: String | 8 | emailSecret: String |
8 | phoneSecret: String | 9 | phoneSecret: String |
9 | bio: String | 10 | bio: String | ... | ... |
... | @@ -20,7 +20,7 @@ services: | ... | @@ -20,7 +20,7 @@ services: |
20 | ports: | 20 | ports: |
21 | - "5555:5555" | 21 | - "5555:5555" |
22 | build: | 22 | build: |
23 | - context: back/prisma | 23 | + context: ./back/prisma |
24 | dockerfile: Dockerfile | 24 | dockerfile: Dockerfile |
25 | environment: | 25 | environment: |
26 | MYSQL_URL: ${MYSQL_URL} | 26 | MYSQL_URL: ${MYSQL_URL} |
... | @@ -37,22 +37,22 @@ services: | ... | @@ -37,22 +37,22 @@ services: |
37 | ports: | 37 | ports: |
38 | - "4000:4000" | 38 | - "4000:4000" |
39 | build: | 39 | build: |
40 | - context: back | 40 | + context: ./back |
41 | dockerfile: Dockerfile | 41 | dockerfile: Dockerfile |
42 | environment: | 42 | environment: |
43 | MYSQL_URL: ${MYSQL_URL} | 43 | MYSQL_URL: ${MYSQL_URL} |
44 | FRONTEND_URL: ${FRONTEND_URL} | 44 | FRONTEND_URL: ${FRONTEND_URL} |
45 | volumes: | 45 | volumes: |
46 | - - ./back:/app | 46 | + - ./back:/usr/src/app |
47 | - - ./back/node_modules:/app/node_modules | 47 | + - ./back/node_modules:/usr/src/app/node_modules |
48 | - - ./back/prisma:/app/prisma | 48 | + - ./back/prisma:/usr/src/app/prisma |
49 | frontend: | 49 | frontend: |
50 | container_name: frontend | 50 | container_name: frontend |
51 | ports: | 51 | ports: |
52 | - "3000:3000" | 52 | - "3000:3000" |
53 | tty: "true" | 53 | tty: "true" |
54 | build: | 54 | build: |
55 | - context: front | 55 | + context: ./front |
56 | dockerfile: Dockerfile | 56 | dockerfile: Dockerfile |
57 | command: npm start | 57 | command: npm start |
58 | environment: | 58 | environment: | ... | ... |
-
Please register or login to post a comment