menu 등록 시 클라이언트에게 name을 받고, 서버에서 자동으로 order 값을 증가시켜 db에 저장하는 api를 만들고 있었다.
근데 자꾸 order를 숫자로 적어야한다고 뜬다.

//create-menu.dto.ts
import { Type } from 'class-transformer';
import { IsNotEmpty, IsNumber, IsString } from 'class-validator';
export class CreateCategoryDto {
@IsString()
@IsNotEmpty({ message: 'name을 입력해주세요.' })
name: string;
@Type(() => Number)
@IsNumber()
readonly order: number;
}
//menu.servcie.ts
/* 카테고리 등록 */
async createCategory(req: Request, name: string) {
if (req['user'].userType !== UserType.OWNER) {
throw new UnauthorizedException(`사장님만 사용할 수 있는 API입니다.`);
}
const findCategoryByName = await this.categoryRepository.findOne({
where: { name },
});
if (findCategoryByName) {
throw new ConflictException(`${name} 카테고리가 이미 있습니다.`);
}
const category = new Category();
category.name = name;
const foundCategory = await this.categoryRepository.findOne({
where: { deletedAt: null },
order: { order: 'DESC' },
});
if (!foundCategory) {
category.order = 1;
} else {
category.order = foundCategory.order + 1;
}
await this.categoryRepository.save(category);
return { message: '카테고리를 등록하였습니다.' };
}
자료형을 명시적으로 Number()를 씌어봐도 같은 문제가 반복되었다. 그러다가 깨달은 사실...
클라이언트한테서 입력받지 않으니 dto에다가 명시안해줘도 되는거잖아?
헐랑방구
create-menu.dto.ts에서 order를 지우니 해결.
create-menu.dto.ts를 상속받는 update-menu.dto.ts는 조금 손봐주고 완료했다.
//update-menu.dto.ts
import { PartialType } from '@nestjs/mapped-types';
import { CreateCategoryDto } from './create-category.dto';
import { IsNumber } from 'class-validator';
export class UpdateCategoryDto extends PartialType(CreateCategoryDto) {
@IsNumber()
order: number;
}