1. 서버 구성요소 모듈화

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들을 다른 파일들로 나누고 배열 형태로 보내는 방식

Screen Shot 2021-10-22 at 5.14.04 PM.png

index.js에서 export된 typeDefs, resolvers를 배열로 모으고 ApolloServer에서 사용

GraphQL의 기본 타입들