NestJS-字典数据模块

NestJS-字典数据模块

1、字典数据模块

接下来我们新建一个字典数据模块,实现对于字典数据部分的管理功能接口

👉生成字典数据文件

javascript 复制代码
nest g controller modules/dictdata --no-spec
nest g module modules/dictdata --no-spec
nest g service modules/dictdata --no-spec

创建完成以后的目录如下图所示

javascript 复制代码
src\modules\dict
  src\modules\dictdata\dictdata.controller.ts
  src\modules\dictdata\dictdata.module.ts
  src\modules\dictdata\dictdata.service.ts

//手动添加实体
  src\modules\dictdata\dictdata.entity.ts

👉dict.entity.ts实体搭建

javascript 复制代码
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';

@Entity('sys_dict_data')
export class DictData {
  @PrimaryGeneratedColumn({ name: 'dict_code', type: 'bigint' })
  dictCode: number;

  @Column({ name: 'dict_sort', type: 'int', default: 0, nullable: true })
  dictSort: number;

  @Column({ name: 'dict_label', length: 100, nullable: true, default: '' })
  dictLabel: string;

  @Column({ name: 'dict_value', length: 100, nullable: true, default: '' })
  dictValue: string;

  @Column({ name: 'dict_type', length: 100, nullable: true, default: '' })
  dictType: string;

  @Column({ name: 'css_class', length: 100, nullable: true })
  cssClass: string;

  @Column({ name: 'list_class', length: 100, nullable: true })
  listClass: string;

  @Column({
    name: 'is_default',
    type: 'char',
    length: 1,
    default: 'N',
    nullable: true,
    comment: '是否默认(Y是 N否)'
  })
  isDefault: string;

  @Column({
    name: 'status',
    type: 'char',
    length: 1,
    default: '0',
    nullable: true,
    comment: '状态(0正常 1停用)'
  })
  status: string;

  @Column({ name: 'create_by', length: 64, nullable: true, default: '' })
  createBy: string;

  @Column({ name: 'create_time', type: 'datetime', nullable: true })
  createTime: Date;

  @Column({ name: 'update_by', length: 64, nullable: true, default: '' })
  updateBy: string;

  @Column({ name: 'update_time', type: 'datetime', nullable: true })
  updateTime: Date;

  @Column({ name: 'remark', length: 500, nullable: true })
  remark: string;

  @Column({ type: 'boolean', nullable: true, default: false,comment: '是否软删除消息(默认为0 未删除 1 删除)'})
  isDeleted: boolean;
}

👉实体映射

在我们的src\common\entity\index.ts文件之中导入实体并进行映射

javascript 复制代码
import { Dictdata } from '@/modules/dictdata/dictdata.entity'; // 字典数据类型实体

export const dataOrmConfig: dataOrmModuleOptions = {
  data: 'mysql', // 可以选择其他数据库,如 MySQL
  host: 'localhost',
  port: 3306,
  username: 'root',
  password: 'XXXXX',
  database: 'nexusnest',
  entities: [Dictdata], 
  synchronize: true, // 自动同步实体到数据库(开发时可以启用,生产环境应谨慎使用)
  logging: false,  // 启用日志记录
  timezone: '+08:00', // 设置时区
};

这个时候刷新我们数据库可以发现,数据库的表已经对应上我们对应的实体了

👉 dict.module.ts

在字典数据模块之中导入其他的模块部分

javascript 复制代码
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

import { DictdataService } from './dictdata.service';
import { DictdataController } from './dictdata.controller';
import { DictData } from './dictdata.entity';


@Module({
     // 导入实体
  imports: [
    TypeOrmModule.forFeature([DictData]),
  ],
  providers: [DictdataService],
  controllers: [DictdataController],
  exports: [DictdataService],
})
export class DictdataModule {}

2、搜索

接下来我们就根据对应的实体帮助我们生成一下我们的字典数据功能部分的api接口

实现字典数据功能其实跟我们其他管理的部分差不多

字典数据功能主要是我们在pc端用户进行登陆以后可以对于字典数据字典数据权限进行控制,然后可以通过字典数据对用户进行权限的统一管理

👉dict.controller.ts 控制器

javascript 复制代码
// 列表 
  @Get()
  @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条
    @Query('dictType') dictType: string,
  ) {
    // const queryParams: QueryParams = { name, phone, age, sex };
    const queryParams = { isDeleted: false,dictType};
    console.log(queryParams, 'queryParams--查询');
    const ResponseData = await this.dictdataService.getAll(pageNum, pageSize, queryParams);
    return ResponseData;
  }

