mirror of
https://github.com/FranP-code/countries.git
synced 2025-10-13 00:02:15 +00:00
Add queries/resolvers for single assets
This commit is contained in:
69
index.js
69
index.js
@@ -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';
|
import {continents, countries, languages} from 'countries-list';
|
||||||
|
|
||||||
function toArray(object) {
|
function toArray(object) {
|
||||||
@@ -8,61 +10,18 @@ function toArray(object) {
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
const data = {
|
const server = new ApolloServer({
|
||||||
continents: Object.entries(continents).map(([code, name]) => ({code, name})),
|
typeDefs,
|
||||||
countries: toArray(countries),
|
resolvers,
|
||||||
languages: toArray(languages)
|
context: {
|
||||||
};
|
continents: Object.entries(continents).map(([code, name]) => ({
|
||||||
|
code,
|
||||||
const typeDefs = gql`
|
name
|
||||||
type Continent {
|
})),
|
||||||
code: String
|
countries: toArray(countries),
|
||||||
name: String
|
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}) => {
|
server.listen({port: process.env.PORT}).then(({url}) => {
|
||||||
console.log(`🚀 Server ready at ${url}`);
|
console.log(`🚀 Server ready at ${url}`);
|
||||||
|
|||||||
21
resolvers.js
Normal file
21
resolvers.js
Normal 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
36
schema.js
Normal 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
|
||||||
|
}
|
||||||
|
`;
|
||||||
Reference in New Issue
Block a user