"이 장에서는 태그를 추가, 삭제 및 변경하기 위한 블로그 태그 인터페이스 작성에 중점을 두며, 태그가 상위 태그와 하위 태그로 구분되는 블로그에 다음에 추가할 내용을 작성할 수 있는 기반을 닦습니다."
태그 모듈 만들기
nest g res tagbash
또한 REST API를 선택하고 크러드를 생성합니다.
태그된 엔터티 추가하기
tsimport { 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 테이블을 생성한 것을 볼 수 있습니다.
인터페이스 만들기 추가
tsconstructor(@InjectRepository(Tag) private tagRepository: Repository<Tag>) {} async create(createTagDto: CreateTagDto) { return await this”.tagRepository.save(createTagDto); }
그런 다음 apifox를 열어 인터페이스 테스트를 진행합니다.
네, 문제 없습니다.
라벨 쿼리 인터페이스
먼저, tag.controller.ts를 수정하여 입력 매개변수를 추가합니다.
tag.service.ts를 수정하여 인바운드 매개변수 및 페이징을 설정합니다.
tsinterface 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를 사용하여 쿼리를 테스트해 보겠습니다.
페이징 쿼리에 문제가 없는 경우 이름 조건 쿼리를 테스트합니다.
조건부 퍼지 쿼리는 괜찮습니다.
tsasync update(body) { if (!body.id) return this”.Apiresult.MESSAGE(500, '누락된 아이디'); 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, '수정에 실패했습니다. 입력 매개변수를 확인하세요'); }
추가 및 삭제도 마찬가지입니다.
tsasync remove(body) { if (!body.id) return this”.Apiresult.MESSAGE(500, '누락된 아이디'); const data = await this”.tagRepository.delete(body.id); if (data.affected > 0) { return this”.Apiresult.MESSAGE(200, '삭제 성공'); } return this”.Apiresult.MESSAGE(500, '삭제에 실패했습니다, 입력 매개변수를 확인하세요'); }
테스트해 보세요.





