37 lines
1.0 KiB
TypeScript
37 lines
1.0 KiB
TypeScript
import { Controller, Get, UseGuards } from '@nestjs/common'
|
|
import { JwtAuthGuard } from '../auth/jwt-auth.guard'
|
|
import { Roles } from '../auth/roles.decorator'
|
|
import { RolesGuard } from '../auth/roles.guard'
|
|
import { UserRole } from '@mp-pilates/shared'
|
|
import { PrismaService } from '../prisma/prisma.service'
|
|
|
|
interface AdminStats {
|
|
todayBookings: number
|
|
totalOrders: number
|
|
totalBookings: number
|
|
}
|
|
|
|
@Controller('admin')
|
|
@UseGuards(JwtAuthGuard, RolesGuard)
|
|
@Roles(UserRole.ADMIN)
|
|
export class AdminController {
|
|
constructor(private readonly prisma: PrismaService) {}
|
|
|
|
@Get('stats')
|
|
async getStats(): Promise<AdminStats> {
|
|
const today = new Date()
|
|
today.setUTCHours(0, 0, 0, 0)
|
|
|
|
const [todayBookings, totalOrders, totalBookings] = await Promise.all([
|
|
this.prisma.booking.count({
|
|
where: {
|
|
timeSlot: { date: today },
|
|
},
|
|
}),
|
|
this.prisma.order.count(),
|
|
this.prisma.booking.count(),
|
|
])
|
|
|
|
return { todayBookings, totalOrders, totalBookings }
|
|
}
|
|
} |