import { Injectable } from '@nestjs/common'; import { Prisma } from '@prisma/client'; import { PrismaService } from '../../common/prisma/prisma.module'; import { serializeBigInt } from '../../common/decorators/current-user.decorator'; import type { AdminStoreRatingsQueryDto } from './dto/admin-query.dto'; @Injectable() export class AdminStoreRatingsService { constructor(private readonly prisma: PrismaService) {} async list(query: AdminStoreRatingsQueryDto) { const page = query.page ?? 1; const pageSize = query.pageSize ?? 20; const where: Prisma.StoreRatingWhereInput = {}; if (query.storeId) where.storeId = BigInt(query.storeId); if (query.redeemNo) { where.redeemRecord = { redeemNo: { contains: query.redeemNo } }; } const [items, total] = await Promise.all([ this.prisma.storeRating.findMany({ where, orderBy: { createdAt: 'desc' }, skip: (page - 1) * pageSize, take: pageSize, include: { store: { select: { id: true, name: true, cityName: true } }, redeemRecord: { select: { id: true, redeemNo: true, amount: true, user: { select: { id: true, userNo: true, phone: true, nickname: true } }, }, }, }, }), this.prisma.storeRating.count({ where }), ]); return serializeBigInt({ items: items.map((r) => ({ id: r.id, serviceScore: r.serviceScore, envScore: r.envScore, createdAt: r.createdAt, store: r.store, redeemRecordId: r.redeemRecordId, redeemNo: r.redeemRecord.redeemNo, redeemAmount: Number(r.redeemRecord.amount), user: r.redeemRecord.user, })), total, page, pageSize, }); } }