"本章节主要编写博客标签接口的增删改查,也为接下来编写博客的添加做铺垫,标签分为父标签和子标签"
创建标签模块
bash
nest g res tag
同样我们选择REST API以及生成crud
添加标签实体
ts
import { Base } from 'libs/Entities/base.entity';
import { Column, Entity, ManyToMany, ManyToOne } from 'typeorm';
@Entity('tag')
export class Tag extends Base {
@Column({
type: 'varchar',
comment: '标签名称',
})
name: string;
@ManyToOne((type) => Tag, (tag) => tag.superiors)
superiorsid: Tag;
@ManyToMany((type) => Tag, (tag) => tag.superiorsid)
superiors: Tag[];
@Column()
grade: string;
}
重启之后可以看到数据库已经生成了tsg表
添加创建接口
ts
constructor(@InjectRepository(Tag) private tagRepository: Repository<Tag>) {}
async create(createTagDto: CreateTagDto) {
return await this.tagRepository.save(createTagDto);
}
然后打开apifox进行接口测试。
OK,没有问题
标签查询接口
首先修改tag.controller.ts,添加入参
修改tag.service.ts,设置入参,以及分页
ts
interface SearchType {
// 搜索条件
search: any;
pageNo: number;
pageSize: number;
}
Apiresult = new ApiresultService();
async findAll(body: SearchType) {
const { pageNo, pageSize, search } = body;
const condition: Record<string, any> = {}; // 用于设置模糊查询
const skipCount = (pageNo - 1) * pageSize; // 分页查询,计算要跳过的条数
if (search && search.name) {
const { name } = search;
condition.name = Like(`%${name}%`); // 模糊查询
}
condition.grade = 1; // 因为我们是只有二级,所以要过滤一下
const [list, total] = await this.tagRepository
.createQueryBuilder('entity') // 设置表别名
.leftJoinAndSelect('entity.superiors', 'children')
.where(condition) // 设置查询条件
.skip(skipCount)
.take(pageSize)
.getManyAndCount();
return {
...this.Apiresult.MESSAGE(200, '查询成功', list),
total,
};
}
我这里已经添加了几条数据,接下来使用apifox进行查询测试
分页查询没有问题,然后测试name条件查询
条件模糊查询没问题
标签修改和删除
ts
async update(body) {
if (!body.id) return this.Apiresult.MESSAGE(500, '缺少id');
const data = await this.tagRepository.update(body.id, body);
console.log(data);
if (data.affected > 0) {
return this.Apiresult.MESSAGE(200, '修改成功');
}
return this.Apiresult.MESSAGE(500, '修改失败, 请检查入参');
}
同理添加删除
ts
async remove(body) {
if (!body.id) return this.Apiresult.MESSAGE(500, '缺少id');
const data = await this.tagRepository.delete(body.id);
if (data.affected > 0) {
return this.Apiresult.MESSAGE(200, '删除成功');
}
return this.Apiresult.MESSAGE(500, '删除失败, 请检查入参');
}
测试一下