const database = require("./database");
const { ApolloServer, gql } = require("apollo-server");
const typeDefs = gql`
type Query {
teams: [Team]
team(id: Int): Team
equipments: [Equipment]
supplies: [Supply]
}
type Mutation {
deleteEquipment(id: String): Equipment
insertEquipment(
id: String
used_by: String
count: Int
new_or_used: String
): Equipment
}
type Team {
id: Int
manager: String
office: String
extension_number: String
mascot: String
cleaning_duty: String
project: String,
supplies: [Supply]
}
type Equipment {
id: String
used_by: String
count: Int
new_or_used: String
}
type Supply {
id: String
team: Int
}
`
const resolvers = {
Query: {
teams: () => database.teams
.map((team) => {
team.supplies = database.supplies
.filter((supply) => {
return supply.team === team.id;
})
return team;
}),
team: (parent, args, context, info) => database.teams
.filter((team) => {
return team.id === args.id;
})[0],
equipments: () => database.equipments,
supplies: () => database.supplies
},
Mutation: {
deleteEquipment: (parent, args, context, info) => {
const deleted = database.equipments
.filter((equipment) => {
return equipment.id == args.id;
})[0];
database.equipments = database.equipments
.filter((equipment) => {
return equipment.id !== args.id;
});
return deleted;
},
insertEquipment: (parent, args, context, info) => {
console.log(args);
const equipment = args;
database.equipments.push(equipment);
return equipment;
}
}
}
const server = new ApolloServer({ typeDefs, resolvers });
server.listen().then(( {url} ) => {
console.log("Server ready at", url)
})
Schema(typeDefs), resolvers 가 한 파일에서 관리되고 있음
프로젝트가 커지면 좋은 방식이 아님
→
typeDef들과 resolver들을 다른 파일들로 나누고 배열 형태로 보내는 방식
index.js에서 export된 typeDefs, resolvers를 배열로 모으고 ApolloServer에서 사용
ID: 기본적으로는 String이나, 고유 식별자 역할임을 나타냄
String: UTF-8 문자열
Int: 부호가 있는 32비트 정수
Float: 부호가 있는 부동소수점 값
Boolean: 참/거짓
!: Non Null (!라고 되어 있는데 Null이면 오류)