minsung

Merge branch 'master' of https://bitbucket.org/vel1024/capstone

1 -.env
2 -
3 node_modules 1 node_modules
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -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",
......
...@@ -6,4 +6,4 @@ WORKDIR /app ...@@ -6,4 +6,4 @@ WORKDIR /app
6 6
7 COPY ./ ./prisma/ 7 COPY ./ ./prisma/
8 8
9 -CMD ["prisma", "studio", "--experimental"] 9 +CMD ["prisma", "studio", "--experimental"]
...\ No newline at end of file ...\ No newline at end of file
......
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 type Query { 1 type Query {
2 - findEmail(secret: String!): User! 2 + findEmail(phoneNumber: String!): User!
3 } 3 }
......
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:
......
1 FROM node:12.16.2 1 FROM node:12.16.2
2 2
3 -WORKDIR /usr/src/app 3 +RUN mkdir /app
4 +WORKDIR /app
4 5
5 COPY package*.json ./ 6 COPY package*.json ./
6 7
......