NestJS-活动模块

NestJS-活动数据模块

1、活动数据模块

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

👉生成活动数据文件

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

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

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

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

👉activities.entity.ts实体搭建

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

@Entity('sys_activities')
export class activities {
  @PrimaryGeneratedColumn({ name: 'activities_id', type: 'int' })
  activitiesId: number;

  @Column({ name: 'title', length: 255, nullable: false })
  title: string;

  @Column({ name: 'author', type: 'varchar', length: 255, nullable: true, default: null })
  author: string | null;

  @Column({ name: 'type', type: 'varchar', length: 50, nullable: true, default: null })
  type: string | null;

  @Column({ name: 'activitiesclick', type: 'int', nullable: true, default: null })
  activitiesclick: number | null;

  @Column({ 
    name: 'status', 
    type: 'int', 
    nullable: true, 
    default: null, 
    comment: '0 暂存 1 发布' 
  })
  status: number | null;

  @Column({ name: 'activitiescollect', type: 'int', nullable: true, default: null })
  activitiescollect: number | null;

  @Column({ name: 'content', type: 'text', nullable: true, default: null })
  content: string | null;

  @Column({ name: 'thumburl', type: 'longtext', nullable: true, default: null })
  thumburl: string | null;

  @Column({ name: 'activitiespublishTime', type: 'datetime', nullable: true, default: null })
  activitiespublishTime: Date | null;

  @Column({ name: 'author_id', type: 'int', nullable: true, default: null })
  authorId: number | null;

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

  @Column({ name: 'update_time', type: 'datetime', nullable: true, default: () => 'CURRENT_TIMESTAMP', onUpdate: 'CURRENT_TIMESTAMP' })
  updateTime: Date;

  @Column({ name: 'uploadfile', type: 'longtext', nullable: true, default: null })
  uploadfile: string | null;

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

👉实体映射

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

javascript 复制代码
import { activities } from '@/modules/activities/activities.entity'; // 活动数据类型实体

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

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

👉 activities.module.ts

在活动数据模块之中导入其他的模块部分

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


import { ActivitiesController } from './activities.controller';
import { ActivitiesService } from './activities.service';
import { Activity } from './activities.entity';

@Module({
  // 导入实体
  imports: [
    TypeOrmModule.forFeature([Activity]),
  ],
  providers: [ActivitiesService],
  controllers: [ActivitiesController],
  exports: [ActivitiesService],
})
export class ActivitiesModule {}

2、搜索

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

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

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

👉activities.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('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;
  }

👉activities.service.ts 服务层

javascript 复制代码
// 通用查询
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、增加

👉activities.controller.ts 控制器

javascript 复制代码
 // 新增
  @ApiOperation({ summary: '新增' }) // 操作描述
  @Post()
  async create(@Body() addFormData) {
    console.log(addFormData, 'addFormData--添加参数');
    return this.controlService.addOne(addFormData);
  }

👉activities.service.ts 服务层

javascript 复制代码
// 通用添加
async addOne(addFormData) {
  const resdata = await addApi(this.NoyiceRepository, addFormData);
  return resdata;
}

尝试一下我们的新增接口

增加功能ok,并且能正确返回我们想要的东西

4、详情

详情,通过id然后查到对应的内容

👉activities.controller.ts 控制器

javascript 复制代码
 // 查询单个
  @Get('/:id')
  @ApiOperation({ summary: '查询单个' }) // 操作描述
  async getOne(@Param('id') id: string) {
    return this.controlService.getOne(id);
  }

👉activities.service.ts 服务层

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

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

5、修改

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

👉activities.controller.ts 控制器

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

👉activities.service.ts 服务层

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

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

5、删除

👉activities.controller.ts 控制器

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

👉activities.service.ts 服务层

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

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

相关推荐
前端伪大叔几秒前
第 6 篇:《量化使用看图说话!plot-dataframe 图表可视化教程》
后端·github
考虑考虑2 分钟前
JDK21中的虚拟线程
java·后端·java ee
Neon12044 分钟前
JavaScript 文件在页面渲染中的加载机制详解
前端·面试
T兮尔6 分钟前
ios和安卓软键盘问题
前端
Neon12047 分钟前
面试复盘:如何回答「千万级Tree组件」封装问题?
前端·面试
Neon120410 分钟前
面试题:Vue2 中 template 的解析过程详解
前端·面试
光影少年10 分钟前
js防抖、节流和扁平化实现
前端·javascript·掘金·金石计划
理子11 分钟前
tauri2前端获取应用配置目录并创建文件和目录
前端
却尘13 分钟前
React状态的人格分裂:当Vibe Coding遇上状态污染,坑你就完了。
前端·react.js·vibecoding