From b8c886ff4ceef1c680c82c0866006915290ef1ca Mon Sep 17 00:00:00 2001 From: Fan-Wu Yang Date: Sun, 30 Sep 2018 03:12:08 +1300 Subject: [PATCH] User can now create a polygon --- api/config/db.js | 2 +- api/package-lock.json | 274 +++++++++++++++++++++--------------------- api/res/setup_sql.sql | 16 ++- api/routes/routes.js | 9 ++ api/v1/api.js | 56 ++++++++- api/v1/mathFunc.js | 13 ++ 6 files changed, 229 insertions(+), 141 deletions(-) create mode 100644 api/v1/mathFunc.js diff --git a/api/config/db.js b/api/config/db.js index e6227b0..7c2e3a7 100644 --- a/api/config/db.js +++ b/api/config/db.js @@ -9,7 +9,7 @@ exports.connect = function(done){ state.pool = mysql.createPool({ host: 'localhost', user: 'root', - password: 'root', + password: '', port: 3306, database: "territory-walker", //multipleStatements: true diff --git a/api/package-lock.json b/api/package-lock.json index 7b73bad..62624e0 100644 --- a/api/package-lock.json +++ b/api/package-lock.json @@ -9,10 +9,10 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" } }, "asn1": { @@ -20,7 +20,7 @@ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "requires": { - "safer-buffer": "~2.1.0" + "safer-buffer": "2.1.2" } }, "assert-plus": { @@ -55,7 +55,7 @@ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "optional": true, "requires": { - "tweetnacl": "^0.14.3" + "tweetnacl": "0.14.5" } }, "bignumber.js": { @@ -69,7 +69,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "optional": true, "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -78,10 +78,10 @@ "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz", "integrity": "sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=", "requires": { - "dtrace-provider": "~0.8", - "moment": "^2.10.6", - "mv": "~2", - "safe-json-stringify": "~1" + "dtrace-provider": "0.8.7", + "moment": "2.22.2", + "mv": "2.1.1", + "safe-json-stringify": "1.2.0" } }, "caseless": { @@ -99,7 +99,7 @@ "resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } }, "concat-map": { @@ -118,10 +118,10 @@ "resolved": "https://registry.npmjs.org/csv/-/csv-1.2.1.tgz", "integrity": "sha1-UjHt/BxxUlEuxFeBB2p6l/9SXAw=", "requires": { - "csv-generate": "^1.1.2", - "csv-parse": "^1.3.3", - "csv-stringify": "^1.1.2", - "stream-transform": "^0.2.2" + "csv-generate": "1.1.2", + "csv-parse": "1.3.3", + "csv-stringify": "1.1.2", + "stream-transform": "0.2.2" } }, "csv-generate": { @@ -139,7 +139,7 @@ "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-1.1.2.tgz", "integrity": "sha1-d6QVJlgbzjOA8SsA18W7rHDIK1g=", "requires": { - "lodash.get": "~4.4.2" + "lodash.get": "4.4.2" } }, "dashdash": { @@ -147,7 +147,7 @@ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" } }, "debug": { @@ -174,7 +174,7 @@ "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ=", "optional": true, "requires": { - "nan": "^2.10.0" + "nan": "2.11.0" } }, "ecc-jsbn": { @@ -183,8 +183,8 @@ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "optional": true, "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "jsbn": "0.1.1", + "safer-buffer": "2.1.2" } }, "escape-regexp-component": { @@ -197,7 +197,7 @@ "resolved": "https://registry.npmjs.org/ewma/-/ewma-2.0.1.tgz", "integrity": "sha512-MYYK17A76cuuyvkR7MnqLW4iFYPEi5Isl2qb8rXiWpLiwFS9dxW/rncuNnjjgSENuVqZQkIuR4+DChVL4g1lnw==", "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" } }, "extend": { @@ -230,9 +230,9 @@ "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-1.15.3.tgz", "integrity": "sha512-W+9ZZcZZlk3jc69mNvLAYy01msIpUp45aAtD/AIRWc5T0voI4WmHzm6oy+F3/jeGjb7AEE7AU8Inq58/gd/E5g==", "requires": { - "fast-decode-uri-component": "^1.0.0", - "safe-regex": "^1.1.0", - "semver-store": "^0.3.0" + "fast-decode-uri-component": "1.0.0", + "safe-regex": "1.1.0", + "semver-store": "0.3.0" } }, "forever-agent": { @@ -245,9 +245,9 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "requires": { - "asynckit": "^0.4.0", + "asynckit": "0.4.0", "combined-stream": "1.0.6", - "mime-types": "^2.1.12" + "mime-types": "2.1.20" } }, "formidable": { @@ -260,7 +260,7 @@ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" } }, "glob": { @@ -269,11 +269,11 @@ "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", "optional": true, "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "handle-thing": { @@ -291,8 +291,8 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", "requires": { - "ajv": "^5.3.0", - "har-schema": "^2.0.0" + "ajv": "5.5.2", + "har-schema": "2.0.0" } }, "hpack.js": { @@ -300,10 +300,10 @@ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" + "inherits": "2.0.3", + "obuf": "1.1.2", + "readable-stream": "2.3.6", + "wbuf": "1.7.3" } }, "http-deceiver": { @@ -316,9 +316,9 @@ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.2" } }, "inflight": { @@ -327,8 +327,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "optional": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -398,8 +398,8 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "pseudomap": "1.0.2", + "yallist": "2.1.2" } }, "mime": { @@ -417,7 +417,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", "requires": { - "mime-db": "~1.36.0" + "mime-db": "1.36.0" } }, "minimalistic-assert": { @@ -431,7 +431,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "optional": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -466,9 +466,9 @@ "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", "optional": true, "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" + "mkdirp": "0.5.1", + "ncp": "2.0.0", + "rimraf": "2.4.5" } }, "mysql": { @@ -514,7 +514,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "path-is-absolute": { @@ -563,13 +563,13 @@ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "request": { @@ -577,26 +577,26 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "aws-sign2": "0.7.0", + "aws4": "1.8.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.1.0", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.20", + "oauth-sign": "0.9.0", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.4.3", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" } }, "restify": { @@ -604,28 +604,28 @@ "resolved": "https://registry.npmjs.org/restify/-/restify-7.2.1.tgz", "integrity": "sha512-xygVfQn/FiyzSPNIiOlzos6+RVcmTTK/bN0/m4z6vQwUY1yXntAsXM8ckq6hMxYfkhZfbPMM5hvBf75B8zLE1g==", "requires": { - "assert-plus": "^1.0.0", - "bunyan": "^1.8.12", - "csv": "^1.1.1", - "dtrace-provider": "^0.8.1", - "escape-regexp-component": "^1.0.2", - "ewma": "^2.0.1", - "find-my-way": "^1.13.0", - "formidable": "^1.2.1", - "http-signature": "^1.2.0", - "lodash": "^4.17.10", - "lru-cache": "^4.1.3", - "mime": "^1.5.0", - "negotiator": "^0.6.1", - "once": "^1.4.0", - "pidusage": "^1.2.0", - "qs": "^6.5.2", - "restify-errors": "^5.0.0", - "semver": "^5.4.1", - "spdy": "^3.4.7", - "uuid": "^3.1.0", - "vasync": "^1.6.4", - "verror": "^1.10.0" + "assert-plus": "1.0.0", + "bunyan": "1.8.12", + "csv": "1.2.1", + "dtrace-provider": "0.8.7", + "escape-regexp-component": "1.0.2", + "ewma": "2.0.1", + "find-my-way": "1.15.3", + "formidable": "1.2.1", + "http-signature": "1.2.0", + "lodash": "4.17.11", + "lru-cache": "4.1.3", + "mime": "1.6.0", + "negotiator": "0.6.1", + "once": "1.4.0", + "pidusage": "1.2.0", + "qs": "6.5.2", + "restify-errors": "5.0.0", + "semver": "5.5.1", + "spdy": "3.4.7", + "uuid": "3.3.2", + "vasync": "1.6.4", + "verror": "1.10.0" } }, "restify-errors": { @@ -633,10 +633,10 @@ "resolved": "https://registry.npmjs.org/restify-errors/-/restify-errors-5.0.0.tgz", "integrity": "sha512-+vby9Kxf7qlzvbZSTIEGkIixkeHG+pVCl34dk6eKnL+ua4pCezpdLT/1/eabzPZb65ADrgoc04jeWrrF1E1pvQ==", "requires": { - "assert-plus": "^1.0.0", - "lodash": "^4.2.1", - "safe-json-stringify": "^1.0.3", - "verror": "^1.8.1" + "assert-plus": "1.0.0", + "lodash": "4.17.11", + "safe-json-stringify": "1.2.0", + "verror": "1.10.0" } }, "restify-simple-versioning": { @@ -644,7 +644,7 @@ "resolved": "https://registry.npmjs.org/restify-simple-versioning/-/restify-simple-versioning-1.0.0.tgz", "integrity": "sha512-g20huxy+BkCJhgH678vVDDdFO9gIjeK4VR7Se9h03gSBGO6gZY5sjNaOHTCrl+Cw+eAg8I85EEx5bWrvFOLZQQ==", "requires": { - "restify-errors": "^5.0.0" + "restify-errors": "5.0.0" } }, "ret": { @@ -658,7 +658,7 @@ "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", "optional": true, "requires": { - "glob": "^6.0.1" + "glob": "6.0.4" } }, "safe-buffer": { @@ -677,7 +677,7 @@ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "requires": { - "ret": "~0.1.10" + "ret": "0.1.15" } }, "safer-buffer": { @@ -705,12 +705,12 @@ "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", "requires": { - "debug": "^2.6.8", - "handle-thing": "^1.2.5", - "http-deceiver": "^1.2.7", - "safe-buffer": "^5.0.1", - "select-hose": "^2.0.0", - "spdy-transport": "^2.0.18" + "debug": "2.6.9", + "handle-thing": "1.2.5", + "http-deceiver": "1.2.7", + "safe-buffer": "5.1.2", + "select-hose": "2.0.0", + "spdy-transport": "2.1.0" } }, "spdy-transport": { @@ -718,13 +718,13 @@ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.0.tgz", "integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==", "requires": { - "debug": "^2.6.8", - "detect-node": "^2.0.3", - "hpack.js": "^2.1.6", - "obuf": "^1.1.1", - "readable-stream": "^2.2.9", - "safe-buffer": "^5.0.1", - "wbuf": "^1.7.2" + "debug": "2.6.9", + "detect-node": "2.0.4", + "hpack.js": "2.1.6", + "obuf": "1.1.2", + "readable-stream": "2.3.6", + "safe-buffer": "5.1.2", + "wbuf": "1.7.3" } }, "sqlstring": { @@ -737,15 +737,15 @@ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" + "asn1": "0.2.4", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.2", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.2", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" } }, "stream-transform": { @@ -758,7 +758,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } }, "tough-cookie": { @@ -766,8 +766,8 @@ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" + "psl": "1.1.29", + "punycode": "1.4.1" } }, "tunnel-agent": { @@ -775,7 +775,7 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { - "safe-buffer": "^5.0.1" + "safe-buffer": "5.1.2" } }, "tweetnacl": { @@ -822,9 +822,9 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { - "assert-plus": "^1.0.0", + "assert-plus": "1.0.0", "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "extsprintf": "1.3.0" } }, "wbuf": { @@ -832,7 +832,7 @@ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "requires": { - "minimalistic-assert": "^1.0.0" + "minimalistic-assert": "1.0.1" } }, "wrappy": { diff --git a/api/res/setup_sql.sql b/api/res/setup_sql.sql index 0643262..62e5af7 100644 --- a/api/res/setup_sql.sql +++ b/api/res/setup_sql.sql @@ -23,7 +23,7 @@ CREATE TABLE `userJoinedGames` ( ); CREATE TABLE `polygonArea` ( - gameID VARCHAR(6) UNIQUE NOT NULL, + gameID VARCHAR(6) NOT NULL, polygonID VARCHAR(36) UNIQUE NOT NULL, userID VARCHAR(6) NOT NULL, area DOUBLE(30,4) NOT NULL, @@ -53,6 +53,20 @@ BEGIN END // DELIMITER ; + +DELIMITER // +CREATE PROCEDURE insertPolygon +(IN gID VARCHAR(6), +IN usID VARCHAR(6), +IN a DOUBLE(30,4)) +BEGIN + DECLARE lastid VARCHAR(36) DEFAULT UUID(); + INSERT INTO `polygonArea` (gameID, polygonID, userID, area) VALUES + (gID, lastid, usID, a); + SELECT * FROM `polygonArea` WHERE polygonID = lastid; +END // +DELIMITER ; + INSERT INTO `gameInstances` (gameID) VALUES ("samdum"); INSERT INTO `users` (userID, nickname) VALUES ("samded", "Lesmaux"); INSERT INTO `users` (userID, nickname) VALUES ("fanded", "Umbra Sheep"); diff --git a/api/routes/routes.js b/api/routes/routes.js index e3411f7..e38cfbd 100644 --- a/api/routes/routes.js +++ b/api/routes/routes.js @@ -13,4 +13,13 @@ module.exports = function (server) { return next(); }); + server.post("/polygon", function (req, res, next) { + if (versioner.currentVersion === 1) { + apiV1.isPolygon(req, res); + return next(); + } + res.send(200); + return next(); + }); + }; \ No newline at end of file diff --git a/api/v1/api.js b/api/v1/api.js index 61abef1..a3c1196 100644 --- a/api/v1/api.js +++ b/api/v1/api.js @@ -1,10 +1,11 @@ let db = require("../config/db.js"); +let mathFunc = require("./mathFunc.js"); +let util = require("util"); module.exports = { getPolygons : function (req, res) { if (req.query.gameID != null) { - let query = "CALL getPolygonPoints(\"samdum\");"; - console.log("hi"); + let query = "CALL getPolygonPoints(\"" + req.query.gameID + "\");"; db.get().query(query, function(err, rows){ if (err) return res.send(400); res.send(rows[0]); @@ -13,5 +14,56 @@ module.exports = { } else { res.send(500); } + }, + isPolygon: function (req, res) { + if (req.body.gameID != null && req.body.userID != null && req.body.points != null) { + let gameID = req.body.gameID; + let userID = req.body.userID; + let points = JSON.parse(req.body.points); + console.log(points); + if (points.length < 2) { + res.send([]); + } else { + let firstPoint = points[0]; + let lastPoint = points[points.length - 1]; + let distance = mathFunc.gpsToMeters(firstPoint.lat, firstPoint.lng, lastPoint.lat, lastPoint.lng); + console.log(distance); + if (distance < 3) { + //area is just 1 for now we fix later. + query = util.format("CALL insertPolygon(\"%s\", \"%s\", 1)", gameID, userID); + db.get().query(query, function(err, rows) { + if (err) { + console.log(err); + return res.send(400); + } + + let polygonID = rows[0][0].polygonID; + query = "INSERT INTO polygonPoints (polygonID, lat, lng) VALUES "; + let delimiterNecessary = false; + + points.map((point) => { + if (delimiterNecessary) { + query += ","; + } + query += util.format("(\"%s\",%s,%s)", polygonID, point.lat, point.lng); + delimiterNecessary = true; + }); + query += ";"; + + db.get().query(query, function(err, pointRows) { + if (err) { + console.log(err); + return res.send(400); + } + res.send(rows[0][0]); + return; + }); + }); + } else { + res.send([]); + } + } + + } } } \ No newline at end of file diff --git a/api/v1/mathFunc.js b/api/v1/mathFunc.js new file mode 100644 index 0000000..62bed1f --- /dev/null +++ b/api/v1/mathFunc.js @@ -0,0 +1,13 @@ +module.exports = { + gpsToMeters: function (lat1, lon1, lat2, lon2){ // generally used geo measurement function + var R = 6378.137; // Radius of earth in KM + var dLat = lat2 * Math.PI / 180 - lat1 * Math.PI / 180; + var dLon = lon2 * Math.PI / 180 - lon1 * Math.PI / 180; + var a = Math.sin(dLat/2) * Math.sin(dLat/2) + + Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) * + Math.sin(dLon/2) * Math.sin(dLon/2); + var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); + var d = R * c; + return d * 1000; // meters + } +} \ No newline at end of file