Files
BRETT/server/api/users/[id]/summary.get.ts
T
FliesentischKingandDevin 76f07f64d8 Add user bio and role badges to hover cards and profile pages
Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-19 22:25:30 +02:00

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