2. Query 구현하기
- 지난 실습 그대로 진행 또는 2-2-server-query 열기
Query 루트 타입
type Query {
teams: [Team]
}
- 자료요청에 사용될 쿼리들을 정의
- 쿼리 명령문마다 반환될 데이터 형태를 지정
Type 살펴보기
type Team {
id: Int
manager: String
office: String
extension_number: String
mascot: String
cleaning_duty: String
project: String
}
- 반환될 데이터의 형태를 지정
- 자료형을 가진 필드들로 구성
Resolver 살펴보기
const resolvers = {
Query: {
teams: () => database.teams
}
}
- Query란 object의 항목들로 데이터를 반환하는 함수 선언
- 실제 프로젝트에서는 MySQL 조회 코드 등..
equipments를 반환하는쿼리 만들어보기
-
dbtester.js 생성
const database = require('./database') console.log(database.equipments)
-
equipment의 데이터 자료형
type Equipment { id: String, used_by: String, count: Int, new_or_used: String }
-
다수의 equipment를 반환하는 쿼리
type Query { ... equipments: [Equipment] }
-
데이터베이스에서 equipments를 추출하여 반환하는 resolver
Query: { // ... equipments: () => database.equipments }
-
쿼리 요청해보기
query { equipments { id used_by count new_or_used } }
supplies 받아오기 추가
query {
...
type Supply {
id: String,
team: Int
}
}
type Query {
...
supplies: [Supply]
}
type Query {
//...
supplies: () => database.supplies
}
특정 team만 받아오기
-
args로 주어진 id에 해당하는 team만 필터링하여 반환
Query: { //... team: (parent, args, context, info) => database.teams .filter((team) => { return team.id === args.id })[0], }
-
id를 인자로 받아 하나의 Team 데이터를 반환
type Query { ... team(id: Int): Team }
query { team(id: 1) { id manager office extension_number mascot cleaning_duty project } }
team에 supplies 연결해서 받아오기
-
Team 목록을 반환 시 해당하는 supplies를 supplies 항목에 추가
Query: { // ... teams: () => database.teams .map((team) => { team.supplies = database.supplies .filter((supply) => { return supply.team === team.id }) return team }), }
-
Team의 항목들 중 supplies: 다수의 Supply를 반환
type Team { id: Int manager: String office: String extension_number: String mascot: String cleaning_duty: String project: String supplies: [Supply] }