Open kgneng2 opened 4 years ago
'user strict'
request = require 'request'
config = require '../../config/environment'
UTIL = require '../util/useful.util'
logger = require('log4js').getLogger()
getFlightCalendarFare = (reqQuery, callback) ->
roundTripTime = if reqQuery.roundTripTime then parseInt(reqQuery.roundTripTime, 10) else NaN
variable = Object.assign reqQuery,
hoursBefore: parseInt(reqQuery.hoursBefore, 10)
roundTripTime: roundTripTime
agent: parseInt(reqQuery.agent, 10)
body =
operationName: 'flight_calendar_fare'
query: 'query flight_calendar_fare(
$from: [String!]!
$to: String!
$mode: String!
$departDate: String!
$hoursBefore: Int!
$roundTripTime: Int
$agent: Int!
) {
flightFare(
from: $from,
to: $to,
mode: $mode,
departDate: $departDate,
hoursBefore: $hoursBefore,
roundTripTime: $roundTripTime,
agent: $agent
) {
date
fares {
stops
fare
}
}
}
'
variables: variable
UTIL.sendGraphQL(body, callback, true)
module.exports.index = (req, res) ->
getFlightCalendarFare req.query, (err, result) =>
if err
logger.error err
res.status(500).send(err)
else
logger.info result.data.flightFare
res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate')
res.header('Expires', '-1')
res.header('Pragma', 'no-cache')
res.json result.data.flightFare
baseOptionsForClearance =
uri: config.travelApiWorkSpace.domain + '/graphql'
method: 'POST'
timeout: 15000
headers:
'Content-Type': 'application/json'
resolveWithFullResponse: true
baseOptionsForAirline =
uri: config.travelApiAirline.domain + '/graphql'
method: 'POST'
timeout: 15000
headers:
'Content-Type': 'application/json'
resolveWithFullResponse: true
module.exports.sendGraphQL = (reqBody, callback, isFlightApi, req, isAirline) ->
sendBaseOptions = if isFlightApi then baseOptionsForClearance else baseOptions
if isAirline
sendBaseOptions = baseOptionsForAirline
options = Object.assign sendBaseOptions,
body: JSON.stringify(reqBody)
headers: Object.assign sendBaseOptions.headers,
'graphql-operation': reqBody.operationName
'graphql-valiables':
'?' +
Object.keys(reqBody.variables)
.map((key) => """#{key}=#{encodeURIComponent(reqBody.variables[key])}""")
.join('&')
if req
options.headers['user-agent'] = req.headers['user-agent']
options.headers['referer'] = req.headers['referer']
options.headers['x-nx-user-agent'] = req.headers['x-nx-user-agent']
options.headers['x-nx-session-id'] = req.headers['x-nx-session-id']
options.headers['x-nx-page-id'] = req.headers['x-nx-page-id']
options.headers['x-nx-referer'] = req.headers['x-nx-referer']
options.headers.cookie = req.headers.cookie
REQUEST options, (err, response, body) ->
if err
callback 'sendGraphQL('+ reqBody.operationName + ') failed, ' + err
else if response and response.statusCode isnt 200
callback 'sendGraphQL('+ reqBody.operationName + ') failed, statusCode:' + response.statusCode
else if body
callback null, JSON.parse(body)
else
callback 'sendGraphQL('+ reqBody.operationName + ')'
import config from '../config/environment/config';
import {
createHttpLink,
ApolloClient,
gql,
InMemoryCache,
} from '@apollo/client/core';
import fetch from 'node-fetch';
import log from '../log/log';
const client = new ApolloClient({
link: createHttpLink({
uri: config.flightsBookings.partenersUrl,
fetch,
}),
cache: new InMemoryCache(),
});
const getFlightsPartnersQuery = gql`
query GetFlightPartners {
flightPartners {
otaId
expName
}
}
`;
export const getFlightsPartnersName = async agtCode => {
const { data } = await client.query({
query: getFlightsPartnersQuery,
});
console.log(data.flightPartners.length);
// return partners
// .filter(partner => partner.otaId === agtCode)
// .map(d => {
// return d.expName;
// });
};
https://graphql-kr.github.io/learn/
example
request
response
스키마 & 타입
쿼리 타입 & 뮤테이션 타입
스키마 대부분의 타입은 일반 객체 타입이지만 스키마 내에는 특수한 두 가지 타입이 있습니다.
schema { query: Query mutation: Mutation } 모든 GraphQL 서비스는 query 타입을 가지며 mutation 타입은 가질 수도 있고 가지지 않을 수도 있습니다. 이러한 타입은 일반 객체 타입과 동일하지만 모든 GraphQL 쿼리의 진입점(entry point) 을 정의하므로 특별합니다.
즉, GraphQL 서비스는 hero 및 droid 필드가 있는 Query 타입이 있어야합니다.
스칼라 타입
열거형 타입
즉, 스키마에서 Episode 타입을 사용할 때마다 정확히 NEWHOPE, EMPIRE, JEDI 중 하나일 것입니다.
다양한 언어로 작성된 GraphQL 서비스 구현은 열거형 타입을 처리 할 수 있는 언어별 고유한 방법을 갖습니다. enum 을 지원하는 언어에서는 구현시 이를 활용할 수 있습니다. 열거형 타입이 없는 JavaScript와 같은 언어에서 이러한 값은 내부적으로 정수 집합에 매핑될 수 있습니다. 하지만 이러한 세부 정보는 클라이언트에 노출되지 않으며, 열거형 값의 문자열로만 작동합니다.
interface
특정 객체 타입의 필드를 요청하려면 인라인 프래그먼트을 사용해야합니다.