Files
arthome/server/api/users/avatars/index.post.ts
2024-09-02 20:44:47 +02:00

41 lines
866 B
TypeScript

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