Add queries/resolvers for single assets

This commit is contained in:
Trevor Blades
2018-10-11 23:39:44 -04:00
parent febf38a98f
commit 4649d32676
3 changed files with 71 additions and 55 deletions

View File

@@ -1,4 +1,6 @@
import {ApolloServer, gql} from 'apollo-server';
import resolvers from './resolvers';
import typeDefs from './schema';
import {ApolloServer} from 'apollo-server';
import {continents, countries, languages} from 'countries-list';
function toArray(object) {
@@ -8,61 +10,18 @@ function toArray(object) {
}));
}
const data = {
continents: Object.entries(continents).map(([code, name]) => ({code, name})),
countries: toArray(countries),
languages: toArray(languages)
};
const typeDefs = gql`
type Continent {
code: String
name: String
const server = new ApolloServer({
typeDefs,
resolvers,
context: {
continents: Object.entries(continents).map(([code, name]) => ({
code,
name
})),
countries: toArray(countries),
languages: toArray(languages)
}
type Country {
code: String
name: String
native: String
phone: String
continent: Continent
currency: String
languages: [Language]
emoji: String
emojiU: String
}
type Language {
code: String
name: String
native: String
rtl: Int
}
type Query {
continents: [Continent]
countries: [Country]
languages: [Language]
}
`;
const resolvers = {
Country: {
continent: country =>
data.continents.find(continent => continent.code === country.continent),
languages: country =>
data.languages.filter(language =>
country.languages.includes(language.code)
)
},
Query: {
continents: () => data.continents,
countries: () => data.countries,
languages: () => data.languages
}
};
const server = new ApolloServer({typeDefs, resolvers});
});
server.listen({port: process.env.PORT}).then(({url}) => {
console.log(`🚀 Server ready at ${url}`);

21
resolvers.js Normal file
View File

@@ -0,0 +1,21 @@
function byCode(code) {
return item => item.code === code;
}
export default {
Country: {
continent: (country, args, {continents}) =>
continents.find(continent => continent.code === country.continent),
languages: (country, args, {languages}) =>
languages.filter(language => country.languages.includes(language.code))
},
Query: {
continent: (parent, args, {continents}) =>
continents.find(byCode(args.code)),
continents: (parent, args, {continents}) => continents,
country: (parent, args, {countries}) => countries.find(byCode(args.code)),
countries: (parent, args, {countries}) => countries,
language: (parent, args, {languages}) => languages.find(byCode(args.code)),
languages: (parent, args, {languages}) => languages
}
};

36
schema.js Normal file
View File

@@ -0,0 +1,36 @@
import {gql} from 'apollo-server';
export default gql`
type Continent {
code: String
name: String
}
type Country {
code: String
name: String
native: String
phone: String
continent: Continent
currency: String
languages: [Language]
emoji: String
emojiU: String
}
type Language {
code: String
name: String
native: String
rtl: Int
}
type Query {
continents: [Continent]
continent(code: String): Continent
countries: [Country]
country(code: String): Country
languages: [Language]
language(code: String): Language
}
`;