bazar/app/actions/stats.ts

94 lines
1.7 KiB
TypeScript

"use server"
import { prisma } from "@/prisma/prisma-client"
export async function getStats() {
const [
totalAds,
activeAds,
totalUsers,
newUsers,
topCategories,
topCities
] = await Promise.all([
// Общее количество объявлений
prisma.adt.count(),
// Активные объявления
prisma.adt.count({
where: {
status: "PUBLISHED"
}
}),
// Общее количество пользователей
prisma.user.count(),
// Новые пользователи за последние 30 дней
prisma.user.count({
// where: {
// createdAt: {
// gte: addDays(new Date(), -30)
// }
// }
}),
// Топ категорий
prisma.category.findMany({
select: {
id: true,
nameEn: true,
_count: {
select: {
adts: true
}
}
},
orderBy: {
adts: {
_count: 'desc'
}
},
take: 5
}),
// Топ городов
prisma.city.findMany({
select: {
id: true,
nameEn: true,
_count: {
select: {
adts: true
}
}
},
orderBy: {
adts: {
_count: 'desc'
}
},
take: 5
})
])
return {
totalAds,
activeAds,
totalUsers,
newUsers,
topCategories: topCategories.map(cat => ({
id: cat.id,
name: cat.nameEn,
count: cat._count.adts
})),
topCities: topCities.map(city => ({
id: city.id,
name: city.nameEn,
count: city._count.adts
}))
}
}