From eb63c9c48fff53b9a610b4e3f50e7efb8e648c43 Mon Sep 17 00:00:00 2001 From: Ayushya Amitabh Date: Wed, 14 Apr 2021 11:42:49 -0400 Subject: [PATCH] v1.0.0/release finalize update and set logic --- firebase-debug.log | 108 ------------------------------------- functions/lib/index.js | 68 +++++++++++++++++++++-- functions/lib/index.js.map | 2 +- functions/src/index.ts | 66 +++++++++++++++++++++-- website/package.json | 3 +- website/src/index.js | 7 +-- 6 files changed, 133 insertions(+), 121 deletions(-) delete mode 100644 firebase-debug.log diff --git a/firebase-debug.log b/firebase-debug.log deleted file mode 100644 index e483a51..0000000 --- a/firebase-debug.log +++ /dev/null @@ -1,108 +0,0 @@ -[debug] [2021-04-14T15:02:44.296Z] ---------------------------------------------------------------------- -[debug] [2021-04-14T15:02:44.297Z] Command: C:\Program Files\nodejs\node.exe C:\Users\ayush\AppData\Roaming\npm\node_modules\firebase-tools\lib\bin\firebase.js deploy --only functions -[debug] [2021-04-14T15:02:44.298Z] CLI Version: 9.10.0 -[debug] [2021-04-14T15:02:44.298Z] Platform: win32 -[debug] [2021-04-14T15:02:44.298Z] Node Version: v12.19.0 -[debug] [2021-04-14T15:02:44.299Z] Time: Wed Apr 14 2021 11:02:44 GMT-0400 (Eastern Daylight Time) -[debug] [2021-04-14T15:02:44.299Z] ---------------------------------------------------------------------- -[debug] -[debug] [2021-04-14T15:02:44.304Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"] -[debug] [2021-04-14T15:02:44.305Z] > authorizing via signed-in user (ayushyamitabh@gmail.com) -[debug] [2021-04-14T15:02:44.305Z] [iam] checking project vaxandme for permissions ["cloudfunctions.functions.create","cloudfunctions.functions.delete","cloudfunctions.functions.get","cloudfunctions.functions.list","cloudfunctions.functions.update","cloudfunctions.operations.get","firebase.projects.get"] -[debug] [2021-04-14T15:02:44.306Z] >>> HTTP REQUEST POST https://cloudresourcemanager.googleapis.com/v1/projects/vaxandme:testIamPermissions - {"permissions":["cloudfunctions.functions.create","cloudfunctions.functions.delete","cloudfunctions.functions.get","cloudfunctions.functions.list","cloudfunctions.functions.update","cloudfunctions.operations.get","firebase.projects.get"]} -[debug] [2021-04-14T15:02:44.519Z] <<< HTTP RESPONSE 200 {"content-type":"application/json; charset=UTF-8","vary":"X-Origin, Referer, Origin,Accept-Encoding","date":"Wed, 14 Apr 2021 15:02:43 GMT","server":"ESF","cache-control":"private","x-xss-protection":"0","x-frame-options":"SAMEORIGIN","x-content-type-options":"nosniff","server-timing":"gfet4t7; dur=145","alt-svc":"h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"","accept-ranges":"none","transfer-encoding":"chunked"} -[debug] [2021-04-14T15:02:44.520Z] >>> HTTP REQUEST POST https://iam.googleapis.com/v1/projects/vaxandme/serviceAccounts/vaxandme@appspot.gserviceaccount.com:testIamPermissions - {"permissions":["iam.serviceAccounts.actAs"]} -[debug] [2021-04-14T15:02:44.740Z] <<< HTTP RESPONSE 200 {"content-type":"application/json; charset=UTF-8","vary":"X-Origin, Referer, Origin,Accept-Encoding","date":"Wed, 14 Apr 2021 15:02:43 GMT","server":"ESF","cache-control":"private","x-xss-protection":"0","x-frame-options":"SAMEORIGIN","x-content-type-options":"nosniff","alt-svc":"h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"","accept-ranges":"none","transfer-encoding":"chunked"} -[info] -[info] === Deploying to 'vaxandme'... -[info] -[info] i deploying functions -[info] Running command: npm --prefix "$RESOURCE_DIR" run lint -[info] Running command: npm --prefix "$RESOURCE_DIR" run build -[info] + functions: Finished running predeploy script. -[info] i functions: ensuring required API cloudfunctions.googleapis.com is enabled... -[info] i functions: ensuring required API cloudbuild.googleapis.com is enabled... -[debug] [2021-04-14T15:02:56.281Z] >>> HTTP REQUEST GET https://serviceusage.googleapis.com/v1/projects/vaxandme/services/cloudfunctions.googleapis.com - -[debug] [2021-04-14T15:02:56.281Z] >>> HTTP REQUEST GET https://serviceusage.googleapis.com/v1/projects/vaxandme/services/runtimeconfig.googleapis.com - -[debug] [2021-04-14T15:02:56.281Z] >>> HTTP REQUEST GET https://serviceusage.googleapis.com/v1/projects/vaxandme/services/cloudbuild.googleapis.com - -[debug] [2021-04-14T15:02:56.702Z] <<< HTTP RESPONSE 200 {"content-type":"application/json; charset=UTF-8","vary":"X-Origin, Referer, Origin,Accept-Encoding","date":"Wed, 14 Apr 2021 15:02:55 GMT","server":"ESF","cache-control":"private","x-xss-protection":"0","x-frame-options":"SAMEORIGIN","x-content-type-options":"nosniff","alt-svc":"h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"","accept-ranges":"none","transfer-encoding":"chunked"} -[debug] [2021-04-14T15:02:56.702Z] <<< HTTP RESPONSE 200 {"content-type":"application/json; charset=UTF-8","vary":"X-Origin, Referer, Origin,Accept-Encoding","date":"Wed, 14 Apr 2021 15:02:55 GMT","server":"ESF","cache-control":"private","x-xss-protection":"0","x-frame-options":"SAMEORIGIN","x-content-type-options":"nosniff","alt-svc":"h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"","accept-ranges":"none","transfer-encoding":"chunked"} -[info] + functions: required API cloudbuild.googleapis.com is enabled -[debug] [2021-04-14T15:02:56.728Z] <<< HTTP RESPONSE 200 {"content-type":"application/json; charset=UTF-8","vary":"X-Origin, Referer, Origin,Accept-Encoding","date":"Wed, 14 Apr 2021 15:02:55 GMT","server":"ESF","cache-control":"private","x-xss-protection":"0","x-frame-options":"SAMEORIGIN","x-content-type-options":"nosniff","alt-svc":"h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"","accept-ranges":"none","transfer-encoding":"chunked"} -[info] + functions: required API cloudfunctions.googleapis.com is enabled -[debug] [2021-04-14T15:02:56.729Z] >>> HTTP REQUEST GET https://firebase.googleapis.com/v1beta1/projects/vaxandme/adminSdkConfig - -[debug] [2021-04-14T15:02:56.994Z] <<< HTTP RESPONSE 200 {"content-type":"application/json; charset=UTF-8","vary":"X-Origin, Referer, Origin,Accept-Encoding","date":"Wed, 14 Apr 2021 15:02:55 GMT","server":"ESF","cache-control":"private","x-xss-protection":"0","x-frame-options":"SAMEORIGIN","x-content-type-options":"nosniff","alt-svc":"h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"","accept-ranges":"none","transfer-encoding":"chunked"} -[info] i functions: preparing functions directory for uploading... -[debug] [2021-04-14T15:02:56.995Z] >>> HTTP REQUEST GET https://runtimeconfig.googleapis.com/v1beta1/projects/vaxandme/configs - -[debug] [2021-04-14T15:02:57.329Z] <<< HTTP RESPONSE 200 {"content-type":"application/json; charset=UTF-8","vary":"X-Origin, Referer, Origin,Accept-Encoding","date":"Wed, 14 Apr 2021 15:02:56 GMT","server":"ESF","cache-control":"private","x-xss-protection":"0","x-frame-options":"SAMEORIGIN","x-content-type-options":"nosniff","alt-svc":"h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"","accept-ranges":"none","transfer-encoding":"chunked"} -[info] i functions: packaged functions (48.93 KB) for uploading -[debug] [2021-04-14T15:02:57.499Z] > [functions] package.json contents: { - "name": "functions", - "scripts": { - "lint": "eslint --ext .js,.ts .", - "build": "tsc", - "serve": "npm run build && firebase emulators:start --only functions", - "shell": "npm run build && firebase functions:shell", - "start": "npm run shell", - "deploy": "firebase deploy --only functions", - "logs": "firebase functions:log" - }, - "engines": { - "node": "12" - }, - "main": "lib/index.js", - "dependencies": { - "firebase-admin": "^9.2.0", - "firebase-functions": "^3.11.0" - }, - "devDependencies": { - "@typescript-eslint/eslint-plugin": "^3.9.1", - "@typescript-eslint/parser": "^3.8.0", - "eslint": "^7.6.0", - "eslint-config-google": "^0.14.0", - "eslint-plugin-import": "^2.22.0", - "firebase-functions-test": "^0.2.0", - "typescript": "^3.8.0" - }, - "private": true -} -[debug] [2021-04-14T15:02:57.500Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1/projects/vaxandme/locations/-/functions - -[debug] [2021-04-14T15:02:59.025Z] <<< HTTP RESPONSE 200 {"content-type":"application/json; charset=UTF-8","vary":"X-Origin, Referer, Origin,Accept-Encoding","date":"Wed, 14 Apr 2021 15:02:58 GMT","server":"ESF","cache-control":"private","x-xss-protection":"0","x-frame-options":"SAMEORIGIN","x-content-type-options":"nosniff","alt-svc":"h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"","accept-ranges":"none","transfer-encoding":"chunked"} -[debug] [2021-04-14T15:02:59.026Z] >>> HTTP REQUEST POST https://cloudfunctions.googleapis.com/v1/projects/vaxandme/locations/us-central1/functions:generateUploadUrl - -[debug] [2021-04-14T15:02:59.617Z] <<< HTTP RESPONSE 200 {"content-type":"application/json; charset=UTF-8","vary":"X-Origin, Referer, Origin,Accept-Encoding","date":"Wed, 14 Apr 2021 15:02:58 GMT","server":"ESF","cache-control":"private","x-xss-protection":"0","x-frame-options":"SAMEORIGIN","x-content-type-options":"nosniff","alt-svc":"h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"","accept-ranges":"none","transfer-encoding":"chunked"} -[debug] [2021-04-14T15:02:59.617Z] >>> HTTP REQUEST PUT https://storage.googleapis.com/gcf-upload-us-central1-a3e8d99e-f910-4259-8532-3499c31a2b18/d09fdf34-2465-4273-a031-cf401455649d.zip?GoogleAccessId=service-614738281692@gcf-admin-robot.iam.gserviceaccount.com&Expires=1618414378&Signature=IgSMxAXuyn%2B5KFFWn5ocmdXb0kCD7pCpVkJ7DlBGrYzozBNE0%2FbsTPs1kloWKXBbZXTVIQEp6K9kmxDzV74pYgG7kIfxlDXvyOKoz61Tac7JiCOiWtOoyN8KJRQFC2J4D4jqvL4Mp%2BaA3ndFWD50OWiB%2F6O%2FdpVPbTAI7SqJsrzxyV92MYA02R7n2AWvvpYOsZsGivU0WI70ZI3aQLdqzVFgV9WaV6Vk9zRtwCWHQNLwQ7nTw3ixhIpU%2BFtDcYe67DB8AeHNWnI71sR4ksdT5kV1sjpgf2pc45l%2BKATPoIgOHLPCgDfM6Io64xEUzBG0TK3eLXiEi00bGHwfbd8N4g%3D%3D - -[debug] [2021-04-14T15:02:59.802Z] <<< HTTP RESPONSE 200 {"x-guploader-uploadid":"ABg5-UxK4At3xlowXTiYdn0rHwGayMkbEeI59N2pKrCSFzbO56f8rqSbXtYm41zJGuBNBWb4pla8OkpyH-0-LQqlzdmCGPHMFQ","etag":"\"d549deb979878a67ee673172d8034ae6\"","x-goog-generation":"1618412578780488","x-goog-metageneration":"1","x-goog-hash":"crc32c=Q6RTyA==, md5=1UneuXmHimfuZzFy2ANK5g==","x-goog-stored-content-length":"50100","x-goog-stored-content-encoding":"identity","vary":"Origin","content-length":"0","date":"Wed, 14 Apr 2021 15:02:58 GMT","server":"UploadServer","content-type":"text/html; charset=UTF-8","alt-svc":"h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\""} -[info] + functions: functions folder uploaded successfully -[info] i functions: updating Node.js 12 function saveResult(us-central1)... -[debug] [2021-04-14T15:02:59.805Z] >>> HTTP REQUEST PATCH https://cloudfunctions.googleapis.com/v1/projects/vaxandme/locations/us-central1/functions/saveResult {"updateMask":"sourceUploadUrl,name,labels,runtime,environmentVariables,httpsTrigger"} - {"sourceUploadUrl":"https://storage.googleapis.com/gcf-upload-us-central1-a3e8d99e-f910-4259-8532-3499c31a2b18/d09fdf34-2465-4273-a031-cf401455649d.zip?GoogleAccessId=service-614738281692@gcf-admin-robot.iam.gserviceaccount.com&Expires=1618414378&Signature=IgSMxAXuyn%2B5KFFWn5ocmdXb0kCD7pCpVkJ7DlBGrYzozBNE0%2FbsTPs1kloWKXBbZXTVIQEp6K9kmxDzV74pYgG7kIfxlDXvyOKoz61Tac7JiCOiWtOoyN8KJRQFC2J4D4jqvL4Mp%2BaA3ndFWD50OWiB%2F6O%2FdpVPbTAI7SqJsrzxyV92MYA02R7n2AWvvpYOsZsGivU0WI70ZI3aQLdqzVFgV9WaV6Vk9zRtwCWHQNLwQ7nTw3ixhIpU%2BFtDcYe67DB8AeHNWnI71sR4ksdT5kV1sjpgf2pc45l%2BKATPoIgOHLPCgDfM6Io64xEUzBG0TK3eLXiEi00bGHwfbd8N4g%3D%3D","name":"projects/vaxandme/locations/us-central1/functions/saveResult","labels":{"deployment-tool":"cli-firebase","deployment-callable":"true"},"httpsTrigger":{},"runtime":"nodejs12","environmentVariables":{"FIREBASE_CONFIG":"{\"projectId\":\"vaxandme\",\"storageBucket\":\"vaxandme.appspot.com\",\"locationId\":\"us-central\"}"}} -[debug] [2021-04-14T15:03:00.310Z] <<< HTTP RESPONSE 200 {"content-type":"application/json; charset=UTF-8","vary":"X-Origin, Referer, Origin,Accept-Encoding","date":"Wed, 14 Apr 2021 15:02:59 GMT","server":"ESF","cache-control":"private","x-xss-protection":"0","x-frame-options":"SAMEORIGIN","x-content-type-options":"nosniff","alt-svc":"h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"","accept-ranges":"none","transfer-encoding":"chunked"} -[debug] [2021-04-14T15:03:00.312Z] > refreshing access token with scopes: [] -[debug] [2021-04-14T15:03:00.312Z] >>> HTTP REQUEST POST https://www.googleapis.com/oauth2/v3/token - -[debug] [2021-04-14T15:03:00.406Z] <<< HTTP RESPONSE 200 {"date":"Wed, 14 Apr 2021 15:02:59 GMT","cache-control":"no-cache, no-store, max-age=0, must-revalidate","pragma":"no-cache","expires":"Mon, 01 Jan 1990 00:00:00 GMT","content-type":"application/json; charset=utf-8","vary":"X-Origin, Referer, Origin,Accept-Encoding","server":"scaffolding on HTTPServer2","x-xss-protection":"0","x-frame-options":"SAMEORIGIN","x-content-type-options":"nosniff","alt-svc":"h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"","accept-ranges":"none","transfer-encoding":"chunked"} -[debug] [2021-04-14T15:03:00.414Z] >>> [apiv2][query] GET https://cloudfunctions.googleapis.com/v1/operations/dmF4YW5kbWUvdXMtY2VudHJhbDEvc2F2ZVJlc3VsdC9mNlM4ejJPRXZ4bw [none] -[debug] [2021-04-14T15:03:00.609Z] <<< [apiv2][status] GET https://cloudfunctions.googleapis.com/v1/operations/dmF4YW5kbWUvdXMtY2VudHJhbDEvc2F2ZVJlc3VsdC9mNlM4ejJPRXZ4bw 200 -[debug] [2021-04-14T15:03:00.609Z] <<< [apiv2][body] GET https://cloudfunctions.googleapis.com/v1/operations/dmF4YW5kbWUvdXMtY2VudHJhbDEvc2F2ZVJlc3VsdC9mNlM4ejJPRXZ4bw {"name":"operations/dmF4YW5kbWUvdXMtY2VudHJhbDEvc2F2ZVJlc3VsdC9mNlM4ejJPRXZ4bw","metadata":{"@type":"type.googleapis.com/google.cloud.functions.v1.OperationMetadataV1","target":"projects/vaxandme/locations/us-central1/functions/saveResult","type":"UPDATE_FUNCTION","request":{"@type":"type.googleapis.com/google.cloud.functions.v1.CloudFunction","name":"projects/vaxandme/locations/us-central1/functions/saveResult","httpsTrigger":{},"status":"ACTIVE","entryPoint":"saveResult","timeout":"60s","availableMemoryMb":256,"serviceAccountEmail":"vaxandme@appspot.gserviceaccount.com","updateTime":"2021-04-14T05:16:08.489Z","versionId":"2","labels":{"deployment-tool":"cli-firebase","deployment-callable":"true"},"sourceUploadUrl":"https://storage.googleapis.com/gcf-upload-us-central1-a3e8d99e-f910-4259-8532-3499c31a2b18/d09fdf34-2465-4273-a031-cf401455649d.zip?GoogleAccessId=service-614738281692@gcf-admin-robot.iam.gserviceaccount.com&Expires=1618414378&Signature=IgSMxAXuyn%2B5KFFWn5ocmdXb0kCD7pCpVkJ7DlBGrYzozBNE0%2FbsTPs1kloWKXBbZXTVIQEp6K9kmxDzV74pYgG7kIfxlDXvyOKoz61Tac7JiCOiWtOoyN8KJRQFC2J4D4jqvL4Mp%2BaA3ndFWD50OWiB%2F6O%2FdpVPbTAI7SqJsrzxyV92MYA02R7n2AWvvpYOsZsGivU0WI70ZI3aQLdqzVFgV9WaV6Vk9zRtwCWHQNLwQ7nTw3ixhIpU%2BFtDcYe67DB8AeHNWnI71sR4ksdT5kV1sjpgf2pc45l%2BKATPoIgOHLPCgDfM6Io64xEUzBG0TK3eLXiEi00bGHwfbd8N4g%3D%3D","environmentVariables":{"FIREBASE_CONFIG":"{\"projectId\":\"vaxandme\",\"storageBucket\":\"vaxandme.appspot.com\",\"locationId\":\"us-central\"}"},"runtime":"nodejs12","ingressSettings":"ALLOW_ALL","buildId":"a35fdaab-c6e7-4ac2-b168-c8f2648884dd"},"versionId":"3","updateTime":"2021-04-14T15:02:59Z"}} -[debug] [2021-04-14T15:03:01.116Z] [update-projects/vaxandme/locations/us-central1/functions/saveResult] Retrying task index 0 -[debug] [2021-04-14T15:03:01.116Z] >>> [apiv2][query] GET https://cloudfunctions.googleapis.com/v1/operations/dmF4YW5kbWUvdXMtY2VudHJhbDEvc2F2ZVJlc3VsdC9mNlM4ejJPRXZ4bw [none] -[debug] [2021-04-14T15:03:01.298Z] <<< [apiv2][status] GET https://cloudfunctions.googleapis.com/v1/operations/dmF4YW5kbWUvdXMtY2VudHJhbDEvc2F2ZVJlc3VsdC9mNlM4ejJPRXZ4bw 200 -[debug] [2021-04-14T15:03:01.298Z] <<< [apiv2][body] GET https://cloudfunctions.googleapis.com/v1/operations/dmF4YW5kbWUvdXMtY2VudHJhbDEvc2F2ZVJlc3VsdC9mNlM4ejJPRXZ4bw {"name":"operations/dmF4YW5kbWUvdXMtY2VudHJhbDEvc2F2ZVJlc3VsdC9mNlM4ejJPRXZ4bw","metadata":{"@type":"type.googleapis.com/google.cloud.functions.v1.OperationMetadataV1","target":"projects/vaxandme/locations/us-central1/functions/saveResult","type":"UPDATE_FUNCTION","request":{"@type":"type.googleapis.com/google.cloud.functions.v1.CloudFunction","name":"projects/vaxandme/locations/us-central1/functions/saveResult","httpsTrigger":{},"status":"ACTIVE","entryPoint":"saveResult","timeout":"60s","availableMemoryMb":256,"serviceAccountEmail":"vaxandme@appspot.gserviceaccount.com","updateTime":"2021-04-14T05:16:08.489Z","versionId":"2","labels":{"deployment-tool":"cli-firebase","deployment-callable":"true"},"sourceUploadUrl":"https://storage.googleapis.com/gcf-upload-us-central1-a3e8d99e-f910-4259-8532-3499c31a2b18/d09fdf34-2465-4273-a031-cf401455649d.zip?GoogleAccessId=service-614738281692@gcf-admin-robot.iam.gserviceaccount.com&Expires=1618414378&Signature=IgSMxAXuyn%2B5KFFWn5ocmdXb0kCD7pCpVkJ7DlBGrYzozBNE0%2FbsTPs1kloWKXBbZXTVIQEp6K9kmxDzV74pYgG7kIfxlDXvyOKoz61Tac7JiCOiWtOoyN8KJRQFC2J4D4jqvL4Mp%2BaA3ndFWD50OWiB%2F6O%2FdpVPbTAI7SqJsrzxyV92MYA02R7n2AWvvpYOsZsGivU0WI70ZI3aQLdqzVFgV9WaV6Vk9zRtwCWHQNLwQ7nTw3ixhIpU%2BFtDcYe67DB8AeHNWnI71sR4ksdT5kV1sjpgf2pc45l%2BKATPoIgOHLPCgDfM6Io64xEUzBG0TK3eLXiEi00bGHwfbd8N4g%3D%3D","environmentVariables":{"FIREBASE_CONFIG":"{\"projectId\":\"vaxandme\",\"storageBucket\":\"vaxandme.appspot.com\",\"locationId\":\"us-central\"}"},"runtime":"nodejs12","ingressSettings":"ALLOW_ALL","buildId":"a35fdaab-c6e7-4ac2-b168-c8f2648884dd"},"versionId":"3","updateTime":"2021-04-14T15:02:59Z"}} -[debug] [2021-04-14T15:03:02.307Z] [update-projects/vaxandme/locations/us-central1/functions/saveResult] Retrying task index 0 -[debug] [2021-04-14T15:03:02.307Z] >>> [apiv2][query] GET https://cloudfunctions.googleapis.com/v1/operations/dmF4YW5kbWUvdXMtY2VudHJhbDEvc2F2ZVJlc3VsdC9mNlM4ejJPRXZ4bw [none] -[debug] [2021-04-14T15:03:02.607Z] <<< [apiv2][status] GET https://cloudfunctions.googleapis.com/v1/operations/dmF4YW5kbWUvdXMtY2VudHJhbDEvc2F2ZVJlc3VsdC9mNlM4ejJPRXZ4bw 200 -[debug] [2021-04-14T15:03:02.608Z] <<< [apiv2][body] GET https://cloudfunctions.googleapis.com/v1/operations/dmF4YW5kbWUvdXMtY2VudHJhbDEvc2F2ZVJlc3VsdC9mNlM4ejJPRXZ4bw {"name":"operations/dmF4YW5kbWUvdXMtY2VudHJhbDEvc2F2ZVJlc3VsdC9mNlM4ejJPRXZ4bw","metadata":{"@type":"type.googleapis.com/google.cloud.functions.v1.OperationMetadataV1","target":"projects/vaxandme/locations/us-central1/functions/saveResult","type":"UPDATE_FUNCTION","request":{"@type":"type.googleapis.com/google.cloud.functions.v1.CloudFunction","name":"projects/vaxandme/locations/us-central1/functions/saveResult","httpsTrigger":{},"status":"ACTIVE","entryPoint":"saveResult","timeout":"60s","availableMemoryMb":256,"serviceAccountEmail":"vaxandme@appspot.gserviceaccount.com","updateTime":"2021-04-14T05:16:08.489Z","versionId":"2","labels":{"deployment-tool":"cli-firebase","deployment-callable":"true"},"sourceUploadUrl":"https://storage.googleapis.com/gcf-upload-us-central1-a3e8d99e-f910-4259-8532-3499c31a2b18/d09fdf34-2465-4273-a031-cf401455649d.zip?GoogleAccessId=service-614738281692@gcf-admin-robot.iam.gserviceaccount.com&Expires=1618414378&Signature=IgSMxAXuyn%2B5KFFWn5ocmdXb0kCD7pCpVkJ7DlBGrYzozBNE0%2FbsTPs1kloWKXBbZXTVIQEp6K9kmxDzV74pYgG7kIfxlDXvyOKoz61Tac7JiCOiWtOoyN8KJRQFC2J4D4jqvL4Mp%2BaA3ndFWD50OWiB%2F6O%2FdpVPbTAI7SqJsrzxyV92MYA02R7n2AWvvpYOsZsGivU0WI70ZI3aQLdqzVFgV9WaV6Vk9zRtwCWHQNLwQ7nTw3ixhIpU%2BFtDcYe67DB8AeHNWnI71sR4ksdT5kV1sjpgf2pc45l%2BKATPoIgOHLPCgDfM6Io64xEUzBG0TK3eLXiEi00bGHwfbd8N4g%3D%3D","environmentVariables":{"FIREBASE_CONFIG":"{\"projectId\":\"vaxandme\",\"storageBucket\":\"vaxandme.appspot.com\",\"locationId\":\"us-central\"}"},"runtime":"nodejs12","ingressSettings":"ALLOW_ALL","buildId":"a35fdaab-c6e7-4ac2-b168-c8f2648884dd"},"versionId":"3","updateTime":"2021-04-14T15:02:59Z"}} -[debug] [2021-04-14T15:03:04.617Z] [update-projects/vaxandme/locations/us-central1/functions/saveResult] Retrying task index 0 -[debug] [2021-04-14T15:03:04.617Z] >>> [apiv2][query] GET https://cloudfunctions.googleapis.com/v1/operations/dmF4YW5kbWUvdXMtY2VudHJhbDEvc2F2ZVJlc3VsdC9mNlM4ejJPRXZ4bw [none] -[debug] [2021-04-14T15:03:04.803Z] <<< [apiv2][status] GET https://cloudfunctions.googleapis.com/v1/operations/dmF4YW5kbWUvdXMtY2VudHJhbDEvc2F2ZVJlc3VsdC9mNlM4ejJPRXZ4bw 200 -[debug] [2021-04-14T15:03:04.803Z] <<< [apiv2][body] GET https://cloudfunctions.googleapis.com/v1/operations/dmF4YW5kbWUvdXMtY2VudHJhbDEvc2F2ZVJlc3VsdC9mNlM4ejJPRXZ4bw {"name":"operations/dmF4YW5kbWUvdXMtY2VudHJhbDEvc2F2ZVJlc3VsdC9mNlM4ejJPRXZ4bw","metadata":{"@type":"type.googleapis.com/google.cloud.functions.v1.OperationMetadataV1","target":"projects/vaxandme/locations/us-central1/functions/saveResult","type":"UPDATE_FUNCTION","request":{"@type":"type.googleapis.com/google.cloud.functions.v1.CloudFunction","name":"projects/vaxandme/locations/us-central1/functions/saveResult","httpsTrigger":{},"status":"ACTIVE","entryPoint":"saveResult","timeout":"60s","availableMemoryMb":256,"serviceAccountEmail":"vaxandme@appspot.gserviceaccount.com","updateTime":"2021-04-14T05:16:08.489Z","versionId":"2","labels":{"deployment-tool":"cli-firebase","deployment-callable":"true"},"sourceUploadUrl":"https://storage.googleapis.com/gcf-upload-us-central1-a3e8d99e-f910-4259-8532-3499c31a2b18/d09fdf34-2465-4273-a031-cf401455649d.zip?GoogleAccessId=service-614738281692@gcf-admin-robot.iam.gserviceaccount.com&Expires=1618414378&Signature=IgSMxAXuyn%2B5KFFWn5ocmdXb0kCD7pCpVkJ7DlBGrYzozBNE0%2FbsTPs1kloWKXBbZXTVIQEp6K9kmxDzV74pYgG7kIfxlDXvyOKoz61Tac7JiCOiWtOoyN8KJRQFC2J4D4jqvL4Mp%2BaA3ndFWD50OWiB%2F6O%2FdpVPbTAI7SqJsrzxyV92MYA02R7n2AWvvpYOsZsGivU0WI70ZI3aQLdqzVFgV9WaV6Vk9zRtwCWHQNLwQ7nTw3ixhIpU%2BFtDcYe67DB8AeHNWnI71sR4ksdT5kV1sjpgf2pc45l%2BKATPoIgOHLPCgDfM6Io64xEUzBG0TK3eLXiEi00bGHwfbd8N4g%3D%3D","environmentVariables":{"FIREBASE_CONFIG":"{\"projectId\":\"vaxandme\",\"storageBucket\":\"vaxandme.appspot.com\",\"locationId\":\"us-central\"}"},"runtime":"nodejs12","ingressSettings":"ALLOW_ALL","buildId":"a35fdaab-c6e7-4ac2-b168-c8f2648884dd"},"versionId":"3","updateTime":"2021-04-14T15:02:59Z","buildId":"ba9f100c-ace5-49f6-9373-ed33e15f4330"}} diff --git a/functions/lib/index.js b/functions/lib/index.js index 8311fa5..2932e32 100644 --- a/functions/lib/index.js +++ b/functions/lib/index.js @@ -37,13 +37,14 @@ exports.saveResult = functions.https.onCall(async (data, context) => { .doc(docId) .get() .then((doc) => doc.data()); - delete docData.age; - delete docData.name; - delete docData.dose; - if (existingData !== undefined && existingData !== docData) { + if (existingData !== undefined && existingData !== docData && + existingData.name === docData.name) { // DATA EXISTS FOR USER // BUT DIFF DATA SENT FOR UPDATE await admin.firestore().collection("results").doc(docId).set(docData); + delete docData.age; + delete docData.name; + delete docData.dose; const updateDoc = {}; Object.keys(docData).forEach((symptom) => { // IF WAS TRUE, NOW FALSE = -1 @@ -73,10 +74,69 @@ exports.saveResult = functions.https.onCall(async (data, context) => { .doc(data.name) .update(updateDoc); } + else if (existingData !== undefined && existingData !== docData && + existingData.name !== docData.name) { + // UNDO DATA FOR OLD VAX + // DECREMENT VALUES FOR EACH SYMPTOM ON OLD VAX + const undoDoc = { + count: admin.firestore.FieldValue.increment(-1), + }; + Object.keys(existingData).forEach((symptom) => { + if (symptom !== "name" && symptom !== "dose" && + symptom !== "age") { + if (existingData[symptom] === true) { + if (existingData.dose) { + undoDoc[`${existingData.dose}.${existingData.age}.${symptom}`] = + admin.firestore.FieldValue.increment(-1); + } + else { + undoDoc[`${existingData.age}.${symptom}`] = + admin.firestore.FieldValue.increment(-1); + } + } + } + }); + admin + .firestore() + .collection("stats") + .doc(existingData.name) + .update(undoDoc); + // PROCESS NEW DATA FOR USE + // SAVE USER DATA + await admin.firestore().collection("results").doc(docId).set(docData); + delete docData.age; + delete docData.name; + delete docData.dose; + // INCREMENT TOTAL RESPONSE COUNT + const updateDoc = { + count: admin.firestore.FieldValue.increment(1), + }; + // INCREMENT VALUES FOR EACH SYMPTOM + Object.keys(docData).forEach((symptom) => { + if (docData[symptom] === true) { + if (data.dose) { + updateDoc[`${data.dose}.${data.age}.${symptom}`] = + admin.firestore.FieldValue.increment(1); + } + else { + updateDoc[`${data.age}.${symptom}`] = + admin.firestore.FieldValue.increment(1); + } + } + }); + admin + .firestore() + .collection("stats") + .doc(data.name) + .update(updateDoc); + } else if (existingData === undefined) { // DATA DOESN'T EXIST FOR USER // SAVE USER DATA await admin.firestore().collection("results").doc(docId).set(docData); + delete docData.age; + delete docData.name; + delete docData.dose; // INCREMENT TOTAL RESPONSE COUNT const updateDoc = { count: admin.firestore.FieldValue.increment(1), diff --git a/functions/lib/index.js.map b/functions/lib/index.js.map index d2d0b69..aa15299 100644 --- a/functions/lib/index.js.map +++ b/functions/lib/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/functions/src/index.ts b/functions/src/index.ts index 2285146..feed6c1 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -51,13 +51,14 @@ export const saveResult = functions.https.onCall( .doc(docId) .get() .then((doc) => doc.data()); - delete docData.age; - delete docData.name; - delete docData.dose; - if (existingData !== undefined && existingData !== docData) { + if (existingData !== undefined && existingData !== docData && + existingData.name === docData.name) { // DATA EXISTS FOR USER // BUT DIFF DATA SENT FOR UPDATE await admin.firestore().collection("results").doc(docId).set(docData); + delete docData.age; + delete docData.name; + delete docData.dose; const updateDoc : Record = {}; Object.keys(docData).forEach((symptom : string) => { // IF WAS TRUE, NOW FALSE = -1 @@ -84,10 +85,67 @@ export const saveResult = functions.https.onCall( .collection("stats") .doc(data.name) .update(updateDoc); + } else if (existingData !== undefined && existingData !== docData && + existingData.name !== docData.name) { + // UNDO DATA FOR OLD VAX + // DECREMENT VALUES FOR EACH SYMPTOM ON OLD VAX + const undoDoc : Record = { + count: admin.firestore.FieldValue.increment(-1), + }; + Object.keys(existingData).forEach((symptom : string) => { + if (symptom !== "name" && symptom !== "dose" && + symptom !== "age" ) { + if (existingData[symptom] === true) { + if (existingData.dose) { + undoDoc[ + `${existingData.dose}.${existingData.age}.${symptom}`] = + admin.firestore.FieldValue.increment(-1); + } else { + undoDoc[`${existingData.age}.${symptom}`] = + admin.firestore.FieldValue.increment(-1); + } + } + } + }); + admin + .firestore() + .collection("stats") + .doc(existingData.name) + .update(undoDoc); + // PROCESS NEW DATA FOR USE + // SAVE USER DATA + await admin.firestore().collection("results").doc(docId).set(docData); + delete docData.age; + delete docData.name; + delete docData.dose; + // INCREMENT TOTAL RESPONSE COUNT + const updateDoc : Record = { + count: admin.firestore.FieldValue.increment(1), + }; + // INCREMENT VALUES FOR EACH SYMPTOM + Object.keys(docData).forEach((symptom : string) => { + if (docData[symptom] === true) { + if (data.dose) { + updateDoc[`${data.dose}.${data.age}.${symptom}`] = + admin.firestore.FieldValue.increment(1); + } else { + updateDoc[`${data.age}.${symptom}`] = + admin.firestore.FieldValue.increment(1); + } + } + }); + admin + .firestore() + .collection("stats") + .doc(data.name) + .update(updateDoc); } else if (existingData === undefined) { // DATA DOESN'T EXIST FOR USER // SAVE USER DATA await admin.firestore().collection("results").doc(docId).set(docData); + delete docData.age; + delete docData.name; + delete docData.dose; // INCREMENT TOTAL RESPONSE COUNT const updateDoc : Record = { count: admin.firestore.FieldValue.increment(1), diff --git a/website/package.json b/website/package.json index 9afceea..2087413 100644 --- a/website/package.json +++ b/website/package.json @@ -13,7 +13,8 @@ "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", - "eject": "react-scripts eject" + "eject": "react-scripts eject", + "deploy": "firebase deploy --only hosting" }, "eslintConfig": { "extends": [ diff --git a/website/src/index.js b/website/src/index.js index 8dc13cc..a0631ee 100644 --- a/website/src/index.js +++ b/website/src/index.js @@ -231,7 +231,6 @@ class App extends React.Component { }; } componentDidMount() { - console.log(VAX_RESULTS); const params = window.location.pathname .toUpperCase() .split("/") @@ -285,8 +284,10 @@ class App extends React.Component { const inputPopupSubmit = document.querySelector( ".input-popup-submit" ); - inputPopupSubmit.classList.add("submitted"); - inputPopupSubmit.innerHTML = "UPDATE ANSWER"; + if (inputPopupSubmit) { + inputPopupSubmit.classList.add("submitted"); + inputPopupSubmit.innerHTML = "UPDATE ANSWER"; + } window.localStorage.setItem("hasExistingAnswer", true); } else { this.setState({ loading: false });