diff --git a/models/ballot.js b/models/ballot.js new file mode 100644 index 000000000..1e37cd04b --- /dev/null +++ b/models/ballot.js @@ -0,0 +1,11 @@ +const mongoose = require("mongoose") + +const ballotSchema = new mongoose.Schema({ + discord_id: { type: String, required: true }, + plus_server: { type: String, required: true }, + month: { type: Number, required: true }, + year: { type: Number, required: true }, + votes: { type: [mongoose.Schema.Types.ObjectId], required: true }, +}) + +module.exports = mongoose.model("BallotPerson", ballotSchema) diff --git a/models/suggested.js b/models/suggested.js new file mode 100644 index 000000000..7ae709729 --- /dev/null +++ b/models/suggested.js @@ -0,0 +1,11 @@ +const mongoose = require("mongoose") + +const suggestedSchema = new mongoose.Schema({ + discord_id: { type: String, required: true }, + suggester_discord_id: { type: String, required: true }, + plus_region: { type: String, required: true }, + plus_server: { type: String, required: true }, + description: { type: String, required: true }, +}) + +module.exports = mongoose.model("Suggested", suggestedSchema) diff --git a/models/summary.js b/models/summary.js new file mode 100644 index 000000000..0672a14a6 --- /dev/null +++ b/models/summary.js @@ -0,0 +1,13 @@ +const mongoose = require("mongoose") + +const summarySchema = new mongoose.Schema({ + discord_id: { type: String, required: true }, + suggester_discord_id: String, + voucher_discord_id: String, + plus_server: { type: String, required: true }, + month: { type: Number, required: true }, + year: { type: Number, required: true }, + score: { type: Number, required: true }, +}) + +module.exports = mongoose.model("SummaryPerson", summarySchema) diff --git a/models/user.js b/models/user.js index 8249bde05..d2573e62e 100644 --- a/models/user.js +++ b/models/user.js @@ -13,6 +13,13 @@ const userSchema = new mongoose.Schema({ }, weapons: [String], top500: Boolean, + plus: { + membership_status: String, + vouch_status: String, + plus_region: String, + can_vouch: Boolean, + last_vouched: Date, + }, }) module.exports = mongoose.model("User", userSchema) diff --git a/models/votedperson.js b/models/votedperson.js new file mode 100644 index 000000000..c283b57b8 --- /dev/null +++ b/models/votedperson.js @@ -0,0 +1,11 @@ +const mongoose = require("mongoose") + +const votedPersonSchema = new mongoose.Schema({ + discord_id: { type: String, required: true }, + voter_discord_id: { type: String, required: true }, + score: { type: Number, required: true }, + month: { type: Number, required: true }, + year: { type: Number, required: true }, +}) + +module.exports = mongoose.model("VotedPerson", votedPersonSchema) diff --git a/schema.js b/schema.js index 1a479ed37..468ee0b08 100644 --- a/schema.js +++ b/schema.js @@ -12,6 +12,7 @@ const { Link, linkResolvers } = require("./schemas/link") const { Trend, trendResolvers } = require("./schemas/trend") const { Tournament, tournamentResolvers } = require("./schemas/tournament") const { FAPost, faPostResolvers } = require("./schemas/fapost") +const { Plus, plusResolvers } = require("./schemas/plus") const Query = gql` type Query { @@ -41,6 +42,7 @@ const schema = makeExecutableSchema({ Trend, Tournament, FAPost, + Plus, ], resolvers: merge( resolvers, @@ -53,7 +55,8 @@ const schema = makeExecutableSchema({ linkResolvers, trendResolvers, tournamentResolvers, - faPostResolvers + faPostResolvers, + plusResolvers ), }) diff --git a/schemas/plus.js b/schemas/plus.js new file mode 100644 index 000000000..7cdcb23bf --- /dev/null +++ b/schemas/plus.js @@ -0,0 +1,51 @@ +const { UserInputError, gql } = require("apollo-server-express") +const Ballot = require("../models/ballot") +const Suggested = require("../models/suggested") +const Summary = require("../models/summary") +const VotedPerson = require("../models/votedperson") + +const typeDef = gql` + type Suggested { + discord_id: String! + suggester_discord_id: String! + plus_region: PlusRegion! + plus_server: PlusServer! + description: String! + } + + type VotedPerson { + discord_id: String! + voter_discord_id: String! + month: Int! + year: Int! + "Voting result -2 to +2 (-1 to +1 cross-region)" + score: Float! + } + + type Ballot { + discord_id: String! + plus_server: PlusServer! + month: Int! + year: Int! + votes: [VotedPerson!]! + } + + "Voting result of a player" + type Summary { + discord_id: String! + suggester_discord_id: String + voucher_discord_id: String + plus_server: PlusServer! + month: Int! + year: Int! + "Average of all scores of the voters for the month -100% to 100%" + score: Float! + } +` + +const resolvers = {} + +module.exports = { + Plus: typeDef, + plusResolvers: resolvers, +} diff --git a/schemas/user.js b/schemas/user.js index 9be19ea85..2e39510a2 100644 --- a/schemas/user.js +++ b/schemas/user.js @@ -20,11 +20,34 @@ const typeDef = gql` weapons: [String] ): Boolean } + "The control sensitivity used in Splatoon 2" type Sens { stick: Float motion: Float } + + "+1 or +2 LFG server on Discord" + enum PlusServer { + ONE + TWO + } + + "Region used for voting" + enum PlusRegion { + EU + NA + } + + "Status with +1 and +2 related things" + type PlusStatus { + membership_status: PlusServer + vouch_status: PlusServer + plus_region: PlusRegion + can_vouch: Boolean + last_vouched: String + } + "Represents user account. Also includes info regarding solo ladder." type User { id: ID! @@ -40,6 +63,7 @@ const typeDef = gql` sens: Sens weapons: [String]! top500: Boolean! + plus: PlusStatus } ` const resolvers = {