Compare commits
4 Commits
89027590ca
...
9510e8a407
Author | SHA1 | Date | |
---|---|---|---|
9510e8a407 | |||
e68097d813 | |||
3c5e20e18e | |||
e28d2278cb |
@@ -4,7 +4,7 @@ export default defineNuxtRouteMiddleware(async (to) => {
|
||||
}
|
||||
|
||||
try {
|
||||
const user = await $fetch('/api/users/@me')
|
||||
const user = await $fetch('/api/users/@me') as IUser
|
||||
|
||||
if (!user._id) {
|
||||
throw createError({ statusCode: 500, statusMessage: 'No user was found' })
|
||||
|
12
webv2/server/api/teams/index.post.ts
Normal file
12
webv2/server/api/teams/index.post.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
export default defineEventHandler(async (event) => {
|
||||
const { name, color } = await readBody(event)
|
||||
|
||||
const team = new TeamModel({
|
||||
name,
|
||||
color
|
||||
})
|
||||
|
||||
await team.save()
|
||||
|
||||
return team
|
||||
})
|
@@ -1,5 +1,8 @@
|
||||
export default defineEventHandler(async (event) => {
|
||||
const userId: string = event.context.params ? event.context.params.id : '@me'
|
||||
|
||||
return await getUser(userId, event)
|
||||
const user = await getUser(userId, event)
|
||||
await applyUsername(user)
|
||||
|
||||
return user
|
||||
})
|
||||
|
@@ -11,7 +11,7 @@ export default defineEventHandler(async (event) => {
|
||||
await WhitelistModel.deleteOne({ uuid: user.minecraft.uuid })
|
||||
user.minecraft = undefined
|
||||
|
||||
await user.save()
|
||||
await applyUsername(user)
|
||||
} catch (e) {
|
||||
console.error('Failed to update documents', e)
|
||||
|
||||
|
@@ -12,7 +12,7 @@ export default defineEventHandler(async (event) => {
|
||||
try {
|
||||
user.minecraft = { uuid: user.minecraft.uuid, username: minecraftProfile.name }
|
||||
|
||||
await user.save()
|
||||
await applyUsername(user)
|
||||
} catch (e) {
|
||||
console.error('Failed to update document', e)
|
||||
|
||||
|
@@ -28,7 +28,7 @@ export default defineEventHandler(async (event) => {
|
||||
user.minecraft = { uuid: whitelistDoc.uuid, username: minecraftProfile.name }
|
||||
|
||||
await whitelistDoc.save()
|
||||
await user.save()
|
||||
await applyUsername(user)
|
||||
} catch (e) {
|
||||
console.error('Failed to update documents', e)
|
||||
|
||||
|
16
webv2/server/api/users/[id]/username.put.ts
Normal file
16
webv2/server/api/users/[id]/username.put.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
export default defineEventHandler(async (event) => {
|
||||
const { usernameType } = await readBody(event)
|
||||
const userId: string = event.context.params ? event.context.params.id : '@me'
|
||||
|
||||
if (usernameType !== 'discord' && usernameType !== 'minecraft') {
|
||||
throw createError({ statusCode: 400, statusMessage: 'UsernameType must be discord or minecraft' })
|
||||
}
|
||||
|
||||
const user = await getUser(userId, event)
|
||||
|
||||
user.usernameType = usernameType
|
||||
|
||||
await applyUsername(user)
|
||||
|
||||
return user.username
|
||||
})
|
@@ -1,7 +1,7 @@
|
||||
import { Schema, Types, model } from 'mongoose'
|
||||
|
||||
const userSchema = new Schema({
|
||||
username: { type: String, required: true },
|
||||
username: { type: String, required: false },
|
||||
usernameType: { type: String, required: true, default: 'discord' },
|
||||
discord: {
|
||||
id: { type: String, required: true, unique: true },
|
||||
@@ -27,5 +27,14 @@ const whitelistSchema = new Schema({
|
||||
code: { type: String, required: true, unique: true, length: 6 }
|
||||
})
|
||||
|
||||
const teamSchema = new Schema({
|
||||
name: { type: String, required: true, minLength: 3, maxLength: 16, unique: true, match: /^[a-zA-Z0-9]+$/ },
|
||||
color: { type: String, required: true, match: /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/ },
|
||||
amount: { type: Number, required: true, default: 1 },
|
||||
textChannelId: { type: String, required: false },
|
||||
voiceChannelId: { type: String, required: false }
|
||||
})
|
||||
|
||||
export const UserModel = model<IUser>('User', userSchema)
|
||||
export const WhitelistModel = model<IWhitelist>('Whitelist', whitelistSchema)
|
||||
export const TeamModel = model<ITeam>('Team', teamSchema)
|
||||
|
@@ -46,3 +46,15 @@ export const getUser = async (userId: string, event: any) => {
|
||||
throw createError({ statusCode: 500, statusMessage: 'Failed to get user' })
|
||||
}
|
||||
}
|
||||
|
||||
export const applyUsername = async (user: IUser) => {
|
||||
if (user.usernameType === 'discord' || user.$isEmpty('minecraft') || !user.minecraft) {
|
||||
user.username = user.discord.username
|
||||
|
||||
await user.save()
|
||||
} else {
|
||||
user.username = user.minecraft.username
|
||||
|
||||
await user.save()
|
||||
}
|
||||
}
|
||||
|
14
webv2/types/global.d.ts
vendored
14
webv2/types/global.d.ts
vendored
@@ -1,9 +1,12 @@
|
||||
import { Document } from 'mongoose'
|
||||
|
||||
export {}
|
||||
|
||||
declare global {
|
||||
interface IUser {
|
||||
interface IUser extends Document {
|
||||
_id: string,
|
||||
username: string,
|
||||
usernameType: string,
|
||||
discord: {
|
||||
id: string,
|
||||
username: string,
|
||||
@@ -28,4 +31,13 @@ declare global {
|
||||
connected: boolean,
|
||||
code: string
|
||||
}
|
||||
|
||||
interface ITeam {
|
||||
_id: string,
|
||||
name: string,
|
||||
color: string,
|
||||
amount: number,
|
||||
textChannelId: string,
|
||||
voiceChannelId: string
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user