Files
dukang/server/dukang-api/src/modules/ops/admin-store-ratings.service.ts
T
jacy 5935024ea8
CI / verify (pull_request) Has been cancelled
v3.5.8和v3.5.9版本更新
2026-08-25 09:20:32 +08:00

70 lines
2.2 KiB
TypeScript

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';
import { HqPermissionsResolver, mergeHqStoreCityWhere } from '../../common/guards/hq-permission.guard';
@Injectable()
export class AdminStoreRatingsService {
constructor(
private readonly prisma: PrismaService,
private readonly hqPermissions: HqPermissionsResolver,
) {}
async list(query: AdminStoreRatingsQueryDto, actorId: bigint) {
const page = query.page ?? 1;
const pageSize = query.pageSize ?? 20;
const scope = await this.hqPermissions.resolveCityScope(actorId);
if (query.storeId) {
await this.hqPermissions.assertStoreIdInScope(actorId, BigInt(query.storeId));
}
const storeWhere = mergeHqStoreCityWhere({}, scope, query.cityId);
const where: Prisma.StoreRatingWhereInput = {
store: storeWhere,
};
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,
});
}
}