/** * # 事件查询控制器 */ import { Controller, Get, Query } from "@nestjs/common"; import { z } from "zod"; import { ZodValidationPipe } from "../../common/pipes/zod-validation.pipe"; import { CurrentWorkspace } from "../../common/decorators"; import { PrismaService } from "../../prisma/prisma.service"; import type { RequestWorkspace } from "../../common/decorators"; const ListQuerySchema = z.object({ page: z.coerce.number().int().min(1).default(1), pageSize: z.coerce.number().int().min(1).max(100).default(20), eventType: z.string().optional(), }); @Controller("events") export class EventController { constructor(private readonly prisma: PrismaService) {} /** # 分页查询当前工作区领域事件 */ @Get() async list( @CurrentWorkspace() workspace: RequestWorkspace, @Query(new ZodValidationPipe(ListQuerySchema)) query: z.infer, ) { const where = { workspaceId: workspace.id, ...(query.eventType ? { eventType: query.eventType } : {}), }; const [total, items] = await this.prisma.$transaction([ this.prisma.eventRecord.count({ where }), this.prisma.eventRecord.findMany({ where, orderBy: { createdAt: "desc" }, skip: (query.page - 1) * query.pageSize, take: query.pageSize, }), ]); return { items, total, page: query.page, pageSize: query.pageSize }; } }