113 lines
2.3 KiB
TypeScript
113 lines
2.3 KiB
TypeScript
import { Injectable, NotFoundException } from '@nestjs/common';
|
|
import { PrismaService } from '../prisma/prisma.service';
|
|
import { CreateDictDto } from './dto/create-dict.dto';
|
|
import { UpdateDictDto } from './dto/update-dict.dto';
|
|
|
|
@Injectable()
|
|
export class DictService {
|
|
constructor(private prisma: PrismaService) {}
|
|
|
|
async create(createDictDto: CreateDictDto, tenantId: number) {
|
|
return this.prisma.dict.create({
|
|
data: {
|
|
...createDictDto,
|
|
tenantId,
|
|
},
|
|
});
|
|
}
|
|
|
|
async findAll(page: number = 1, pageSize: number = 10, tenantId?: number) {
|
|
const skip = (page - 1) * pageSize;
|
|
const where = tenantId ? { tenantId } : {};
|
|
|
|
const [list, total] = await Promise.all([
|
|
this.prisma.dict.findMany({
|
|
where,
|
|
skip,
|
|
take: pageSize,
|
|
include: {
|
|
items: {
|
|
orderBy: {
|
|
sort: 'asc',
|
|
},
|
|
},
|
|
},
|
|
}),
|
|
this.prisma.dict.count({ where }),
|
|
]);
|
|
|
|
return {
|
|
list,
|
|
total,
|
|
page,
|
|
pageSize,
|
|
};
|
|
}
|
|
|
|
async findOne(id: number, tenantId?: number) {
|
|
const where: any = { id };
|
|
if (tenantId) {
|
|
where.tenantId = tenantId;
|
|
}
|
|
|
|
const dict = await this.prisma.dict.findFirst({
|
|
where,
|
|
include: {
|
|
items: {
|
|
orderBy: {
|
|
sort: 'asc',
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
if (!dict) {
|
|
throw new NotFoundException('字典不存在');
|
|
}
|
|
|
|
return dict;
|
|
}
|
|
|
|
async findByCode(code: string, tenantId?: number) {
|
|
if (!tenantId) {
|
|
throw new NotFoundException('无法确定租户信息');
|
|
}
|
|
|
|
return this.prisma.dict.findFirst({
|
|
where: {
|
|
code,
|
|
tenantId,
|
|
},
|
|
include: {
|
|
items: {
|
|
where: {
|
|
validState: 1,
|
|
},
|
|
orderBy: {
|
|
sort: 'asc',
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}
|
|
|
|
async update(id: number, updateDictDto: UpdateDictDto, tenantId?: number) {
|
|
// 验证字典是否存在且属于该租户
|
|
await this.findOne(id, tenantId);
|
|
|
|
return this.prisma.dict.update({
|
|
where: { id },
|
|
data: updateDictDto,
|
|
});
|
|
}
|
|
|
|
async remove(id: number, tenantId?: number) {
|
|
// 验证字典是否存在且属于该租户
|
|
await this.findOne(id, tenantId);
|
|
|
|
return this.prisma.dict.delete({
|
|
where: { id },
|
|
});
|
|
}
|
|
}
|