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;
}

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

相关推荐
子兮曰16 小时前
OpenClaw入门:从零开始搭建你的私有化AI助手
前端·架构·github
Victor35616 小时前
https://editor.csdn.net/md/?articleId=139321571&spm=1011.2415.3001.9698
后端
吴仰晖16 小时前
使用github copliot chat的源码学习之Chromium Compositor
前端
1024小神16 小时前
github发布pages的几种状态记录
前端
Victor35616 小时前
Hibernate(89)如何在压力测试中使用Hibernate?
后端
灰子学技术17 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
不像程序员的程序媛18 小时前
Nginx日志切分
服务器·前端·nginx
Daniel李华18 小时前
echarts使用案例
android·javascript·echarts
北原_春希18 小时前
如何在Vue3项目中引入并使用Echarts图表
前端·javascript·echarts
JY-HPS18 小时前
echarts天气折线图
javascript·vue.js·echarts