This commit is contained in:
2024-09-02 16:58:23 +02:00
parent c77503ed45
commit 1b0dc0f27d
52 changed files with 817 additions and 1379 deletions

View File

@@ -0,0 +1,19 @@
export default defineEventHandler(async (event) => {
const { username } = await getRouterParams(event)
const user = await useDrizzle()
.query
.users
.findFirst({
where: eq(tables.users.username, username.toLowerCase()),
with: {
categories: {
with: {
tabs: true,
},
},
},
})
return user || {
message: 'User not found',
}
})

View File

@@ -0,0 +1,24 @@
export default defineEventHandler(async (event) => {
const { user, session } = await requireUserSession(event)
if (!user.avatar) {
return sendNoContent(event, 204)
}
await deleteProfilePicture(user.avatar)
const updatedUser = {
...user,
avatar: null,
}
await updateUser(user.id, { avatar: updatedUser.avatar })
await replaceUserSession(event, {
id: user.id,
user: updatedUser,
})
return {
statusCode: 204,
message: 'Avatar deleted',
}
})

View File

@@ -0,0 +1,40 @@
import { randomUUID } from 'uncrypto'
export default defineEventHandler(async (event) => {
const { user } = await requireUserSession(event)
const form = await readFormData(event)
const file = form.get('file') as File
if (!file || !file.size) {
throw createError({ statusCode: 400, message: 'No file provided' })
}
ensureBlob(file, {
maxSize: '1MB',
types: ['image'],
})
if (user.avatar) {
await deleteProfilePicture(user.avatar)
}
const filename = randomUUID()
const avatar = await hubBlob().put(filename, file, {
addRandomSuffix: false,
prefix: 'avatars/',
})
const updatedUser = {
...user,
avatar: avatar.pathname,
}
await updateUser(user.id, { avatar: updatedUser.avatar })
await replaceUserSession(event, {
id: user.id,
user: updatedUser,
})
return sendNoContent(event, 204)
})

View File

@@ -0,0 +1,13 @@
export default defineEventHandler(async (event) => {
const user = await requireUserSession(event)
return useDrizzle().query.users.findFirst({
where: eq(tables.users.id, user.id),
with: {
categories: {
with: {
tabs: true,
},
},
},
})
})

View File

@@ -0,0 +1,17 @@
import { useValidatedBody } from 'h3-zod'
import { UpdateUserSchema } from '~~/types/types'
export default defineEventHandler(async (event) => {
const { user } = await requireUserSession(event)
const body = await useValidatedBody(event, UpdateUserSchema)
const updatedUser = {
...user,
...body,
}
await updateUser(user.id, updatedUser)
await replaceUserSession(event, updatedUser)
return sendNoContent(event, 204)
})