Compare commits

...

4 Commits

Author SHA1 Message Date
9510e8a407 feat: Added team creation, closes #22
All checks were successful
Build and Deploy / Deploy Web (push) Successful in 1m1s
Build and Deploy / Deploy Discord Bot (push) Successful in 42s
2023-06-06 14:29:05 +02:00
e68097d813 feat: Added username configuration, closes #19 2023-06-06 14:01:19 +02:00
3c5e20e18e fix: Fixed type 2023-06-06 13:50:10 +02:00
e28d2278cb feat: Added applyUsername function 2023-06-06 13:49:27 +02:00
10 changed files with 71 additions and 7 deletions

View File

@@ -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' })

View 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
})

View File

@@ -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
})

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View 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
})

View File

@@ -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)

View File

@@ -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()
}
}

View File

@@ -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
}
}