search Restaurant

김종민·2022년 7월 4일
0

Nuber-Server

목록 보기
23/34


들어가기
식당 이름을 검색해서 이름이 들어간 식당을 찾는 API
식당이름으로 어떻게 검색이 이루어지는지를 잘 봐본다,

1.search-restaurant.dto.ts

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

2. resolver

  @Query(() => SearchRestaurantOutput)
  searchRestaurant(
    @Args('input') searchRestaurantInput: SearchRestaurantInput,
  ): Promise<SearchRestaurantOutput> {
    return this.restaurantService.searchRestaurantByName(searchRestaurantInput);
  }

3. service

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',
     };
   }
 }
 
  1. 검색하는 부분, findAndCount, name: Raw((name)=> ${name} ILIKE '%${query}%')
    이부분을 유심히 잘 봐놓는다.~~~

https://tutorialspoint.com/sql/sql-like-clause.htm

profile
코딩하는초딩쌤

0개의 댓글