Files
BRETT/server/api/users/index.get.ts
T
2026-10-03 20:07:49 +02:00

45 lines
1.4 KiB
TypeScript

import { asc, count } from 'drizzle-orm'
import { comments, uploads, users } from '../../db/schema'
export default defineEventHandler(async () => {
const db = useDb()
const rows = await db
.select({
id: users.id,
name: users.name,
color: users.color,
avatar: users.avatar,
cardEffect: users.cardEffect,
cardEffectColor: users.cardEffectColor, cardVignette: users.cardVignette,
cardBorderEffect: users.cardBorderEffect,
cardBorderEffectColor: users.cardBorderEffectColor,
createdAt: users.createdAt,
})
.from(users)
.orderBy(asc(users.id))
const [uploadStats, commentStats] = await Promise.all([
db.select({ userId: uploads.userId, count: count() }).from(uploads).groupBy(uploads.userId),
db.select({ userId: comments.userId, count: count() }).from(comments).groupBy(comments.userId),
])
const uploadCount = new Map(uploadStats.map(s => [s.userId, s.count]))
const commentCount = new Map(commentStats.map(s => [s.userId, s.count]))
return rows.map(u => ({
id: u.id,
name: u.name,
color: u.color,
avatarUrl: avatarUrl(u.avatar),
cardEffect: u.cardEffect,
cardEffectColor: u.cardEffectColor, cardVignette: u.cardVignette,
cardBorderEffect: u.cardBorderEffect,
cardBorderEffectColor: u.cardBorderEffectColor,
createdAt: u.createdAt,
stats: {
uploads: uploadCount.get(u.id) ?? 0,
comments: commentCount.get(u.id) ?? 0,
},
}))
})