feat: stabilize admin dashboard, refactor group management, implement PWA, and fix routing

This commit is contained in:
2026-05-03 19:51:18 +05:00
parent 622ca04170
commit 0598e07823
36 changed files with 1387 additions and 467 deletions
+31 -12
View File
@@ -1,28 +1,47 @@
import { requireAuth } from '~/server/utils/auth'
import { users, canvases, pushSubscriptions } from '~/server/utils/db'
import { prisma } from '~/server/utils/prisma'
export default defineEventHandler(async (event) => {
const user = requireAuth(event)
console.log(`[Admin API] Request from user: ${user.email}, Role: ${user.role}`)
if (user.role !== 'admin') {
throw createError({ statusCode: 403, message: 'Admin access required' })
}
const usersList = Array.from(users.values())
const canvasesList = Array.from(canvases.values()).map(c => ({
id: c.id,
name: c.name,
nodeCount: c.nodes.length,
updatedAt: c.updatedAt
}))
// 1. Получаем список всех пользователей с их профилями
const usersList = await prisma.user.findMany({
include: { profile: true }
})
// 2. Получаем список всех канвасов
const canvasesList = await prisma.canvas.findMany({
select: {
id: true,
name: true,
nodes: true,
updatedAt: true,
ownerId: true
}
})
// 3. Считаем общее кол-во пушей (если есть таблица)
let pushCount = 0
try {
pushCount = await prisma.pushSubscription.count()
} catch (e) {}
return {
users: usersList,
canvases: canvasesList,
canvases: canvasesList.map(c => ({
...c,
nodeCount: (c.nodes as any[])?.length || 0
})),
stats: {
users: usersList.length,
canvases: canvasesList.length,
nodes: canvasesList.reduce((sum, c) => sum + c.nodeCount, 0),
pushes: pushSubscriptions.size
nodes: canvasesList.reduce((sum, c) => sum + ((c.nodes as any[])?.length || 0), 0),
pushes: pushCount
}
}
})
})