NestJS-字典类型模块
1、字典模块
接下来我们新建一个字典模块,实现对于字典部分的管理功能接口
👉生成字典文件
javascript
nest g controller modules/dicttype --no-spec
nest g module modules/dicttype --no-spec
nest g service modules/dicttype --no-spec
创建完成以后的目录如下图所示
javascript
src\modules\dict
src\modules\dicttype\dicttype.controller.ts
src\modules\dicttype\dicttype.module.ts
src\modules\dicttype\dicttype.service.ts
//手动添加实体
src\modules\dicttype\dicttype.entity.ts
👉<font style="color:rgb(36, 41, 47);background-color:rgb(244, 246, 248);">dict.entity.ts</font>
实体搭建
javascript
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity('sys_dict_type')
export class DictType {
@PrimaryGeneratedColumn({ name: 'dict_id', type: 'bigint' })
dictId: number;
@Column({ name: 'dict_name', length: 100, nullable: true, default: '', comment: '字典名称' })
dictName: string;
@Column({ name: 'dict_type', length: 100, nullable: true, default: '', comment: '字典类型' })
dictType: string;
@Column({
name: 'status',
type: 'char',
length: 1,
nullable: true,
default: '0',
comment: '状态(0正常 1停用)',
})
status: string;
@Column({
name: 'create_by',
length: 64,
default: '',
nullable: true,
comment: '创建者',
})
createBy: string;
@Column({
name: 'create_time',
type: 'datetime',
nullable: true,
comment: '创建时间',
})
createTime: Date;
@Column({
name: 'update_by',
length: 64,
default: '',
nullable: true,
comment: '更新者',
})
updateBy: string;
@Column({
name: 'update_time',
type: 'datetime',
nullable: true,
comment: '更新时间',
})
updateTime: Date;
@Column({
name: 'remark',
length: 500,
nullable: true,
comment: '备注',
})
remark: string;
}
👉实体映射
在我们的src\common\entity\index.ts
文件之中导入实体并进行映射
javascript
import { DictType } from '@/modules/dicttype/dicttype.entity'; // 字典类型实体
export const typeOrmConfig: TypeOrmModuleOptions = {
type: 'mysql', // 可以选择其他数据库,如 MySQL
host: 'localhost',
port: 3306,
username: 'root',
password: 'XXXXX',
database: 'nexusnest',
entities: [DictType],
synchronize: true, // 自动同步实体到数据库(开发时可以启用,生产环境应谨慎使用)
logging: false, // 启用日志记录
timezone: '+08:00', // 设置时区
};
这个时候刷新我们数据库可以发现,数据库的表已经对应上我们对应的实体了
👉 dict.module.ts
在字典模块之中导入其他的模块部分
javascript
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { DicttypeService } from './dicttype.service';
import { DicttypeController } from './dicttype.controller';
import { DictType } from './dicttype.entity';
@Module({
// 导入实体
imports: [
TypeOrmModule.forFeature([DictType]),
],
providers: [DicttypeService],
controllers: [DicttypeController],
exports: [DicttypeService],
})
export class DicttypeModule {}
2、搜索
接下来我们就根据对应的实体帮助我们生成一下我们的字典功能部分的api接口
实现字典功能其实跟我们其他管理的部分差不多
字典功能主要是我们在pc端用户进行登陆以后可以对于字典字典权限进行控制,然后可以通过字典对用户进行权限的统一管理
👉dict.controller.ts 控制器
javascript
// 列表
@Get('/system/dicttype')
@ApiOperation({ summary: '列表带分页' }) // 操作描述
@ApiQuery({ name: 'pageNum', required: false, description: 'Page number', example: 1 }) // pageNum参数
@ApiQuery({ name: 'pageSize', required: false, description: 'Number of items per page', example: 10 }) // pageSize参数
// 获取列表所有
async getAll(
@Query('isDeleted') isDeleted: boolean,
@Query('pageNum') pageNum = 1, // 默认第1页
@Query('pageSize') pageSize= 10, // 默认每页10条
) {
// const queryParams: QueryParams = { name, phone, age, sex };
const queryParams = { isDeleted: false};
console.log(queryParams, 'queryParams--查询');
const ResponseData = await this.dicttypeService.getAll(pageNum, pageSize, queryParams);
return ResponseData;
}
👉dict.service.ts 服务层
javascript
// 通用查询
async getAll(pageNum: number, pageSize: number, queryParams: any): Promise<ResponseDto<DictType[]>> {
console.log(queryParams, 'queryParams');
// 新版本完善-通用分页查询
const where = await getListApi(this.DictRepository, pageNum, pageSize, queryParams);
return where;
}
查询一下,接口ok
👉getListAllApi通用方法
getListAllApi接口是通用的
javascript
// 通用查询所有
export const getListAllApi = async (Repository,queryParams: any) => {
const where = await buildQueryParams(queryParams);
const [data, total] = await Repository.findAndCount(
{
where,
}
);
if (data) {
return {
message: '查询成功!',
code: 200,
data: data, // 返回查询到的用户数据
total: total,
};
} else {
return {
message: '查询失败!',
code: 500,
data: [], // 返回查询到的用户数据
total: 0,
}
}
}
3、增加
👉dict.controller.ts 控制器
javascript
// 新增
@ApiOperation({ summary: '新增' }) // 操作描述
@Post('/system/dicttype')
async create(@Body() addFormData) {
console.log(addFormData, 'addFormData--添加参数');
return this.dicttypeService.addOne(addFormData);
}
👉dict.service.ts 服务层
javascript
async addOne(addFormData) {
const resdata = await addApi(this.DictRepository, addFormData);
return resdata;
}
尝试一下我们的新增接口
增加功能ok,并且能正确返回我们想要的东西
4、详情
详情,通过id然后查到对应的内容
👉dict.controller.ts 控制器
javascript
// 查询单个
@Get('/system/dicttype/:id')
@ApiOperation({ summary: '查询单个' }) // 操作描述
async getOne(@Param('id') id: string) {
return this.dicttypeService.getOne(id);
}
👉dict.service.ts 服务层
javascript
// 通用详情
async getOne(id) {
const resdata = await getOneApi(this.DictRepository, { dictId: id });
return resdata;
}
简单测试一下,详情接口没问题,我们采用的也是通过ID的方式进行获取的
5、修改
接下来我们完善一下我们的修改接口:
👉dict.controller.ts 控制器
javascript
// 更新
@Put('/system/dicttype')
@ApiOperation({ summary: '更新' }) // 操作描述
async updateOne(@Body() updateFormData) {
console.log(updateFormData, 'updateFormData');
// console.log(updateFormData, 'updateFormData');
return this.dicttypeService.updateOne(updateFormData.dicttypeId, updateFormData);
}
👉dict.service.ts 服务层
javascript
// 通用更新
async updateOne(id, updateFormData) {
const resdata = await updateOneApi(this.DictRepository, updateFormData, { dictId: id });
return resdata;
}
简单测试一下,修改接口没问题
5、删除
👉dict.controller.ts 控制器
javascript
// 删除
@Delete('/system/dicttype/:id')
@ApiOperation({ summary: '删除' }) // 操作描述
async deleteOne(@Param('id') id: number) {
return this.dicttypeService.deleteOne(id);
}
👉dict.service.ts 服务层
javascript
async deleteOne(id) {
// const resdata = await deleteOneApi(this.DictRepository,{dictId:id});
const resdata = await delOneApiPermanent(this.DictRepository, { dictId: id });
return resdata;
}
测试可以发现,我们的删除功能已经好了!
6、查询所有字典类型
这里我们需要增加一个查询所有的字典类型,用来给我们字典下拉选择的时候使用
👉dict.controller.ts 控制器
javascript
// dicttype.controller.ts
// 下拉选择列表
@Get('/optionselect')
@ApiOperation({ summary: '获取列表不带分页' }) // 操作描述
// 获取列表所有
async getListAll(
@Query('isDeleted') isDeleted: boolean
) {
const queryParams = { isDeleted: false };
const ResponseData = await this.dicttypeService.getListAll(queryParams);
return ResponseData;
}
👉dict.service.ts 服务层
javascript
// 查询所有的
async getListAll(queryParams: any) {
// 通用分页查询
console.log(queryParams,'queryParams');
const where = await getListAllApi(this.DictRepository,queryParams);
return where;
}
测试一下,ok 数据全部给我们返回来了