NestJS-申请模块
        【摘要】 NestJS-申请模块
    
    
    
    NestJS-申请模块
1、申请模块
接下来我们新建一个申请模块,实现对于申请部分的管理功能接口
👉生成申请文件
nest g controller modules/applications --no-spec
nest g module modules/applications --no-spec
nest g service modules/applications --no-spec
创建完成以后的目录如下图所示
src\modules\applications
  src\modules\applications\applications.controller.ts
  src\modules\applications\applications.module.ts
  src\modules\applications\applications.service.ts
//手动添加实体
  src\modules\applications\applications.entity.ts
 👉applications.entity.ts实体搭建
import { Entity, PrimaryGeneratedColumn, Column, Index } from 'typeorm';
@Entity('applications')
@Index('activities_id', ['activitiesId'])  // 使用实体属性名 activitiesId
export class Application {
  
  @PrimaryGeneratedColumn({ name: 'applications_id', type: 'int' })
  applicationsId: number;
  @Column({ name: 'user_id', type: 'int', nullable: false })
  userId: number;
  @Column({ name: 'activities_id', type: 'int', nullable: true, default: null })
  activitiesId: number | null;
  @Column({
    name: 'status',
    type: 'enum',
    enum: ['pending', 'approved', 'rejected'],
    default: 'pending',
    nullable: true
  })
  status: 'pending' | 'approved' | 'rejected';
  @Column({ name: 'applied_time', type: 'datetime', default: () => 'CURRENT_TIMESTAMP', nullable: true })
  appliedTime: Date;
  @Column({ name: 'create_time', type: 'datetime', default: () => 'CURRENT_TIMESTAMP', nullable: true })
  createTime: Date;
  @Column({ name: 'update_time', type: 'datetime', default: () => 'CURRENT_TIMESTAMP', onUpdate: 'CURRENT_TIMESTAMP', nullable: true })
  updateTime: Date;
  @Column({ type: 'boolean', nullable: true, default: false, comment: '是否软删除消息(默认为0 未删除 1 删除)' })
  isDeleted: boolean;
}
👉实体映射
在我们的src\common\entity\index.ts文件之中导入实体并进行映射
import { applications } from '@/modules/applications/applications.entity'; // 申请类型实体
export const dataOrmConfig: dataOrmModuleOptions = {
  data: 'mysql', // 可以选择其他数据库,如 MySQL
  host: 'localhost',
  port: 3306,
  username: 'root',
  password: 'XXXXX',
  database: 'nexusnest',
  entities: [applications], 
  synchronize: true, // 自动同步实体到数据库(开发时可以启用,生产环境应谨慎使用)
  logging: false,  // 启用日志记录
  timezone: '+08:00', // 设置时区
};
这个时候刷新我们数据库可以发现,数据库的表已经对应上我们对应的实体了
👉 applications.module.ts
在申请模块之中导入其他的模块部分
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ApplicationsController } from './applications.controller';
import { ApplicationsService } from './applications.service';
import { Application } from './applications.entity';
@Module({
  // 导入实体
  imports: [
    TypeOrmModule.forFeature([Application]),
  ],
  providers: [ApplicationsService],
  controllers: [ApplicationsController],
  exports: [ApplicationsService],
})
export class ApplicationsModule {}
2、搜索
接下来我们就根据对应的实体帮助我们生成一下我们的申请功能部分的api接口
实现申请功能其实跟我们其他管理的部分差不多
申请功能主要是我们在pc端用户进行登陆以后可以对于申请申请权限进行控制,然后可以通过申请对用户进行权限的统一管理
👉applications.controller.ts 控制器
 // 列表
  @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('activityType') activityType, // 默认每页10条
  ) {
    //const queryParams: QueryParams = { name, phone, age, sex };
    const queryParams = { isDeleted: "false",activityType};
    console.log(queryParams, 'queryParams--查询');
    const ResponseData = await this.controlService.getAll(pageNum, pageSize, queryParams);
    return ResponseData;
  }
👉applications.service.ts 服务层
// 通用查询
async getAll(pageNum: number, pageSize: number, queryParams: any): Promise<ResponseDto<Activity[]>> {
  // console.log(queryParams, 'queryParams');
  // 新版本完善-通用分页查询
  const where = await getListApi(this.NoyiceRepository, pageNum, pageSize, queryParams);
  return where;
}
查询一下,接口ok
3、增加
👉applications.controller.ts 控制器
  // 新增
  @ApiOperation({ summary: '新增' }) // 操作描述
  @Post()
  async create(@Body() addFormData) {
    console.log(addFormData, 'addFormData--添加参数');
    return this.controlService.addOne(addFormData);
  }
👉applications.service.ts 服务层
 async addOne(addFormData) {
  const resdata = await addApi(this.NoyiceRepository, addFormData);
  return resdata;
}
尝试一下我们的新增接口
增加功能ok,并且能正确返回我们想要的东西
4、详情
详情,通过id然后查到对应的内容
👉applications.controller.ts 控制器
// 查询单个
@Get('/:id')
@ApiOperation({ summary: '查询单个' }) // 操作描述
async getOne(@Param('id') id: string) {
  return this.controlService.getOne(id);
}
👉applications.service.ts 服务层
// 通用详情
async getOne(id) {
  const resdata = await getOneApi(this.NoyiceRepository, {applicationsId: id });
  return resdata;
}
简单测试一下,详情接口没问题,我们采用的也是通过ID的方式进行获取的
5、修改
接下来我们完善一下我们的修改接口:
👉applications.controller.ts 控制器
 // 更新
  @Put()
  @ApiOperation({ summary: '更新' }) // 操作描述
  async updateOne(@Body() updateFormData) {
    console.log(updateFormData, 'updateFormData');
    // console.log(updateFormData, 'updateFormData');
    return this.controlService.updateOne(updateFormData.noyiceId, updateFormData);
  }
👉applications.service.ts 服务层
// 通用更新
async updateOne(id, updateFormData) {
  const resdata = await updateOneApi(this.NoyiceRepository, updateFormData, { applicationsId: id });
  return resdata;
}
简单测试一下,修改接口没问题
5、删除
👉applications.controller.ts 控制器
// 删除
  @Delete('/:id')
  @ApiOperation({ summary: '删除' }) // 操作描述
  async deleteOne(@Param('id') id: number) {
    return this.controlService.deleteOne(id);
  }
👉applications.service.ts 服务层
// 通用删除
async deleteOne(id) {
  const resdata = await deleteOneApi(this.NoyiceRepository,{applicationsId:id});
  return resdata;
}
测试可以发现,我们的删除功能已经好了!
            【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
                cloudbbs@huaweicloud.com
                
            
        
        
        
        
        
        
        - 点赞
 - 收藏
 - 关注作者
 
            
           
评论(0)