mirror of
https://github.com/FranP-code/countries.git
synced 2025-10-13 00:02:15 +00:00
70 lines
1.4 KiB
JavaScript
70 lines
1.4 KiB
JavaScript
import {ApolloServer, gql} from 'apollo-server';
|
|
import {continents, countries, languages} from 'countries-list';
|
|
|
|
function toArray(object) {
|
|
return Object.keys(object).map(code => ({
|
|
...object[code],
|
|
code
|
|
}));
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
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}`);
|
|
});
|