BackEnd: node.js + koa +mongoDB(mongoose)
Front: Vue.js + apollo
Работаю с действующим приложением, расширяю функционал, и вот попал на трудности. Второй день читаю доки, но всё равно, что-то не клеится с вложенным запросом. И так, есть
schema.js (много деструктуризации, много импортов, лишние убрал...)
import { userQueries, userMutations } from './user'
import { partnerQueries } from './partner'
export default new GraphQLSchema({
query: new GraphQLObjectType({
name: 'Query',
fields: {
...partnerQueries,
},
}),
mutation: new GraphQLObjectType({
name: 'Mutation',
fields: {
...userMutations,
}
}),
subscription: new GraphQLObjectType({
name: 'Subscriptions',
fields: {
...userQueries,
},
}),
})
Далее отдельный файл с типами types.js :
import {
GraphQLObjectType,
GraphQLString,
GraphQLFloat,
GraphQLBoolean,
GraphQLList,
GraphQLID,
} from "graphql";
import GraphQLJSON from "graphql-type-json"
// GraphQL schema
const referralsUser = {
_id: {
type: GraphQLID,
},
email: {
type: GraphQLString,
},
name: {
type: GraphQLString,
},
referralLink: {
type: GraphQLString,
}
}
const paymentsTotal = {
_id: {
type: GraphQLID,
},
total: {
type: GraphQLFloat,
},
}
И файл запросов queries.js
import {
GraphQLID,
GraphQLList,
GraphQLString,
} from "graphql";
import { referralsUserType, paymentsTotalUserType } from "./types";
import { userModel } from "@/api/user/models";
import { paymentModel } from "@/api/pay/models";
const myReferralUser = {
type: new GraphQLList(referralsUserType),
args: {
referralLink: {
type: GraphQLString,
}
},
resolve: async (root, args, context) => {
return await userModel.find({referrerCode: args.referralLink}).exec()
},
}
const paymentsTotalUser = {
type: paymentsTotalUserType,
args: {
userId: {type: GraphQLID}
},
resolve: async (root, args, context) => {
let list = await paymentModel.find({user: args.userId, status: 'confirmed'}),
total = 0
list.forEach( payment => total += payment.total)
return {_id: args.id, total: total}
}
}
export default {
myReferralUser,
paymentsTotalUser
}
И в корне папки index.js собирающий дефолтный экспорт в именованный ( export { default as partnerQueries } from './queries' )
И собственно задача, по отдельности работающая без проблем.
Список реферралов:
query {
myReferralUser( referralLink: "admin") {
name
}
}
Возвращает мне
{
"data": {
"myReferralUser": [
{
"name": "Jane Doe"
},
{
"name": "researcher"
},
{
"name": "Heroy"
}
]
}
}
И запрос "Сумма всех подтвержденных платежей.":
query {
paymentsTotalUser( id: "617962c4f0ce29392ce35d03") {
total
}
Возвращает
{
"data": {
"paymentsTotalUser": {
"total": 0
}
}
}
}
На самом деле, первых запрос - это статистика, в которой ожидается объект со сведеными данными. И их еще нужно много... Но сейчас вопрос в одном. Как создать запрос, на получение списка реферралов, где для каждого реферрала будет прикручен еще одно свойство, являющееся результатом другого запроса. Отношение один-к-многим.