👉dict.service.ts 服务层

javascript 复制代码
  // 通用查询
  async getAll(pageNum: number, pageSize: number, queryParams: any): Promise<ResponseDto<DictData[]>> {
    console.log(queryParams, 'queryParams');
    // 新版本完善-通用分页查询
    const where = await getListApi(this.DictRepository, pageNum, pageSize, queryParams);
    return where;
  }

查询一下,接口ok

3、增加

👉dict.controller.ts 控制器

javascript 复制代码
 // 新增
  @ApiOperation({ summary: '新增' }) // 操作描述
  @Post()
  async create(@Body() addFormData) {
    console.log(addFormData, 'addFormData--添加参数');
    return this.dictdataService.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('/:id')
@ApiOperation({ summary: '查询单个' }) // 操作描述
async getOne(@Param('id') id: string) {
  return this.dictdataService.getOne(id);
}

👉dict.service.ts 服务层

javascript 复制代码
 // 通用详情
  async getOne(id) {
   const resdata = await getOneApi(this.DictRepository, { dictCode: id });
   return resdata;
  }

简单测试一下,详情接口没问题,我们采用的也是通过ID的方式进行获取的

5、修改

接下来我们完善一下我们的修改接口:

👉dict.controller.ts 控制器

javascript 复制代码
 // 更新
  @Put()
  @ApiOperation({ summary: '更新' }) // 操作描述
  async updateOne(@Body() updateFormData) {
    console.log(updateFormData, 'updateFormData');
    // console.log(updateFormData, 'updateFormData');
    return this.dictdataService.updateOne(updateFormData.dictdataId, updateFormData);
  }

👉dict.service.ts 服务层

javascript 复制代码
 // 通用更新
async updateOne(id, updateFormData) {
  const resdata = await updateOneApi(this.DictRepository, updateFormData, { dictCode: id });
  return resdata;
}

简单测试一下,修改接口没问题

5、删除

👉dict.controller.ts 控制器

javascript 复制代码
// 删除
@Delete('/:id')
@ApiOperation({ summary: '删除' }) // 操作描述
async deleteOne(@Param('id') id: number) {
  return this.dictdataService.deleteOne(id);
}

👉dict.service.ts 服务层

javascript 复制代码
// 通用删除
async deleteOne(id) {
  // const resdata = await deleteOneApi(this.DictRepository,{dictCode:id});
  const resdata = await delOneApiPermanent(this.DictRepository, { dictCode: id });
  return resdata;
}

测试可以发现,我们的删除功能已经好了!

6、查询所有字典数据

这里我们需要增加一个查询所有的字典数据,用来给我们字典下拉选择的时候使用

👉dict.controller.ts 控制器

javascript 复制代码
 // 下拉选择列表 
  @Get('/optionselect')
  @ApiOperation({ summary: '获取列表不带分页' }) // 操作描述
  // 获取列表所有
  async getListAll(
    @Query('isDeleted') isDeleted: boolean
  ) {
    const queryParams = { isDeleted: false };
    const ResponseData = await this.dictdataService.getListAll(queryParams);
    return ResponseData;
  }

👉dict.service.ts 服务层

javascript 复制代码
  // 查询所有的
  async getListAll(queryParams: any) {
      // 通用分页查询
      console.log(queryParams,'queryParams');
      const where = await getListAllApi(this.serviceRepository,queryParams);
      return where;
  }

测试一下,ok 数据全部给我们返回来了

相关推荐
不爱说话郭德纲5 分钟前
别再花冤枉钱!手把手教你免费生成iOS证书(.p12) + 打包IPA(超详细)
前端·ios·app
代码的余温6 分钟前
Vue多请求并行处理实战指南
前端·javascript·vue.js
JohnYan20 分钟前
工作笔记 - NATS的Nkey认证
javascript·后端·rabbitmq
余杭子曰1 小时前
组件设计模式:聪明组件还是傻瓜组件?
前端
杨超越luckly1 小时前
HTML应用指南:利用GET请求获取全国小米之家门店位置信息
前端·arcgis·html·数据可视化·shp
海绵宝龙1 小时前
axios封装对比
开发语言·前端·javascript
Data_Adventure1 小时前
setDragImage
前端·javascript
南岸月明1 小时前
七月复盘,i人副业自媒体成长笔记:从迷茫到觉醒的真实经历
前端
静水流深LY1 小时前
Vue2学习-el与data的两种写法
前端·vue.js·学习
玲小珑1 小时前
Next.js 教程系列(二十一)核心 Web Vitals 与性能调优
前端·next.js