Compare commits
4 Commits
89027590ca
...
9510e8a407
Author | SHA1 | Date | |
---|---|---|---|
9510e8a407 | |||
e68097d813 | |||
3c5e20e18e | |||
e28d2278cb |
@@ -4,7 +4,7 @@ export default defineNuxtRouteMiddleware(async (to) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const user = await $fetch('/api/users/@me')
|
const user = await $fetch('/api/users/@me') as IUser
|
||||||
|
|
||||||
if (!user._id) {
|
if (!user._id) {
|
||||||
throw createError({ statusCode: 500, statusMessage: 'No user was found' })
|
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) => {
|
export default defineEventHandler(async (event) => {
|
||||||
const userId: string = event.context.params ? event.context.params.id : '@me'
|
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 })
|
await WhitelistModel.deleteOne({ uuid: user.minecraft.uuid })
|
||||||
user.minecraft = undefined
|
user.minecraft = undefined
|
||||||
|
|
||||||
await user.save()
|
await applyUsername(user)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('Failed to update documents', e)
|
console.error('Failed to update documents', e)
|
||||||
|
|
||||||
|
@@ -12,7 +12,7 @@ export default defineEventHandler(async (event) => {
|
|||||||
try {
|
try {
|
||||||
user.minecraft = { uuid: user.minecraft.uuid, username: minecraftProfile.name }
|
user.minecraft = { uuid: user.minecraft.uuid, username: minecraftProfile.name }
|
||||||
|
|
||||||
await user.save()
|
await applyUsername(user)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('Failed to update document', 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 }
|
user.minecraft = { uuid: whitelistDoc.uuid, username: minecraftProfile.name }
|
||||||
|
|
||||||
await whitelistDoc.save()
|
await whitelistDoc.save()
|
||||||
await user.save()
|
await applyUsername(user)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('Failed to update documents', 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'
|
import { Schema, Types, model } from 'mongoose'
|
||||||
|
|
||||||
const userSchema = new Schema({
|
const userSchema = new Schema({
|
||||||
username: { type: String, required: true },
|
username: { type: String, required: false },
|
||||||
usernameType: { type: String, required: true, default: 'discord' },
|
usernameType: { type: String, required: true, default: 'discord' },
|
||||||
discord: {
|
discord: {
|
||||||
id: { type: String, required: true, unique: true },
|
id: { type: String, required: true, unique: true },
|
||||||
@@ -27,5 +27,14 @@ const whitelistSchema = new Schema({
|
|||||||
code: { type: String, required: true, unique: true, length: 6 }
|
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 UserModel = model<IUser>('User', userSchema)
|
||||||
export const WhitelistModel = model<IWhitelist>('Whitelist', whitelistSchema)
|
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' })
|
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 {}
|
export {}
|
||||||
|
|
||||||
declare global {
|
declare global {
|
||||||
interface IUser {
|
interface IUser extends Document {
|
||||||
_id: string,
|
_id: string,
|
||||||
username: string,
|
username: string,
|
||||||
|
usernameType: string,
|
||||||
discord: {
|
discord: {
|
||||||
id: string,
|
id: string,
|
||||||
username: string,
|
username: string,
|
||||||
@@ -28,4 +31,13 @@ declare global {
|
|||||||
connected: boolean,
|
connected: boolean,
|
||||||
code: string
|
code: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface ITeam {
|
||||||
|
_id: string,
|
||||||
|
name: string,
|
||||||
|
color: string,
|
||||||
|
amount: number,
|
||||||
|
textChannelId: string,
|
||||||
|
voiceChannelId: string
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user