feat: complete cmpp platform phases 0-5

This commit is contained in:
hectorzhao
2026-07-01 13:22:04 +08:00
parent 824a8b334f
commit ee926fea04
86 changed files with 10490 additions and 14 deletions
@@ -0,0 +1,111 @@
import { Injectable } from '@nestjs/common';
import { Prisma } from '@prisma/client';
import { PrismaService } from '../prisma/prisma.service';
export interface CreatePhoneSegmentDto {
prefix: string;
carrier: string;
province?: string;
city?: string;
}
export interface CreateSensitiveWordDto {
word: string;
level?: string;
status?: string;
}
export interface CreateBlacklistDto {
tenantId?: string;
phoneNumber: string;
reason?: string;
status?: string;
}
export interface CreateDrainageFieldDto {
code: string;
name: string;
fieldType: string;
required?: boolean;
status?: string;
description?: string;
}
@Injectable()
export class DictionariesService {
constructor(private readonly prisma: PrismaService) {}
listPhoneSegments() {
return this.prisma.phoneSegment.findMany({ orderBy: { prefix: 'asc' }, take: 200 });
}
createPhoneSegment(data: CreatePhoneSegmentDto) {
return this.prisma.phoneSegment.create({ data });
}
listSensitiveWords() {
return this.prisma.sensitiveWord.findMany({ orderBy: { createdAt: 'desc' }, take: 200 });
}
createSensitiveWord(data: CreateSensitiveWordDto) {
return this.prisma.sensitiveWord.create({
data: {
word: data.word,
level: data.level ?? 'block',
status: data.status ?? 'active',
},
});
}
listGlobalBlacklist() {
return this.prisma.globalBlacklist.findMany({ orderBy: { createdAt: 'desc' }, take: 200 });
}
createGlobalBlacklist(data: CreateBlacklistDto) {
return this.prisma.globalBlacklist.create({
data: {
phoneNumber: data.phoneNumber,
reason: data.reason,
status: data.status ?? 'active',
},
});
}
listEnterpriseBlacklist(tenantId?: string) {
return this.prisma.enterpriseBlacklist.findMany({
where: tenantId ? { tenantId } : undefined,
orderBy: { createdAt: 'desc' },
take: 200,
});
}
createEnterpriseBlacklist(data: CreateBlacklistDto) {
if (!data.tenantId) {
throw new Error('tenantId is required for enterprise blacklist');
}
const createData: Prisma.EnterpriseBlacklistUncheckedCreateInput = {
tenantId: data.tenantId,
phoneNumber: data.phoneNumber,
reason: data.reason,
status: data.status ?? 'active',
};
return this.prisma.enterpriseBlacklist.create({ data: createData });
}
listDrainageFields() {
return this.prisma.drainageField.findMany({ orderBy: { createdAt: 'desc' }, take: 200 });
}
createDrainageField(data: CreateDrainageFieldDto) {
return this.prisma.drainageField.create({
data: {
code: data.code,
name: data.name,
fieldType: data.fieldType,
required: data.required ?? false,
status: data.status ?? 'active',
description: data.description,
},
});
}
}