mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-09-09 20:56:02 -05:00
team backend started
This commit is contained in:
75
graphql-schemas/team.js
Normal file
75
graphql-schemas/team.js
Normal file
@@ -0,0 +1,75 @@
|
||||
const { UserInputError, gql } = require("apollo-server-express")
|
||||
const Team = require("../mongoose-models/team")
|
||||
const User = require("../mongoose-models/user")
|
||||
|
||||
const typeDef = gql`
|
||||
extend type Query {
|
||||
teams: [Team!]!
|
||||
}
|
||||
|
||||
extend type Mutation {
|
||||
createTeam(name: String!): Team!
|
||||
}
|
||||
|
||||
extend type User {
|
||||
team: Team
|
||||
}
|
||||
|
||||
type Result {
|
||||
date: String
|
||||
tweet_url: String
|
||||
tournament_name: String!
|
||||
placement: Int!
|
||||
}
|
||||
|
||||
type Team {
|
||||
name: String!
|
||||
twitter_name: String
|
||||
captain_discord_id: String!
|
||||
member_discord_ids: [String!]!
|
||||
member_users: [User!]!
|
||||
countries: [String!]!
|
||||
tag: String
|
||||
invite_code: String
|
||||
lf_post: String
|
||||
tournament_results: [Result!]!
|
||||
}
|
||||
`
|
||||
const resolvers = {
|
||||
Query: {
|
||||
teams: (root, args) => Team.find({}),
|
||||
},
|
||||
Mutation: {
|
||||
createTeam: async (root, args, { user }) => {
|
||||
if (!user) throw new UserInputError("Must be logged in to create a team")
|
||||
if (user.team)
|
||||
throw new UserInputError(
|
||||
"Can't create a team since you are already in one"
|
||||
)
|
||||
|
||||
const name = args.name.replace(/\s\s+/g, " ").trim()
|
||||
|
||||
if (name.length < 2 || name.length > 32 || !/^[a-z0-9␣]+$/i.test(name)) {
|
||||
throw new UserInputError("Invalid team name provided", {
|
||||
invalidArgs: args,
|
||||
})
|
||||
}
|
||||
|
||||
const name_regex = `^${name}$`
|
||||
const existing_team = await Team.findOne({
|
||||
name: { $regex: new RegExp(name_regex, "i") },
|
||||
})
|
||||
if (existing_team)
|
||||
throw new UserInputError("Team with this name already exists")
|
||||
|
||||
const team = new Team({ name, captain_discord_id: user.discord_id })
|
||||
await User.findByIdAndUpdate(user._id, { $set: { team: team._id } })
|
||||
return team.save()
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
Team: typeDef,
|
||||
teamResolvers: resolvers,
|
||||
}
|
||||
29
mongoose-models/team.js
Normal file
29
mongoose-models/team.js
Normal file
@@ -0,0 +1,29 @@
|
||||
const mongoose = require("mongoose")
|
||||
|
||||
const teamSchema = new mongoose.Schema({
|
||||
name: String,
|
||||
twitter_name: String,
|
||||
captain_discord_id: String,
|
||||
member_discord_ids: [String],
|
||||
countries: [String],
|
||||
tag: String,
|
||||
invite_code: String,
|
||||
lf_post: String,
|
||||
tournament_results: [
|
||||
{
|
||||
date: Date,
|
||||
tweet_url: String,
|
||||
tournament_name: String,
|
||||
placement: Number,
|
||||
},
|
||||
],
|
||||
})
|
||||
|
||||
teamSchema.virtual("member_users", {
|
||||
ref: "User",
|
||||
localField: "member_discord_ids",
|
||||
foreignField: "discord_id",
|
||||
justOne: true,
|
||||
})
|
||||
|
||||
module.exports = mongoose.model("Team", teamSchema)
|
||||
@@ -4,6 +4,10 @@ const userSchema = new mongoose.Schema({
|
||||
username: { type: String, required: true },
|
||||
discriminator: { type: String, required: true },
|
||||
discord_id: { type: String, required: true },
|
||||
team: {
|
||||
type: mongoose.Schema.Types.ObjectId,
|
||||
ref: "Team",
|
||||
},
|
||||
twitch_name: String,
|
||||
twitter_name: String,
|
||||
country: String,
|
||||
|
||||
@@ -16,6 +16,7 @@ const {
|
||||
} = require("./graphql-schemas/tournament")
|
||||
const { FAPost, faPostResolvers } = require("./graphql-schemas/fapost")
|
||||
const { Plus, plusResolvers } = require("./graphql-schemas/plus")
|
||||
const { Team, teamResolvers } = require("./graphql-schemas/team")
|
||||
|
||||
const Query = gql`
|
||||
type Query {
|
||||
@@ -46,6 +47,7 @@ const schema = makeExecutableSchema({
|
||||
Tournament,
|
||||
FAPost,
|
||||
Plus,
|
||||
Team,
|
||||
],
|
||||
resolvers: merge(
|
||||
resolvers,
|
||||
@@ -59,7 +61,8 @@ const schema = makeExecutableSchema({
|
||||
trendResolvers,
|
||||
tournamentResolvers,
|
||||
faPostResolvers,
|
||||
plusResolvers
|
||||
plusResolvers,
|
||||
teamResolvers
|
||||
),
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user