Мой код мутации выглядит следующим образом:
Mutation: {
addPost: async (parent, args) => {
// Add new post to dbPosts
const task = fawn.Task();
task.save(
dbPost,
{
_id: new mongoose.Types.ObjectId(),
title: args.title,
content: args.content,
created: args.created,
author: {
id: args.author_id,
first_name: args.author_first_name,
last_name: args.author_last_name,
}
}
);
}
}
Схема, с которой я работаю, определяется как:
scalar DateTime
type Query {
posts: [Post],
post(id: ID!): Post,
}
type Mutation {
addPost(
title: String!,
content: String!,
created: DateTime!,
author_id: String!,
author_first_name: String!
author_last_name: String!): Post,
}
type Post {
id: ID!
title: String!,
content: String!,
author: Author!,
created: DateTime,
}
Как видно, я также использую собственный скаляробрабатывать значения даты / времени.Этот пользовательский скаляр DateTime
разрешается следующим образом:
const { GraphQLScalarType } = require('graphql/type');
const tmUTC = () => {
const tmLoc = new Date();
return tmLoc.getTime() + tmLoc.getTimezoneOffset() * 60000;
};
DateTime = new GraphQLScalarType({
name: 'DateTime',
description: 'Date/Time custom scalar type',
parseValue: () => { // runs on mutation
return tmUTC();
},
serialize: (value) => { // runs on query
return new Date(value.getTime());
},
parseLiteral: () => {
return tmUTC();
},
});
module.exports = DateTime;
Теперь это работает нормально, и я могу вставлять и извлекать записи с отметкой времени, как и ожидалось.Однако мне все еще нужно передать фиктивный аргумент для поля created
, чтобы решатель DateTime
включил:
mutation{
addPost(
title: "Ghostbusters",
content: "Lots and lots of ghosts here...",
created: "",
author_id: "5ba0c2491c9d440000ac8fc3",
author_first_name: "Bill",
author_last_name: "Murray"
){
title
content
id
created
}
}
Я даже могу оставить это поле пустым, и время все равно будетзаписано.Но я не могу просто оставить это в своем мутационном вызове.Есть ли способ добиться этого?Здесь цель состоит в том, чтобы GraphQL автоматически выполнял преобразователь DateTime без необходимости явного ввода поля created
в вызове мутации.