들어가기
식당 이름을 검색해서 이름이 들어간 식당을 찾는 API
식당이름으로 어떻게 검색이 이루어지는지를 잘 봐본다,
query를 받아서 restaurant를 검색한다.
restaurant가 없을 수도 있으니, nullable:true로 한다.
import { Field, InputType, ObjectType } from '@nestjs/graphql';
import {
PaginationInput,
PaginationOutPut,
} from 'src/common/dtos/pagination.dto';
import { Restaurant } from '../entities/restaurant.entity';
@InputType()
export class SearchRestaurantInput extends PaginationInput {
@Field(() => String)
query: string;
}
@ObjectType()
export class SearchRestaurantOutput extends PaginationOutPut {
@Field(() => [Restaurant], { nullable: true })
restaurants?: Restaurant[];
}
@Query(() => SearchRestaurantOutput)
searchRestaurant(
@Args('input') searchRestaurantInput: SearchRestaurantInput,
): Promise<SearchRestaurantOutput> {
return this.restaurantService.searchRestaurantByName(searchRestaurantInput);
}
async searchRestaurantByName({
query,
page, ///query와 page를 input으로 받는다.
}: SearchRestaurantInput): Promise<SearchRestaurantOutput> {
try {
const [restaurants, totalResults] = await this.restaurants.findAndCount({
where: {
name: Raw((name) => `${name} ILIKE '%${query}%'`),
},
///걍 nestJS에서는 외워놓는다. %query%는 name사이에 query가 있는것.
skip: (page - 1) * 25,
take: 25,
});
return {
ok: true,
restaurants,
totalResults,
totalPages: Math.ceil(totalResults / 25),
};
} catch {
return {
ok: false,
error: 'Could not search for restaurants',
};
}
}
${name} ILIKE '%${query}%'
)