From ea1022cac6b78bb2fb6582d11b3fb0c2f676dc1c Mon Sep 17 00:00:00 2001 From: Sendou <38327916+Sendouc@users.noreply.github.com> Date: Tue, 16 Jun 2020 21:55:46 +0300 Subject: [PATCH] recalc team countries if someone changes their country --- frontend-react/package-lock.json | 6 +- frontend-react/package.json | 2 +- graphql-schemas/team.js | 2 +- graphql-schemas/user.js | 44 +++++++++++- package-lock.json | 120 ++++++++++++++++--------------- package.json | 6 +- utils/mocks.js | 4 +- 7 files changed, 114 insertions(+), 70 deletions(-) diff --git a/frontend-react/package-lock.json b/frontend-react/package-lock.json index 45321158b..7983ae731 100644 --- a/frontend-react/package-lock.json +++ b/frontend-react/package-lock.json @@ -2005,9 +2005,9 @@ } }, "@testing-library/jest-dom": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.10.0.tgz", - "integrity": "sha512-t6e6Y6cu9cnTRwgNzgGtMn+bluLa/JkQ8j876g0XoZ6QKK/VBPPAIJ2PVWK4pjTD3U/BROP0o29cMwpZHcqltA==", + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.10.1.tgz", + "integrity": "sha512-uv9lLAnEFRzwUTN/y9lVVXVXlEzazDkelJtM5u92PsGkEasmdI+sfzhZHxSDzlhZVTrlLfuMh2safMr8YmzXLg==", "requires": { "@babel/runtime": "^7.9.2", "@types/testing-library__jest-dom": "^5.9.1", diff --git a/frontend-react/package.json b/frontend-react/package.json index e51da2a94..caebf4288 100644 --- a/frontend-react/package.json +++ b/frontend-react/package.json @@ -10,7 +10,7 @@ "@reach/router": "^1.3.3", "@rehooks/local-storage": "^2.4.0", "@sendou/react-sketch": "^0.5.2", - "@testing-library/jest-dom": "^5.10.0", + "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^10.2.1", "@testing-library/user-event": "^11.4.2", "@types/jest": "^26.0.0", diff --git a/graphql-schemas/team.js b/graphql-schemas/team.js index 4722fd3a2..282cbf70e 100644 --- a/graphql-schemas/team.js +++ b/graphql-schemas/team.js @@ -17,7 +17,7 @@ const typeDef = gql` } extend type User { - team: Team + team: ID } type Founded { diff --git a/graphql-schemas/user.js b/graphql-schemas/user.js index 79a0a9b06..590d1908a 100644 --- a/graphql-schemas/user.js +++ b/graphql-schemas/user.js @@ -1,6 +1,7 @@ const { UserInputError, gql } = require("apollo-server-express") const User = require("../mongoose-models/user") const Player = require("../mongoose-models/player") +const Team = require("../mongoose-models/team") const countries = require("../utils/countries") const weapons = require("../utils/weapons") const mockUser = require("../utils/mocks") @@ -53,6 +54,26 @@ const typeDef = gql` top500: Boolean! } ` + +const recalculateTeamsCountries = async (team, newCountry, discordIdToSkip) => { + const newCountries = new Set() + newCountries.add(newCountry) + for (const member of team.members) { + if (member.discordId === discordIdToSkip) { + continue + } + const user = await User.findOne({ discord_id: member.discordId }) + console.log("user.id", user.id) + console.log("user.country", user.country) + if (user.country) newCountries.add(user.country) + } + + console.log("newCountries", newCountries) + team.countries = Array.from(newCountries) + + await team.save() +} + const resolvers = { User: { top500: async (root) => { @@ -91,7 +112,7 @@ const resolvers = { Query: { user: (root, args, ctx) => { if (process.env.LOGGED_IN) { - return { user: mockUser } + return mockUser } return ctx.user }, @@ -123,7 +144,7 @@ const resolvers = { Mutation: { updateUser: async (root, args, ctx) => { if (!ctx.user) throw new AuthenticationError("not authenticated") - if (args.country) + if (args.country) { if ( countries .map((countryObj) => countryObj.code) @@ -134,6 +155,25 @@ const resolvers = { }) } + if (ctx.user.team) { + const team = await Team.findById(ctx.user.team) + + if (ctx.user.country && ctx.user.country !== args.country) { + // triggered if user is changing their country - shouldn't happen too often at all + await recalculateTeamsCountries( + team, + args.country, + ctx.user.discord_id + ) + } else { + const countries = team.countries || [] + if (!countries.includes(args.country)) countries.push(args.country) + team.countries = countries + await team.save() + } + } + } + if (args.stick_sens !== null) { const number = Math.floor(args.stick_sens * 10) if (number < -50 || number > 50 || number % 5 != 0) { diff --git a/package-lock.json b/package-lock.json index d56870690..04bf2e6be 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,9 +40,12 @@ } }, "@apollographql/graphql-playground-html": { - "version": "1.6.24", - "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.24.tgz", - "integrity": "sha512-8GqG48m1XqyXh4mIZrtB5xOhUwSsh1WsrrsaZQOEYYql3YN9DEu9OOSg0ILzXHZo/h2Q74777YE4YzlArQzQEQ==" + "version": "1.6.26", + "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.26.tgz", + "integrity": "sha512-XAwXOIab51QyhBxnxySdK3nuMEUohhDsHQ5Rbco/V1vjlP75zZ0ZLHD9dTpXTN8uxKxopb2lUvJTq+M4g2Q0HQ==", + "requires": { + "xss": "^1.0.6" + } }, "@protobufjs/aspromise": { "version": "1.1.2", @@ -391,9 +394,9 @@ } }, "apollo-engine-reporting": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-2.0.0.tgz", - "integrity": "sha512-FvNwORsh3nxEfvQqd2xbd468a0q/R3kYar/Bk6YQdBX5qwqUhqmOcOSxLFk8Zb77HpwHij5CPpPWJb53TU1zcA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-2.0.1.tgz", + "integrity": "sha512-3OYYk7DqNuJ5xKYnyLy5O2n506jYSryim8WqzBTn9MRphRamwPFjHYQm+akPA60AubXrWnYa6A8euMAiQU0ttA==", "requires": { "apollo-engine-reporting-protobuf": "^0.5.1", "apollo-graphql": "^0.4.0", @@ -446,12 +449,12 @@ } }, "apollo-server": { - "version": "2.14.3", - "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-2.14.3.tgz", - "integrity": "sha512-F2fsJa0YXkgKapsUmPOMXW+9HQaXF3EEP/iGmOcIVll3zBCkEzwEVv6w9/EIlpEw1KCm6uemYN1lMNs7fYTQsw==", + "version": "2.14.4", + "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-2.14.4.tgz", + "integrity": "sha512-5RRs/UnzZMK+QGqCE8Wyfy5vNBFPmweFlkMRs966pM+6orN/g2GxxypKRsGa2rit2Wz0wki8vw+MjI80t2lPvg==", "requires": { - "apollo-server-core": "^2.14.3", - "apollo-server-express": "^2.14.3", + "apollo-server-core": "^2.14.4", + "apollo-server-express": "^2.14.4", "express": "^4.0.0", "graphql-subscriptions": "^1.0.0", "graphql-tools": "^4.0.0" @@ -466,17 +469,17 @@ } }, "apollo-server-core": { - "version": "2.14.3", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.14.3.tgz", - "integrity": "sha512-A9RkWuHFZ04uEnXof5V02T7wfhUel7Hx9LpEN4N59mXTpb7ewW+cb0u+J+SP+Y4vDhVqaHCGoveRVKy6X2kLhw==", + "version": "2.14.4", + "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.14.4.tgz", + "integrity": "sha512-aAfsvbJ2YrqAXDBgcBQocOmQJ5DkeOnEYQ6ADdkkDNU68V5yBRkAHLTOzPfbUlGHVrnOH8PT1FIVWwu5mBgkVA==", "requires": { "@apollographql/apollo-tools": "^0.4.3", - "@apollographql/graphql-playground-html": "1.6.24", + "@apollographql/graphql-playground-html": "1.6.26", "@types/graphql-upload": "^8.0.0", "@types/ws": "^7.0.0", "apollo-cache-control": "^0.11.0", "apollo-datasource": "^0.7.1", - "apollo-engine-reporting": "^2.0.0", + "apollo-engine-reporting": "^2.0.1", "apollo-server-caching": "^0.5.1", "apollo-server-env": "^2.4.4", "apollo-server-errors": "^2.4.1", @@ -484,7 +487,7 @@ "apollo-server-types": "^0.5.0", "apollo-tracing": "^0.11.0", "fast-json-stable-stringify": "^2.0.0", - "graphql-extensions": "^0.12.2", + "graphql-extensions": "^0.12.3", "graphql-tag": "^2.9.2", "graphql-tools": "^4.0.0", "graphql-upload": "^8.0.2", @@ -509,17 +512,17 @@ "integrity": "sha512-7oEd6pUxqyWYUbQ9TA8tM0NU/3aGtXSEibo6+txUkuHe7QaxfZ2wHRp+pfT1LC1K3RXYjKj61/C2xEO19s3Kdg==" }, "apollo-server-express": { - "version": "2.14.3", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.14.3.tgz", - "integrity": "sha512-35PZXG6sQYB0YT+TBZ5KRxyWqknVnevuHyPG5XSAhMtWsVF2ySMzRPs6JdQTi0p2jlFTo5pt4P6FT3hRu0EFUw==", + "version": "2.14.4", + "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.14.4.tgz", + "integrity": "sha512-g0ml0NGmghvJhTiXMR0HqDD8eTz77zdgzDG2XoqNoRehtVIsZq8fmKTagVt9cUKCKKiBPUF+4tqAGD9lnprUdw==", "requires": { - "@apollographql/graphql-playground-html": "1.6.24", + "@apollographql/graphql-playground-html": "1.6.26", "@types/accepts": "^1.3.5", "@types/body-parser": "1.19.0", "@types/cors": "^2.8.4", "@types/express": "4.17.4", "accepts": "^1.3.5", - "apollo-server-core": "^2.14.3", + "apollo-server-core": "^2.14.4", "apollo-server-types": "^0.5.0", "body-parser": "^1.18.3", "cors": "^2.8.4", @@ -868,6 +871,11 @@ "delayed-stream": "~1.0.0" } }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, "compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -1037,6 +1045,11 @@ "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true }, + "cssfilter": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", + "integrity": "sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4=" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -1153,21 +1166,21 @@ } }, "es-abstract": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", - "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", "object-inspect": "^1.7.0", "object-keys": "^1.1.1", "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" } }, "es-to-primitive": { @@ -1408,9 +1421,9 @@ "integrity": "sha512-0TVyfOlCGhv/DBczQkJmwXOK6fjWkjzY3Pt7wY8i0gcYXq8aogG3weCsg48m72lywKSeOqedEHvVPOvZvSD51Q==" }, "graphql-extensions": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.12.2.tgz", - "integrity": "sha512-vFaZua5aLiCOOzxfY5qzHZ6S52BCqW7VVOwzvV52Wb5edRm3dn6u+1MR9yYyEqUHSf8LvdhEojYlOkKiaQ4ghA==", + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.12.3.tgz", + "integrity": "sha512-W7iT0kzlwTiZU7fXfw9IgWnsqVj7EFLd0/wVcZZRAbR8L3f4+YsGls0oxKdsrvYBnbG347BXKQmIyo6GTEk4XA==", "requires": { "@apollographql/apollo-tools": "^0.4.3", "apollo-server-env": "^2.4.4", @@ -1834,13 +1847,13 @@ } }, "mongoose": { - "version": "5.9.18", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.9.18.tgz", - "integrity": "sha512-agZbIuQcN1gZ12BJn6KesA+bgsvoLVjCwhfPw88hggxX8O24SWK4EJwN35GEZKDej9AHUZKNAPgmdeXCVQxviA==", + "version": "5.9.19", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.9.19.tgz", + "integrity": "sha512-wJ5FR2ykvyd17MRHA6sku/N1CMaC/kf4CnN357htD48RpzJhW60YDkxPSPLbkLg8Woa+i7jYi0glhzC0EcBcRQ==", "requires": { "bson": "^1.1.4", "kareem": "2.3.1", - "mongodb": "3.5.8", + "mongodb": "3.5.9", "mongoose-legacy-pluralize": "1.0.2", "mpath": "0.7.0", "mquery": "3.2.2", @@ -1857,9 +1870,9 @@ "integrity": "sha512-S/yKGU1syOMzO86+dGpg2qGoDL0zvzcb262G+gqEy6TgP6rt6z6qxSFX/8X6vLC91P7G7C3nLs0+bvDzmvBA3Q==" }, "mongodb": { - "version": "3.5.8", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.8.tgz", - "integrity": "sha512-jz7mR58z66JKL8Px4ZY+FXbgB7d0a0hEGCT7kw8iye46/gsqPrOEpZOswwJ2BQlfzsrCLKdsF9UcaUfGVN2HrQ==", + "version": "3.5.9", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.9.tgz", + "integrity": "sha512-vXHBY1CsGYcEPoVWhwgxIBeWqP3dSu9RuRDsoLRPTITrcrgm1f0Ubu1xqF9ozMwv53agmEiZm0YGo+7WL3Nbug==", "requires": { "bl": "^2.2.0", "bson": "^1.1.4", @@ -2511,26 +2524,6 @@ "es-abstract": "^1.17.5" } }, - "string.prototype.trimleft": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", - "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimstart": "^1.0.0" - } - }, - "string.prototype.trimright": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", - "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimend": "^1.0.0" - } - }, "string.prototype.trimstart": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", @@ -2824,6 +2817,15 @@ "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "dev": true }, + "xss": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.7.tgz", + "integrity": "sha512-A9v7tblGvxu8TWXQC9rlpW96a+LN1lyw6wyhpTmmGW+FwRMactchBR3ROKSi33UPCUcUHSu8s9YP6F+K3Mw//w==", + "requires": { + "commander": "^2.20.3", + "cssfilter": "0.0.10" + } + }, "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", diff --git a/package.json b/package.json index 07d8cea3d..0d1246fd7 100644 --- a/package.json +++ b/package.json @@ -16,8 +16,8 @@ "author": "Sendou", "license": "ISC", "dependencies": { - "apollo-server": "^2.14.3", - "apollo-server-express": "^2.14.3", + "apollo-server": "^2.14.4", + "apollo-server-express": "^2.14.4", "axios": "^0.19.2", "btoa": "^1.2.1", "compression": "^1.7.4", @@ -27,7 +27,7 @@ "express-session": "^1.17.1", "graphql": "^15.1.0", "lodash": "^4.17.15", - "mongoose": "^5.9.18", + "mongoose": "^5.9.19", "mongoose-unique-validator": "^2.0.3", "node-fetch": "^2.6.0", "passport": "^0.4.1", diff --git a/utils/mocks.js b/utils/mocks.js index 1bc6d8a76..1d1cd12cd 100644 --- a/utils/mocks.js +++ b/utils/mocks.js @@ -1,6 +1,8 @@ const mockUser = { + _id: "5cee8f73d1120d4315c55011", id: "5cee8f73d1120d4315c55011", - //team: "5e3ecc0ea7dd3830303eaaa7", + //id: "5cee8f73d1120d4315c55011", + team: "5ee60f1fff81d717ecae4bb1", discord_id: "79237403620945920", __v: 0, avatar: "a22c9557975494f859242aaf9b317058",