들어가기
restaurantId를 통해서 하나의 restaurant를 보는 API
등록된 모든 restaurant를 보는 API
(input으로는 page, return은 Restaurnat[], totalPAges, totalResults등)
restaurantId를 input으로 입력받아서 reztaurant 하나를 찾음.
import { Field, InputType, Int, ObjectType } from '@nestjs/graphql';
import { MutationOutput } from 'src/common/dtos/output.dto';
import { Restaurant } from '../entities/restaurant.entity';
@InputType()
export class RestaurantInput {
@Field(() => Int)
restaurantId: number;
}
@ObjectType()
export class RestaurantOutput extends MutationOutput {
@Field(() => Restaurant, { nullable: true })
restaurant?: Restaurant;
}
@Query(() => RestaurantOutput)
restaurant(
@Args('input') restaurantInput: RestaurantInput,
): Promise<RestaurantOutput> {
return this.restaurantService.findRestaurantById(restaurantInput);
}
async findRestaurantById({
restaurantId,
}: RestaurantInput): Promise<RestaurantOutput> {
try {
const restaurant = await this.restaurants.findOne(restaurantId);
if (!restaurant) {
return {
ok: false,
error: 'Restaurant not found',
};
}
return {
ok: true,
restaurant,
};
} catch {
return {
ok: false,
error: 'Could not find restaurant',
};
}
}
특별히 어려울것 없음.
PaginationInput의 page 말고는 input없음.
등록된 모든 식당을 보는 API
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 RestaurantsInput extends PaginationInput {}
@ObjectType()
export class RestaurantsOutput extends PaginationOutPut {
@Field(() => [Restaurant], { nullable: true })
results?: Restaurant[];
}
@Query(() => RestaurantsOutput)
restaurants(
@Args('input') restaurantsInput: RestaurantsInput,
): Promise<RestaurantsOutput> {
return this.restaurantService.allRestaurants(restaurantsInput);
}
async allRestaurants({ page }: RestaurantsInput): Promise<RestaurantsOutput> {
try {
const [restaurants, totalResults] = await this.restaurants.findAndCount({
skip: (page - 1) * 25,
take: 25, ///25개씩 pagination을 구현해 놓음.
});
///findAndCount는 찾은 restaurant와 그 수를 return해준다.
///[restaurants, totalResults] --> 이걸로 find 와 count를 받음.
return {
ok: true,
results: restaurants,
totalPages: Math.ceil(totalResults / 25), ///Math.ceil은 소수점 날려줌.
totalResults,
};
} catch {
return {
ok: false,
error: 'Could not load restaurants',
};
}
}
크게 어려운거 없이 반복이니까 한번 봐 놓을것.
findAndCount, Math.ceil