Введите безопасное отображение данных в распознавателях GraphQL - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь добиться простого отображения из типа БД в упрощенную модель, которая обслуживается клиентами, и мне не хватает чего-то фундаментального.

Моя графовая схема выглядит следующим образом, и все, чего я хочу добиться, - это изменить список объектов для их подсчета;

type UserModel {
  id: ID!
  postCount: Int!
}

type LoginResponse {
  token: String!
  user: UserModel
}

type Mutation {
  login(input: LoginInput!): LoginResponse!
}

И призматическая модель БД выглядит следующим образом:

type User {
  id: ID! @id
  posts: [Post!]!
}

Для обеспечения безопасности типов я использую graphqlgen для генерации типов резольвера. Проблема в том, что я вынужден иметь дело с отображением в распознавателе мутаций в логине вместо распознавателя UserModel, где я хотел бы (и ожидал) этот лог c. Тем более, что мне придется делать это везде, где фигурирует UserModel.

Это то, чего я хотел бы достичь. Буду признателен за любые подсказки или предложения, которые могут мне помочь.

export const login: MutationResolvers.LoginResolver = async (_, { input }, { db }) => {
  const user = await db.user({ email: input.email })
  return {
    token: '',
    user: user,   //ERROR - user doesn't have postCount property
  }
}


export const UserModel: UserModelResolvers.Type = {
  ...UserModelResolvers.defaultResolvers,

  postCount: ({ id }, _ , { db }) => {
    return db.postsConnection({where: {author: {id: id}}}).aggregate().count();
  },
};
...