Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
47 lines
1.7 KiB
TypeScript
47 lines
1.7 KiB
TypeScript
import { count, eq } from 'drizzle-orm'
|
|
import { comments, uploads, users } from '../../../db/schema'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const idParam = getRouterParam(event, 'id') ?? ''
|
|
if (!/^\d+$/.test(idParam)) {
|
|
throw createError({ statusCode: 400, statusMessage: 'Ungültige Nutzer-ID' })
|
|
}
|
|
const userId = Number(idParam)
|
|
|
|
const db = useDb()
|
|
const [user] = await db
|
|
.select({ id: users.id, name: users.name, color: users.color, bio: users.bio, avatar: users.avatar, cardEffect: users.cardEffect, cardEffectColor: users.cardEffectColor, cardVignette: users.cardVignette, cardBorderEffect: users.cardBorderEffect, cardBorderEffectColor: users.cardBorderEffectColor, cardHoloEffect: users.cardHoloEffect, createdAt: users.createdAt })
|
|
.from(users)
|
|
.where(eq(users.id, userId))
|
|
.limit(1)
|
|
|
|
if (!user) {
|
|
throw createError({ statusCode: 404, statusMessage: 'Nutzer nicht gefunden' })
|
|
}
|
|
|
|
const [[uploadStats], [commentStats], roles] = await Promise.all([
|
|
db.select({ count: count() }).from(uploads).where(eq(uploads.userId, user.id)),
|
|
db.select({ count: count() }).from(comments).where(eq(comments.userId, user.id)),
|
|
getUserRoles(user.id),
|
|
])
|
|
|
|
return {
|
|
id: user.id,
|
|
name: user.name,
|
|
color: user.color,
|
|
bio: user.bio,
|
|
roles,
|
|
cardEffect: user.cardEffect,
|
|
cardEffectColor: user.cardEffectColor, cardVignette: user.cardVignette,
|
|
cardBorderEffect: user.cardBorderEffect,
|
|
cardBorderEffectColor: user.cardBorderEffectColor,
|
|
cardHoloEffect: user.cardHoloEffect,
|
|
avatarUrl: avatarUrl(user.avatar),
|
|
createdAt: user.createdAt,
|
|
stats: {
|
|
uploads: uploadStats?.count ?? 0,
|
|
comments: commentStats?.count ?? 0,
|
|
},
|
|
}
|
|
})
|