Added Team System
This commit is contained in:
18
web/server/api/team/acceptinvite.js
Normal file
18
web/server/api/team/acceptinvite.js
Normal file
@@ -0,0 +1,18 @@
|
||||
import { ObjectId } from 'mongodb'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const { teamId } = await readBody(event);
|
||||
|
||||
const user = await getAuth(event)
|
||||
|
||||
const teamsColl = db.collection('teams')
|
||||
const usersColl = db.collection('users')
|
||||
|
||||
const team = await teamsColl.findOneAndUpdate({ _id: new ObjectId(teamId) }, { $inc: { count: 1 } })
|
||||
|
||||
if (!team.value) return createError({ statusCode: 500, statusMessage: 'Could not find team'})
|
||||
|
||||
await usersColl.updateOne({ _id: new ObjectId(user._id) }, { $set: { 'team.id': teamId, 'team.admin': false }})
|
||||
|
||||
return team
|
||||
});
|
8
web/server/api/team/all.js
Normal file
8
web/server/api/team/all.js
Normal file
@@ -0,0 +1,8 @@
|
||||
export default defineEventHandler(async () => {
|
||||
const teamsColl = db.collection('teams')
|
||||
|
||||
const cursor = teamsColl.find();
|
||||
const teams = await cursor.toArray()
|
||||
|
||||
return teams
|
||||
});
|
16
web/server/api/team/cancelinvite.js
Normal file
16
web/server/api/team/cancelinvite.js
Normal file
@@ -0,0 +1,16 @@
|
||||
import { ObjectId } from 'mongodb'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const { id } = await readBody(event);
|
||||
|
||||
const user = await getAuth(event)
|
||||
|
||||
const teamsColl = db.collection('teams')
|
||||
const usersColl = db.collection('users')
|
||||
|
||||
const team = await teamsColl.findOne({ _id: new ObjectId(user.team.id) })
|
||||
|
||||
usersColl.updateOne({ _id: new ObjectId(id) }, { $pull: { teamInvites: team._id.toString() } })
|
||||
|
||||
return team
|
||||
});
|
21
web/server/api/team/create.post.js
Normal file
21
web/server/api/team/create.post.js
Normal file
@@ -0,0 +1,21 @@
|
||||
export default defineEventHandler(async (event) => {
|
||||
const { teamName, teamColor } = await readBody(event);
|
||||
|
||||
if (!teamName || !teamColor) return createError({ statusCode: 400, statusMessage: 'teamName and teamColor are required' })
|
||||
if (!isHexColor(teamColor)) return createError({ statusCode: 400, statusMessage: 'Team color is not a valid hex code' })
|
||||
|
||||
const user = await getAuth(event)
|
||||
|
||||
if (user.team) return createError({ statusCode: 400, statusMessage: 'User already is in a team' })
|
||||
|
||||
const teamsColl = db.collection('teams')
|
||||
const usersColl = db.collection('users')
|
||||
|
||||
if (await teamsColl.findOne({ name: teamName })) return createError({ statusCode: 400, statusMessage: 'Team name already exists' })
|
||||
|
||||
const response = await teamsColl.insertOne({ name: teamName, color: teamColor, count: 1 })
|
||||
|
||||
await usersColl.findOneAndUpdate({ 'discord.id': user.discord.id }, { $set: { 'team.id': response.insertedId.toString(), 'team.admin': true } })
|
||||
|
||||
return response;
|
||||
});
|
14
web/server/api/team/demote.js
Normal file
14
web/server/api/team/demote.js
Normal file
@@ -0,0 +1,14 @@
|
||||
import { ObjectId } from 'mongodb'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const { userId } = await readBody(event)
|
||||
|
||||
const user = await getAuth(event)
|
||||
|
||||
if (!user.team.admin) return createError({ statusCode: 403, statusMessage: 'Forbidden' })
|
||||
|
||||
const usersColl = db.collection('users')
|
||||
await usersColl.findOneAndUpdate({ _id: new ObjectId(userId) }, { $set: { 'team.admin': false } });
|
||||
|
||||
return { status: 'Success' }
|
||||
});
|
19
web/server/api/team/edit.js
Normal file
19
web/server/api/team/edit.js
Normal file
@@ -0,0 +1,19 @@
|
||||
import { ObjectId } from 'mongodb'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const { name, color } = await readBody(event);
|
||||
|
||||
if (!isHexColor(color)) return createError({ statusCode: 400, statusMessage: 'Team color is not a valid hex code' })
|
||||
|
||||
const user = await getAuth(event)
|
||||
|
||||
const teamsColl = db.collection('teams')
|
||||
|
||||
const team = await teamsColl.findOne({ _id: new ObjectId(user.team.id) });
|
||||
|
||||
if (team.name !== name && await teamsColl.findOne({ name: name })) return createError({ statusCode: 400, statusMessage: 'Team name already exists' })
|
||||
|
||||
await teamsColl.updateOne({ _id: new ObjectId(user.team.id) }, { $set: { name: name, color: color } })
|
||||
|
||||
return team
|
||||
});
|
10
web/server/api/team/index.js
Normal file
10
web/server/api/team/index.js
Normal file
@@ -0,0 +1,10 @@
|
||||
import { ObjectId } from 'mongodb'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const user = await getAuth(event)
|
||||
|
||||
const teamsColl = db.collection('teams')
|
||||
const team = await teamsColl.findOne({ _id: new ObjectId(user.team.id) })
|
||||
|
||||
return team
|
||||
});
|
20
web/server/api/team/invite.js
Normal file
20
web/server/api/team/invite.js
Normal file
@@ -0,0 +1,20 @@
|
||||
import { ObjectId } from 'mongodb'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const { id } = await readBody(event);
|
||||
|
||||
const user = await getAuth(event)
|
||||
|
||||
const teamsColl = db.collection('teams')
|
||||
const usersColl = db.collection('users')
|
||||
|
||||
const team = await teamsColl.findOne({ _id: new ObjectId(user.team.id) })
|
||||
|
||||
const invitedUser = await usersColl.findOne({ _id: new ObjectId(id)});
|
||||
|
||||
if (invitedUser.team) return createError({ statusCode: 400, statusMessage: 'User already is in a team' })
|
||||
|
||||
usersColl.updateOne({ _id: new ObjectId(id) }, { $push: { teamInvites: team._id.toString() } })
|
||||
|
||||
return team
|
||||
});
|
16
web/server/api/team/leave.js
Normal file
16
web/server/api/team/leave.js
Normal file
@@ -0,0 +1,16 @@
|
||||
import { ObjectId } from 'mongodb'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const user = await getAuth(event)
|
||||
|
||||
const teamsColl = db.collection('teams')
|
||||
const team = await teamsColl.findOneAndUpdate({ _id: new ObjectId(user.team.id) }, { $inc: { count: -1 }})
|
||||
|
||||
const usersColl = db.collection('users')
|
||||
await usersColl.findOneAndUpdate({ _id: new ObjectId(user._id) }, { $unset: { team: "" } })
|
||||
|
||||
if (team.value.count <= 1) {
|
||||
await teamsColl.deleteOne({ _id: new ObjectId(user.team.id )})
|
||||
}
|
||||
return team
|
||||
});
|
17
web/server/api/team/members.js
Normal file
17
web/server/api/team/members.js
Normal file
@@ -0,0 +1,17 @@
|
||||
export default defineEventHandler(async (event) => {
|
||||
const user = await getAuth(event)
|
||||
|
||||
const usersColl = db.collection('users')
|
||||
const cursor = usersColl.find({ 'team.id': user.team.id })
|
||||
|
||||
if((await usersColl.countDocuments({ 'team.id': user.team.id })) === 0) {
|
||||
return createError({ statusCode: 500, statusMessage: 'No users were found' })
|
||||
}
|
||||
|
||||
const users = [];
|
||||
for await (const doc of cursor) {
|
||||
users.push(doc)
|
||||
}
|
||||
|
||||
return users;
|
||||
});
|
14
web/server/api/team/promote.js
Normal file
14
web/server/api/team/promote.js
Normal file
@@ -0,0 +1,14 @@
|
||||
import { ObjectId } from 'mongodb'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const { userId } = await readBody(event)
|
||||
|
||||
const user = await getAuth(event)
|
||||
|
||||
if (!user.team.admin) return createError({ statusCode: 403, statusMessage: 'Forbidden' })
|
||||
|
||||
const usersColl = db.collection('users')
|
||||
await usersColl.findOneAndUpdate({ _id: new ObjectId(userId) },{ $set: { 'team.admin': true } });
|
||||
|
||||
return { status: 'Success' }
|
||||
});
|
7
web/server/api/team/unaffiliated.js
Normal file
7
web/server/api/team/unaffiliated.js
Normal file
@@ -0,0 +1,7 @@
|
||||
export default defineEventHandler(async (event) => {
|
||||
const usersColl = db.collection('users')
|
||||
const cursor = usersColl.find({ team: { $exists: false } })
|
||||
const unaffiliatedUsers = await cursor.toArray()
|
||||
|
||||
return unaffiliatedUsers
|
||||
});
|
Reference in New Issue
Block a user