diff --git a/graphql-schemas/team.js b/graphql-schemas/team.js index 205b85172..5b7cb8b8d 100644 --- a/graphql-schemas/team.js +++ b/graphql-schemas/team.js @@ -16,7 +16,7 @@ const typeDef = gql` joinTeam(inviteCode: String!): Boolean! resetInviteCode: String! leaveTeam: Boolean! - # disbandTeam: Boolean! + disbandTeam: Boolean! # transferCaptain: Boolean! # updateTeam(newValues: UpdateTeamInput!): Boolean! } @@ -252,6 +252,24 @@ const resolvers = { return true }, + resetInviteCode: async (_root, _args, { user }) => { + if (!user) + throw new UserInputError("Must be logged in to reset invite code") + if (!user.team) { + throw new UserInputError("Must have team to reset invite code") + } + + const team = await Team.findById(user.team) + if (!team) { + throw new Error("Unexpected error: team not found with the id") + } + + const newCode = uuidv4() + team.inviteCode = newCode + await team.save() + + return newCode + }, leaveTeam: async (_root, _args, { user }) => { if (!user) throw new UserInputError("Must be logged in to leave a team") if (!user.team) { @@ -274,7 +292,7 @@ const resolvers = { } team.members = team.members.filter( - (member) => member.discordId !== user._id + (member) => member.discordId !== user.discord_id ) await User.findByIdAndUpdate(user._id, { $unset: { team: "" } }) @@ -285,11 +303,55 @@ const resolvers = { pastMembers.push(user.discord_id) team.pastMembersDiscordIds = pastMembers - await recalculateTeamsCountries(team, null, user.discord_id) - await recalculateTeamsXp(team, user.discord_id) + Promise.all([ + recalculateTeamsCountries(team, null, user.discord_id), + recalculateTeamsXp(team, user.discord_id), + ]) + + console.error("above not working") await team.save() + return true + }, + disbandTeam: async (_root, _args, { user }) => { + if (!user) + throw new UserInputError("Must be logged in to reset invite code") + if (!user.team) { + throw new UserInputError("Must have team to reset invite code") + } + + const team = await Team.findById(user.team) + if (!team) { + throw new Error("Unexpected error: team not found with the id") + } + + const memberOfTeam = team.members.find( + (member) => member.discordId === user.discord_id + ) + if (!memberOfTeam) { + throw new Error("Unexpected error: user not found in the member list") + } + + if (!memberOfTeam.captain) { + throw new UserInputError( + "Can't disband a team you are not a captain for" + ) + } + + team.disbanded = true + + await Promise.all( + team.members + .map((member) => + User.findOneAndUpdate( + { discord_id: member.discordId }, + { $unset: { team: "" } } + ) + ) + .concat(team.save()) + ) + return true }, }, diff --git a/package-lock.json b/package-lock.json index 04bf2e6be..3a7b0a893 100644 --- a/package-lock.json +++ b/package-lock.json @@ -394,9 +394,9 @@ } }, "apollo-engine-reporting": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-2.0.1.tgz", - "integrity": "sha512-3OYYk7DqNuJ5xKYnyLy5O2n506jYSryim8WqzBTn9MRphRamwPFjHYQm+akPA60AubXrWnYa6A8euMAiQU0ttA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-2.2.0.tgz", + "integrity": "sha512-FmfWTpyEATO392QHcot3PNMrxNhEJ4Kq+QiYY263vN/OBLZQ5zpkFY25iB6gVuiJoz3NUkByhxq5f/XjarJVvA==", "requires": { "apollo-engine-reporting-protobuf": "^0.5.1", "apollo-graphql": "^0.4.0", @@ -449,12 +449,12 @@ } }, "apollo-server": { - "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==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-2.15.0.tgz", + "integrity": "sha512-Qx9VT3kOgJ6WVZlbpUl29I9pyfwFTY4SbZm9npuJd0v+8kVn2YijHB8DEDJ2B/6XP8WCKtq2W0W2RK5Kb1laHQ==", "requires": { - "apollo-server-core": "^2.14.4", - "apollo-server-express": "^2.14.4", + "apollo-server-core": "^2.15.0", + "apollo-server-express": "^2.15.0", "express": "^4.0.0", "graphql-subscriptions": "^1.0.0", "graphql-tools": "^4.0.0" @@ -469,9 +469,9 @@ } }, "apollo-server-core": { - "version": "2.14.4", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.14.4.tgz", - "integrity": "sha512-aAfsvbJ2YrqAXDBgcBQocOmQJ5DkeOnEYQ6ADdkkDNU68V5yBRkAHLTOzPfbUlGHVrnOH8PT1FIVWwu5mBgkVA==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.15.0.tgz", + "integrity": "sha512-PwNm/G5IXReev7E0ZaRAekQ7pN9BTuXH8c2QVgfMGMno3XiN5Dj+1DXYQthpwNJch0y5zhhLcb/JbClijgSEsA==", "requires": { "@apollographql/apollo-tools": "^0.4.3", "@apollographql/graphql-playground-html": "1.6.26", @@ -479,7 +479,7 @@ "@types/ws": "^7.0.0", "apollo-cache-control": "^0.11.0", "apollo-datasource": "^0.7.1", - "apollo-engine-reporting": "^2.0.1", + "apollo-engine-reporting": "^2.2.0", "apollo-server-caching": "^0.5.1", "apollo-server-env": "^2.4.4", "apollo-server-errors": "^2.4.1", @@ -512,9 +512,9 @@ "integrity": "sha512-7oEd6pUxqyWYUbQ9TA8tM0NU/3aGtXSEibo6+txUkuHe7QaxfZ2wHRp+pfT1LC1K3RXYjKj61/C2xEO19s3Kdg==" }, "apollo-server-express": { - "version": "2.14.4", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.14.4.tgz", - "integrity": "sha512-g0ml0NGmghvJhTiXMR0HqDD8eTz77zdgzDG2XoqNoRehtVIsZq8fmKTagVt9cUKCKKiBPUF+4tqAGD9lnprUdw==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.15.0.tgz", + "integrity": "sha512-ECptVIrOVW2cmMWvqtpkZfyZrQL8yTSgbVvP4M8qcPV/3XxDJa6444zy7vxqN7lyYl8IJAsg/IwC0vodoXe//A==", "requires": { "@apollographql/graphql-playground-html": "1.6.26", "@types/accepts": "^1.3.5", @@ -522,7 +522,7 @@ "@types/cors": "^2.8.4", "@types/express": "4.17.4", "accepts": "^1.3.5", - "apollo-server-core": "^2.14.4", + "apollo-server-core": "^2.15.0", "apollo-server-types": "^0.5.0", "body-parser": "^1.18.3", "cors": "^2.8.4", diff --git a/package.json b/package.json index 0d1246fd7..986999453 100644 --- a/package.json +++ b/package.json @@ -16,8 +16,8 @@ "author": "Sendou", "license": "ISC", "dependencies": { - "apollo-server": "^2.14.4", - "apollo-server-express": "^2.14.4", + "apollo-server": "^2.15.0", + "apollo-server-express": "^2.15.0", "axios": "^0.19.2", "btoa": "^1.2.1", "compression": "^1.7.4", diff --git a/utils/mocks.js b/utils/mocks.js index ac61b1af7..265f515eb 100644 --- a/utils/mocks.js +++ b/utils/mocks.js @@ -2,8 +2,7 @@ const mockUser = { _id: "5cee8f73d1120d4315c55011", id: "5cee8f73d1120d4315c55011", team: "5ee60f1fff81d717ecae4bb1", - //discord_id: "79237403620945920", - discord_id: "220344765240180738", + discord_id: "79237403620945920", __v: 0, avatar: "a22c9557975494f859242aaf9b317058", discriminator: "0043",